summary refs log tree commit diff stats
path: root/tests/destructor/trecursive.nim
diff options
context:
space:
mode:
authorArne Döring <arne.doering@gmx.net>2019-03-18 11:37:09 +0100
committerAndreas Rumpf <rumpf_a@web.de>2019-03-18 11:37:09 +0100
commit97c3b113a52dc96f08a898d3e5ae886bce529bc3 (patch)
treedb04a2419b19deea272e28ee59dd44beb365dbc2 /tests/destructor/trecursive.nim
parent5661a8303ca90822b22ebb59a45e31b309c59c19 (diff)
downloadNim-97c3b113a52dc96f08a898d3e5ae886bce529bc3.tar.gz
Size ptr tuple (#10846)
* fixes #10117
* Add support for recursive tuples
* detect in generics
Diffstat (limited to 'tests/destructor/trecursive.nim')
-rw-r--r--tests/destructor/trecursive.nim34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/destructor/trecursive.nim b/tests/destructor/trecursive.nim
new file mode 100644
index 000000000..55e67f52a
--- /dev/null
+++ b/tests/destructor/trecursive.nim
@@ -0,0 +1,34 @@
+
+discard """
+   output: '''
+test1 OK
+'''
+"""
+
+import smart_ptr
+
+type
+  Node[T] = object
+    value: T
+    next: SharedPtr[Node[T]]
+
+  ForwardList[T] = object
+    first: SharedPtr[Node[T]]
+    len: Natural
+
+proc pushFront*[T] (list: var ForwardList[T], val: sink T) =
+  var newNode = newSharedPtr(Node[T](value: val))
+  var result = false
+  while not result:
+    var head = list.first
+    newNode.get.next = head
+    result = list.first.cas(head, newNode)
+  list.len.atomicInc()
+
+proc test1() =
+  var list: ForwardList[int]
+  list.pushFront(1)
+  doAssert list.len == 1
+  echo "test1 OK"
+
+test1()