summary refs log tree commit diff stats
path: root/tests/gc/gcleak2.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gc/gcleak2.nim')
-rw-r--r--[-rwxr-xr-x]tests/gc/gcleak2.nim29
1 files changed, 22 insertions, 7 deletions
diff --git a/tests/gc/gcleak2.nim b/tests/gc/gcleak2.nim
index bd7962a7e..bc943dbe7 100755..100644
--- a/tests/gc/gcleak2.nim
+++ b/tests/gc/gcleak2.nim
@@ -2,22 +2,37 @@ discard """
   outputsub: "no leak: "
 """
 
+when defined(GC_setMaxPause):
+  GC_setMaxPause 2_000
+
 type
-  TTestObj = object of TObject
+  TTestObj = object of RootObj
     x: string
     s: seq[int]
 
-proc MakeObj(): TTestObj =
+proc makeObj(): TTestObj =
   result.x = "Hello"
   result.s = @[1,2,3]
 
-proc inProc() = 
-  for i in 1 .. 100_000_000:
+const numIter =
+  when defined(boehmgc):
+    # super slow because GC_fullcollect() at each iteration; especially
+    # on OSX 10.15 where it takes ~170s
+    # `getOccupiedMem` should be constant after each iteration for i >= 3
+    1_000
+  elif defined(gcMarkAndSweep):
+    # likewise, somewhat slow, 1_000_000 would run for 8s
+    # and same remark as above
+    100_000
+  else: 1_000_000
+
+proc inProc() =
+  for i in 1 .. numIter:
+    when defined(gcMarkAndSweep) or defined(boehmgc):
+      GC_fullcollect()
     var obj: TTestObj
-    obj = MakeObj()
+    obj = makeObj()
     if getOccupiedMem() > 300_000: quit("still a leak!")
 
 inProc()
 echo "no leak: ", getOccupiedMem()
-
-