diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-05-16 17:52:50 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2016-05-16 17:52:50 +0200 |
commit | d691867c84957bd59bfc59ad867388f7276e3274 (patch) | |
tree | 15d8283a4c89bf5fd03ea30f257c59ae2acfd913 | |
parent | 7e134b53886c29b5da0476d6a99b83eaa0b9bdbe (diff) | |
download | Nim-d691867c84957bd59bfc59ad867388f7276e3274.tar.gz |
fixes #3793
-rw-r--r-- | tests/gc/tlists.nim | 37 | ||||
-rw-r--r-- | tests/testament/categories.nim | 2 |
2 files changed, 39 insertions, 0 deletions
diff --git a/tests/gc/tlists.nim b/tests/gc/tlists.nim new file mode 100644 index 000000000..26b32396c --- /dev/null +++ b/tests/gc/tlists.nim @@ -0,0 +1,37 @@ +discard """ + output: '''Success''' +""" + +# bug #3793 + +import os +import math +import lists +import strutils + +proc mkleak() = + # allocate 10 MB via linked lists + let numberOfLists = 100 + for i in countUp(1, numberOfLists): + var leakList = initDoublyLinkedList[string]() + let numberOfLeaks = 50000 + for j in countUp(1, numberOfLeaks): + let leakSize = 200 + let leaked = newString(leakSize) + leakList.append(leaked) + +proc mkManyLeaks() = + for i in 0..0: + when false: echo getOccupiedMem() + mkleak() + when false: echo getOccupiedMem() + # Force a full collection. This should free all of the + # lists and bring the memory usage down to a few MB's. + GC_fullCollect() + when false: echo getOccupiedMem() + if getOccupiedMem() > 8 * 200 * 50_000 * 2: + echo GC_getStatistics() + quit "leaking" + echo "Success" + +mkManyLeaks() diff --git a/tests/testament/categories.nim b/tests/testament/categories.nim index 150c55edc..d08310d60 100644 --- a/tests/testament/categories.nim +++ b/tests/testament/categories.nim @@ -152,6 +152,8 @@ proc gcTests(r: var TResults, cat: Category, options: string) = testWithoutBoehm "closureleak" testWithoutMs "refarrayleak" + testWithoutBoehm "tlists" + test "stackrefleak" test "cyclecollector" |