Merge pull request #4367 from kierdavis/4365-tables-clear
Improvements to tables.clear()
This commit is contained in:
commit
1e134aed49
4 changed files with 53 additions and 4 deletions
|
|
@ -142,7 +142,8 @@ template delImpl() {.dirty.} =
|
||||||
|
|
||||||
template clearImpl() {.dirty.} =
|
template clearImpl() {.dirty.} =
|
||||||
for i in 0 .. <t.data.len:
|
for i in 0 .. <t.data.len:
|
||||||
t.data[i].hcode = 0
|
when compiles(t.data[i].hcode): # CountTable records don't contain a hcode
|
||||||
|
t.data[i].hcode = 0
|
||||||
t.data[i].key = default(type(t.data[i].key))
|
t.data[i].key = default(type(t.data[i].key))
|
||||||
t.data[i].val = default(type(t.data[i].val))
|
t.data[i].val = default(type(t.data[i].val))
|
||||||
t.counter = 0
|
t.counter = 0
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ template dataLen(t): untyped = len(t.data)
|
||||||
|
|
||||||
include tableimpl
|
include tableimpl
|
||||||
|
|
||||||
proc clear*[A, B](t: Table[A, B] | TableRef[A, B]) =
|
proc clear*[A, B](t: var Table[A, B] | TableRef[A, B]) =
|
||||||
## Resets the table so that it is empty.
|
## Resets the table so that it is empty.
|
||||||
clearImpl()
|
clearImpl()
|
||||||
|
|
||||||
|
|
@ -457,7 +457,7 @@ proc len*[A, B](t: OrderedTable[A, B]): int {.inline.} =
|
||||||
## returns the number of keys in `t`.
|
## returns the number of keys in `t`.
|
||||||
result = t.counter
|
result = t.counter
|
||||||
|
|
||||||
proc clear*[A, B](t: OrderedTable[A, B] | OrderedTableRef[A, B]) =
|
proc clear*[A, B](t: var OrderedTable[A, B] | OrderedTableRef[A, B]) =
|
||||||
## Resets the table so that it is empty.
|
## Resets the table so that it is empty.
|
||||||
clearImpl()
|
clearImpl()
|
||||||
t.first = -1
|
t.first = -1
|
||||||
|
|
@ -786,7 +786,7 @@ proc len*[A](t: CountTable[A]): int =
|
||||||
## returns the number of keys in `t`.
|
## returns the number of keys in `t`.
|
||||||
result = t.counter
|
result = t.counter
|
||||||
|
|
||||||
proc clear*[A](t: CountTable[A] | CountTableRef[A]) =
|
proc clear*[A](t: var CountTable[A] | CountTableRef[A]) =
|
||||||
## Resets the table so that it is empty.
|
## Resets the table so that it is empty.
|
||||||
clearImpl()
|
clearImpl()
|
||||||
t.counter = 0
|
t.counter = 0
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,29 @@ block mpairsTableTest1:
|
||||||
block SyntaxTest:
|
block SyntaxTest:
|
||||||
var x = toTable[int, string]({:})
|
var x = toTable[int, string]({:})
|
||||||
|
|
||||||
|
# Until #4448 is fixed, these tests will fail
|
||||||
|
when false:
|
||||||
|
block clearTableTest:
|
||||||
|
var t = data.toTable
|
||||||
|
assert t.len() != 0
|
||||||
|
t.clear()
|
||||||
|
assert t.len() == 0
|
||||||
|
|
||||||
|
block clearOrderedTableTest:
|
||||||
|
var t = data.toOrderedTable
|
||||||
|
assert t.len() != 0
|
||||||
|
t.clear()
|
||||||
|
assert t.len() == 0
|
||||||
|
|
||||||
|
block clearCountTableTest:
|
||||||
|
var t = initCountTable[string]()
|
||||||
|
t.inc("90", 3)
|
||||||
|
t.inc("12", 2)
|
||||||
|
t.inc("34", 1)
|
||||||
|
assert t.len() != 0
|
||||||
|
t.clear()
|
||||||
|
assert t.len() == 0
|
||||||
|
|
||||||
proc orderedTableSortTest() =
|
proc orderedTableSortTest() =
|
||||||
var t = initOrderedTable[string, int](2)
|
var t = initOrderedTable[string, int](2)
|
||||||
for key, val in items(data): t[key] = val
|
for key, val in items(data): t[key] = val
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,31 @@ block anonZipTest:
|
||||||
let values = @[1, 2, 3]
|
let values = @[1, 2, 3]
|
||||||
doAssert "{a: 1, b: 2, c: 3}" == $ toTable zip(keys, values)
|
doAssert "{a: 1, b: 2, c: 3}" == $ toTable zip(keys, values)
|
||||||
|
|
||||||
|
block clearTableTest:
|
||||||
|
var t = newTable[string, float]()
|
||||||
|
t["test"] = 1.2345
|
||||||
|
t["111"] = 1.000043
|
||||||
|
t["123"] = 1.23
|
||||||
|
assert t.len() != 0
|
||||||
|
t.clear()
|
||||||
|
assert t.len() == 0
|
||||||
|
|
||||||
|
block clearOrderedTableTest:
|
||||||
|
var t = newOrderedTable[string, int](2)
|
||||||
|
for key, val in items(data): t[key] = val
|
||||||
|
assert t.len() != 0
|
||||||
|
t.clear()
|
||||||
|
assert t.len() == 0
|
||||||
|
|
||||||
|
block clearCountTableTest:
|
||||||
|
var t = newCountTable[string]()
|
||||||
|
t.inc("90", 3)
|
||||||
|
t.inc("12", 2)
|
||||||
|
t.inc("34", 1)
|
||||||
|
assert t.len() != 0
|
||||||
|
t.clear()
|
||||||
|
assert t.len() == 0
|
||||||
|
|
||||||
orderedTableSortTest()
|
orderedTableSortTest()
|
||||||
echo "true"
|
echo "true"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue