diff options
author | Zahary Karadjov <zahary@gmail.com> | 2012-11-22 21:57:37 +0200 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2012-11-22 21:57:37 +0200 |
commit | ad53e0b022cb50bc069cfb9d196c3a11b4205b44 (patch) | |
tree | a7d35b24fcbf2696b7851e199d808ca2ad08fd7c /tests/gc | |
parent | 338683a1980e32fb31d8a09e0308e422b883e686 (diff) | |
download | Nim-ad53e0b022cb50bc069cfb9d196c3a11b4205b44.tar.gz |
added 2 GC leak test cases
Diffstat (limited to 'tests/gc')
-rw-r--r-- | tests/gc/cycleleak.nim | 42 | ||||
-rw-r--r-- | tests/gc/stackrefleak.nim | 33 |
2 files changed, 75 insertions, 0 deletions
diff --git a/tests/gc/cycleleak.nim b/tests/gc/cycleleak.nim new file mode 100644 index 000000000..0a0f2c540 --- /dev/null +++ b/tests/gc/cycleleak.nim @@ -0,0 +1,42 @@ +discard """ + outputsub: "no leak: " +""" + +type + Module = object + nodes*: seq[PNode] + + PModule = ref Module + + Node = object + owner*: PModule + data*: array[0..200, char] # some fat to drain memory faster + + PNode = ref Node + +proc newNode(owner: PModule): PNode = + new(result) + result.owner = owner + +proc compileModule: PModule = + new(result) + result.nodes = @[] + for i in 0..100: + result.nodes.add newNode(result) + +var gModuleCache: PModule + +proc loop = + for i in 0..10000: + gModuleCache = compileModule() + gModuleCache = nil + GC_fullCollect() + + if getOccupiedMem() > 300_000: + echo "still a leak! ", getOccupiedMem() + quit(1) + else: + echo "no leak: ", getOccupiedMem() + +loop() + diff --git a/tests/gc/stackrefleak.nim b/tests/gc/stackrefleak.nim new file mode 100644 index 000000000..2c652d6bf --- /dev/null +++ b/tests/gc/stackrefleak.nim @@ -0,0 +1,33 @@ +discard """ + outputsub: "no leak: " +""" + +type + Cyclic = object + sibling: PCyclic + data: array[0..200, char] + + PCyclic = ref Cyclic + +proc makePair: PCyclic = + new(result) + new(result.sibling) + result.sibling.sibling = result + +proc loop = + for i in 0..10000: + var x = makePair() + GC_fullCollect() + x = nil + GC_fullCollect() + + if getOccupiedMem() > 300_000: + echo "still a leak! ", getOccupiedMem() + quit(1) + else: + echo "no leak: ", getOccupiedMem() + +loop() + + + |