mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 17:34:43 +00:00
* clean up some test categories * mention exact slice issue * magics into system * move trangechecks into overflow * move tmemory to system * try fix CI * try fix CI * final CI fix
62 lines
1.2 KiB
Nim
62 lines
1.2 KiB
Nim
discard """
|
|
matrix: "--mm:refc; --mm:orc"
|
|
outputsub: '''
|
|
Simple tree node allocation worked!
|
|
Simple cycle allocation worked!
|
|
'''
|
|
joinable: false
|
|
"""
|
|
|
|
# Test the implementation of the new operator
|
|
# and the code generation for gc walkers
|
|
# (and the garbage collector):
|
|
|
|
type
|
|
PNode = ref TNode
|
|
TNode = object
|
|
data: int
|
|
str: string
|
|
le, ri: PNode
|
|
|
|
TStressTest = ref array[0..45, array[1..45, TNode]]
|
|
|
|
proc finalizer(n: PNode) =
|
|
write(stdout, n.data)
|
|
write(stdout, " is now freed\n")
|
|
|
|
proc newNode(data: int, le, ri: PNode): PNode =
|
|
when defined(gcDestructors): # using finalizer breaks the test for orc
|
|
new(result)
|
|
else:
|
|
new(result, finalizer)
|
|
result.le = le
|
|
result.ri = ri
|
|
result.data = data
|
|
|
|
# now loop and build a tree
|
|
proc main() =
|
|
var
|
|
i = 0
|
|
p: TStressTest
|
|
while i < 1000:
|
|
var n: PNode
|
|
|
|
n = newNode(i, nil, newNode(i + 10000, nil, nil))
|
|
inc(i)
|
|
new(p)
|
|
|
|
write(stdout, "Simple tree node allocation worked!\n")
|
|
i = 0
|
|
while i < 1000:
|
|
var m = newNode(i + 20000, nil, nil)
|
|
var k = newNode(i + 30000, nil, nil)
|
|
m.le = m
|
|
m.ri = k
|
|
k.le = m
|
|
k.ri = k
|
|
inc(i)
|
|
|
|
write(stdout, "Simple cycle allocation worked!\n")
|
|
|
|
main()
|