diff options
author | Araq <rumpf_a@web.de> | 2020-09-20 09:01:42 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2020-09-20 10:43:57 +0200 |
commit | 33be7c6f5ef1a9e54d037682984f563c8ee11fcb (patch) | |
tree | f147553dd982de0313be33bba8ce2d24429ccfa4 /tests | |
parent | ebb632ccba0d786b90684e4da2b393cfae04a24c (diff) | |
download | Nim-33be7c6f5ef1a9e54d037682984f563c8ee11fcb.tar.gz |
arc: =deepcopy fixes
Diffstat (limited to 'tests')
-rw-r--r-- | tests/arc/tdeepcopy.nim | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/arc/tdeepcopy.nim b/tests/arc/tdeepcopy.nim new file mode 100644 index 000000000..0eaf7ea40 --- /dev/null +++ b/tests/arc/tdeepcopy.nim @@ -0,0 +1,67 @@ +discard """ + cmd: "nim c --gc:arc $file" + output: '''13 abc +13 abc +13 abc +13 abc +13 abc +13 abc +13 abc +13 abc +13 abc +13 abc +13 abc +called deepCopy for int +called deepCopy for int +called deepCopy for int +called deepCopy for int +called deepCopy for int +called deepCopy for int +called deepCopy for int +called deepCopy for int +called deepCopy for int +called deepCopy for int +called deepCopy for int +0''' +""" + +type + PBinaryTree = ref object of RootObj + le, ri: PBinaryTree + value: int + +proc mainB = + var x: PBinaryTree + deepCopy(x, PBinaryTree(ri: PBinaryTree(le: PBinaryTree(value: 13)))) + + var y: string + deepCopy y, "abc" + echo x.ri.le.value, " ", y + +for i in 0..10: + mainB() + + +type + Bar[T] = object + x: T + +proc `=deepCopy`[T](b: ref Bar[T]): ref Bar[T] = + result.new + result.x = b.x + when T is int: + echo "called deepCopy for int" + else: + echo "called deepCopy for something else" + +proc main = + var dummy, c: ref Bar[int] + new(dummy) + dummy.x = 44 + + deepCopy c, dummy + +for i in 0..10: + main() + +echo getOccupiedMem() |