mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-31 18:32:11 +00:00
39 lines
885 B
Nim
39 lines
885 B
Nim
discard """
|
|
outputsub: "no leak: "
|
|
"""
|
|
|
|
when defined(GC_setMaxPause):
|
|
GC_setMaxPause 2_000
|
|
|
|
type
|
|
TTestObj = object of RootObj
|
|
x: string
|
|
s: seq[int]
|
|
|
|
proc makeObj(): TTestObj =
|
|
result.x = "Hello"
|
|
result.s = @[1,2,3]
|
|
|
|
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()
|
|
if getOccupiedMem() > 300_000: quit("still a leak!")
|
|
|
|
inProc()
|
|
echo "no leak: ", getOccupiedMem()
|