diff options
Diffstat (limited to 'tests/accept/compile/tnew.nim')
-rw-r--r-- | tests/accept/compile/tnew.nim | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/accept/compile/tnew.nim b/tests/accept/compile/tnew.nim new file mode 100644 index 000000000..6527541a2 --- /dev/null +++ b/tests/accept/compile/tnew.nim @@ -0,0 +1,49 @@ +# Test the implementation of the new operator +# and the code generation for gc walkers +# (and the garbage collector): + +type + PNode = ref TNode + TNode = object + data: int + str: string + le, ri: PNode + + TStressTest = ref array [0..45, array [1..45, TNode]] + +proc finalizer(n: PNode) = + write(stdout, n.data) + write(stdout, " is now freed\n") + +proc newNode(data: int, le, ri: PNode): PNode = + new(result, finalizer) + result.le = le + result.ri = ri + result.data = data + +# now loop and build a tree +proc main() = + var + i = 0 + p: TStressTest + while i < 1000: + var n: PNode + + n = newNode(i, nil, newNode(i + 10000, nil, nil)) + inc(i) + new(p) + + write(stdout, "Simple tree node allocation worked!\n") + i = 0 + while i < 1000: + var m = newNode(i + 20000, nil, nil) + var k = newNode(i + 30000, nil, nil) + m.le = m + m.ri = k + k.le = m + k.ri = k + inc(i) + + write(stdout, "Simple cycle allocation worked!\n") + +main() |