diff options
author | Araq <rumpf_a@web.de> | 2015-01-05 02:27:24 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-01-05 02:27:24 +0100 |
commit | 7524610b310203c423f0fd593a05baca603e3a6c (patch) | |
tree | 1b85380ec2b359fc7cec293a9036f56d3f723dec /tests | |
parent | e751a0af573a5a65eaaabf15fecb1f1c010b6bf6 (diff) | |
download | Nim-7524610b310203c423f0fd593a05baca603e3a6c.tar.gz |
fixes #1796
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gc/closureleak.nim | 4 | ||||
-rw-r--r-- | tests/gc/cyclecollector.nim | 21 | ||||
-rw-r--r-- | tests/gc/gctest.nim | 3 | ||||
-rw-r--r-- | tests/testament/categories.nim | 13 |
4 files changed, 34 insertions, 7 deletions
diff --git a/tests/gc/closureleak.nim b/tests/gc/closureleak.nim index 38ee1250a..1c39f43d5 100644 --- a/tests/gc/closureleak.nim +++ b/tests/gc/closureleak.nim @@ -7,7 +7,7 @@ from strutils import join type TFoo * = object id: int - func: proc(){.closure.} + fn: proc(){.closure.} var foo_counter = 0 var alive_foos = newseq[int](0) @@ -26,7 +26,7 @@ for i in 0 .. <10: for i in 0 .. <10: let f = newFoo() - f.func = proc = + f.fn = proc = echo f.id GC_fullcollect() diff --git a/tests/gc/cyclecollector.nim b/tests/gc/cyclecollector.nim new file mode 100644 index 000000000..46fed6c45 --- /dev/null +++ b/tests/gc/cyclecollector.nim @@ -0,0 +1,21 @@ + +# Program to detect bug #1796 reliably + +type + Node = ref object + a, b: Node + leaf: string + +proc createCycle(leaf: string): Node = + new result + result.a = result + shallowCopy result.leaf, leaf + +proc main = + for i in 0 .. 100_000: + var leaf = "this is the leaf. it allocates" + let x = createCycle(leaf) + let y = createCycle(leaf) + echo "done ", getOccupiedMem() + +main() diff --git a/tests/gc/gctest.nim b/tests/gc/gctest.nim index 27134d7dd..2213a83ac 100644 --- a/tests/gc/gctest.nim +++ b/tests/gc/gctest.nim @@ -196,7 +196,8 @@ write(stdout, "starting main...\n") main() GC_fullCollect() +# the M&S GC fails with this call and it's unclear why. Definitely something +# we need to fix! GC_fullCollect() writeln(stdout, GC_getStatistics()) write(stdout, "finished\n") - diff --git a/tests/testament/categories.nim b/tests/testament/categories.nim index ae9905cde..7c7d71aa2 100644 --- a/tests/testament/categories.nim +++ b/tests/testament/categories.nim @@ -107,12 +107,15 @@ proc dllTests(r: var TResults, cat: Category, options: string) = # ------------------------------ GC tests ------------------------------------- proc gcTests(r: var TResults, cat: Category, options: string) = - template test(filename: expr): stmt = + template testWithoutMs(filename: expr): stmt = testSpec r, makeTest("tests/gc" / filename, options, cat, actionRun) testSpec r, makeTest("tests/gc" / filename, options & " -d:release", cat, actionRun) testSpec r, makeTest("tests/gc" / filename, options & " -d:release -d:useRealtimeGC", cat, actionRun) + + template test(filename: expr): stmt = + testWithoutMs filename testSpec r, makeTest("tests/gc" / filename, options & " --gc:markAndSweep", cat, actionRun) testSpec r, makeTest("tests/gc" / filename, options & @@ -124,13 +127,15 @@ proc gcTests(r: var TResults, cat: Category, options: string) = test "gctest" test "gcleak3" test "gcleak4" - test "gcleak5" + # Disabled because it works and takes too long to run: + #test "gcleak5" test "weakrefs" test "cycleleak" test "closureleak" - test "refarrayleak" - test "stackrefleak" + testWithoutMs "refarrayleak" + test "stackrefleak" + test "cyclecollector" # ------------------------- threading tests ----------------------------------- |