new tester; all tests categorized
This commit is contained in:
parent
51ee524109
commit
20b5f31c03
481 changed files with 794 additions and 2506 deletions
|
|
@ -1,51 +0,0 @@
|
|||
discard """
|
||||
output: '''true'''
|
||||
cmd: "nimrod cc --gc:none --hints:on $# $#"
|
||||
"""
|
||||
|
||||
import hashes
|
||||
|
||||
type
|
||||
TSlotEnum = enum seEmpty, seFilled, seDeleted
|
||||
TKeyValuePair[A, B] = tuple[slot: TSlotEnum, key: A, val: B]
|
||||
TKeyValuePairSeq[A, B] = seq[TKeyValuePair[A, B]]
|
||||
TTable* {.final.}[A, B] = object
|
||||
data: TKeyValuePairSeq[A, B]
|
||||
counter: int
|
||||
|
||||
iterator mycountup(a, b: int): int =
|
||||
var res = a
|
||||
while res <= b:
|
||||
yield res
|
||||
inc(res)
|
||||
|
||||
when true:
|
||||
iterator pairs*[A, B](t: TTable[A, B]): tuple[key: A, val: B] =
|
||||
## iterates over any (key, value) pair in the table `t`.
|
||||
for h in mycountup(0, high(t.data)):
|
||||
var k = t.data[h].key
|
||||
if t.data[h].slot == seFilled: yield (k, t.data[h].val)
|
||||
else:
|
||||
iterator pairs*(t: TTable[int, string]): tuple[key: int, val: string] =
|
||||
## iterates over any (key, value) pair in the table `t`.
|
||||
for h in mycountup(0, high(t.data)):
|
||||
var k = t.data[h].key
|
||||
if t.data[h].slot == seFilled: yield (k, t.data[h].val)
|
||||
|
||||
proc initTable*[A, B](initialSize=64): TTable[A, B] =
|
||||
## creates a new hash table that is empty. `initialSize` needs to be
|
||||
## a power of two.
|
||||
result.counter = 0
|
||||
newSeq(result.data, initialSize)
|
||||
|
||||
block Test1:
|
||||
# generic cache does not instantiate the same iterator[types] twice. This
|
||||
# means we have only one instantiation of 'h'. However, this is the same for
|
||||
# a non-generic iterator!
|
||||
|
||||
var t = initTable[int, string]()
|
||||
for k, v in t.pairs: nil
|
||||
for k, v in t.pairs: nil
|
||||
|
||||
echo "true"
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue