summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-05-16 17:52:50 +0200
committerAndreas Rumpf <rumpf_a@web.de>2016-05-16 17:52:50 +0200
commitd691867c84957bd59bfc59ad867388f7276e3274 (patch)
tree15d8283a4c89bf5fd03ea30f257c59ae2acfd913
parent7e134b53886c29b5da0476d6a99b83eaa0b9bdbe (diff)
downloadNim-d691867c84957bd59bfc59ad867388f7276e3274.tar.gz
fixes #3793
-rw-r--r--tests/gc/tlists.nim37
-rw-r--r--tests/testament/categories.nim2
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"