summary refs log tree commit diff stats
path: root/tests/destructor/tcycle1.nim
blob: 8dc552294d7caadc5f7541234673c428b3983225 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
discard """
  output: "MEM 0"
  cmd: "nim c --gc:orc $file"
"""

type
  Node = ref object of RootObj
    le, ri: Node
    name: char

proc edge(a, b: Node) =
  if a.le == nil: a.le = b
  else: a.ri = b

proc createNode(name: char): Node =
  new result
  result.name = name

#[

+---------+      +------+
|         |      |      |
|  A      +----->+      <------+-------------+
+--+------+      |      |      |             |
   |             |      |      |     C       |
   |             |  R   |      |             |
+--v------+      |      |      +-------------+
|         |      |      |        ^
|   B     <------+      |        |
|         |      |      +--------+
+---------+      |      |
                 +------+

]#

proc main =
  let a = createNode('A')
  let b = createNode('B')
  let r = createNode('R')
  let c = createNode('C')

  a.edge b
  a.edge r

  r.edge b
  r.edge c

  c.edge r


let mem = getOccupiedMem()
main()
GC_fullCollect()
echo "MEM ", getOccupiedMem() - mem