diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/accept/compile/titer2.nim | 40 | ||||
-rw-r--r-- | tests/accept/run/ttables.nim | 2 |
2 files changed, 40 insertions, 2 deletions
diff --git a/tests/accept/compile/titer2.nim b/tests/accept/compile/titer2.nim new file mode 100644 index 000000000..878ddf5e3 --- /dev/null +++ b/tests/accept/compile/titer2.nim @@ -0,0 +1,40 @@ +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 + +proc len*[A, B](t: TTable[A, B]): int = + result = t.counter + +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 0..high(t.data): + if t.data[h].slot == seFilled: yield (t.data[h].key, 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" + diff --git a/tests/accept/run/ttables.nim b/tests/accept/run/ttables.nim index cdf017dd5..3c7c7bc3a 100644 --- a/tests/accept/run/ttables.nim +++ b/tests/accept/run/ttables.nim @@ -70,8 +70,6 @@ block countTableTest1: t.inc("34", 1) assert t.largest()[0] == "90" - for k, v in t.pairs: - echo k, v t.sort() var i = 0 for k, v in t.pairs: |