summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/gc/cycleleak.nim26
-rwxr-xr-xtests/gc/gcleak.nim4
-rwxr-xr-xtests/gc/gcleak2.nim4
-rw-r--r--tests/gc/weakrefs.nim2
-rwxr-xr-xtests/reject/trecinca.nim2
-rwxr-xr-xtests/reject/trecincb.nim2
-rw-r--r--tests/specials.nim4
7 files changed, 34 insertions, 10 deletions
diff --git a/tests/gc/cycleleak.nim b/tests/gc/cycleleak.nim
index 0a0f2c540..9f5c30ebd 100644
--- a/tests/gc/cycleleak.nim
+++ b/tests/gc/cycleleak.nim
@@ -5,38 +5,52 @@ discard """
 type
   Module = object
     nodes*: seq[PNode]
+    id: int
 
   PModule = ref Module
 
   Node = object
     owner*: PModule
     data*: array[0..200, char] # some fat to drain memory faster
+    id: int
 
   PNode = ref Node
 
+var
+  gid: int
+
+when false:
+  proc finalizeNode(x: PNode) =
+    echo "node id: ", x.id
+  proc finalizeModule(x: PModule) =
+    echo "module id: ", x.id
+
 proc newNode(owner: PModule): PNode =
   new(result)
   result.owner = owner
+  inc gid
+  result.id = gid
 
 proc compileModule: PModule =
   new(result)
   result.nodes = @[]
   for i in 0..100:
     result.nodes.add newNode(result)
+  inc gid
+  result.id = gid
 
 var gModuleCache: PModule
 
 proc loop =
-  for i in 0..10000:
+  for i in 0..1000:
     gModuleCache = compileModule()
     gModuleCache = nil
     GC_fullCollect()
 
-  if getOccupiedMem() > 300_000:
-    echo "still a leak! ", getOccupiedMem()
-    quit(1)
-  else:
-    echo "no leak: ", getOccupiedMem()
+    if getOccupiedMem() > 9_000_000:
+      echo "still a leak! ", getOccupiedMem()
+      quit(1)
+  echo "no leak: ", getOccupiedMem()
 
 loop()
 
diff --git a/tests/gc/gcleak.nim b/tests/gc/gcleak.nim
index c40c6b3b5..4e47db609 100755
--- a/tests/gc/gcleak.nim
+++ b/tests/gc/gcleak.nim
@@ -12,7 +12,9 @@ type
 proc MakeObj(): TTestObj =
   result.x = "Hello"
 
-for i in 1 .. 100_000_000:
+for i in 1 .. 1_000_000:
+  when defined(gcMarkAndSweep):
+    GC_fullcollect()
   var obj = MakeObj()
   if getOccupiedMem() > 300_000: quit("still a leak!")
 #  echo GC_getstatistics()
diff --git a/tests/gc/gcleak2.nim b/tests/gc/gcleak2.nim
index a50541fbc..41d149bed 100755
--- a/tests/gc/gcleak2.nim
+++ b/tests/gc/gcleak2.nim
@@ -15,7 +15,9 @@ proc MakeObj(): TTestObj =
   result.s = @[1,2,3]
 
 proc inProc() = 
-  for i in 1 .. 100_000_000:
+  for i in 1 .. 1_000_000:
+    when defined(gcMarkAndSweep):
+      GC_fullcollect()
     var obj: TTestObj
     obj = MakeObj()
     if getOccupiedMem() > 300_000: quit("still a leak!")
diff --git a/tests/gc/weakrefs.nim b/tests/gc/weakrefs.nim
index 3b12d7998..0a6d4b873 100644
--- a/tests/gc/weakrefs.nim
+++ b/tests/gc/weakrefs.nim
@@ -40,6 +40,8 @@ proc main =
   for i in 0 .. s.high:
     s[i] = register(create())
   # test that we have at least 80% unreachable weak objects by now:
+  when defined(gcMarkAndSweep):
+    GC_fullcollect()
   var unreachable = 0
   for i in 0 .. s.high:
     if access(s[i]) == nil: inc unreachable
diff --git a/tests/reject/trecinca.nim b/tests/reject/trecinca.nim
index cf2f7df0c..bedea8d7e 100755
--- a/tests/reject/trecinca.nim
+++ b/tests/reject/trecinca.nim
@@ -1,5 +1,5 @@
 discard """
-  file: "trecincb.nim"
+  file: "tests/reject/trecincb.nim"
   line: 9
   errormsg: "recursive dependency: 'trecincb.nim'"
 """
diff --git a/tests/reject/trecincb.nim b/tests/reject/trecincb.nim
index eb0f72db0..9dd7d51de 100755
--- a/tests/reject/trecincb.nim
+++ b/tests/reject/trecincb.nim
@@ -1,7 +1,7 @@
 discard """
   file: "trecincb.nim"
   line: 9
-  errormsg: "recursive dependency: 'trecincb.nim'"
+  errormsg: "recursive dependency: 'tests/reject/trecincb.nim'"
 """
 # Test recursive includes
 
diff --git a/tests/specials.nim b/tests/specials.nim
index dd420b4b3..1818497a4 100644
--- a/tests/specials.nim
+++ b/tests/specials.nim
@@ -119,6 +119,10 @@ proc runGcTests(r: var TResults, options: string) =
     runSingleTest(r, "tests/gc" / filename, options & " -d:release")
     runSingleTest(r, "tests/gc" / filename, options &
                   " -d:release -d:useRealtimeGC")
+    runSingleTest(r, "tests/gc" / filename, options &
+                  " --gc:markAndSweep")
+    runSingleTest(r, "tests/gc" / filename, options &
+                  " -d:release --gc:markAndSweep")
   
   test "gcbench"
   test "gcleak"