From 9a8b39c85b22518a9c353dcf5d693e701ac272b7 Mon Sep 17 00:00:00 2001 From: Araq Date: Wed, 15 Jun 2011 17:52:04 +0200 Subject: rebuilt csources; bootstrap should work again --- tests/accept/compile/titer2.nim | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/accept/compile/titer2.nim (limited to 'tests/accept/compile') 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" + -- cgit 1.4.1-2-gfad0