summary refs log tree commit diff stats
path: root/tests/parallel
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-09-26 09:36:09 +0200
committerAraq <rumpf_a@web.de>2014-09-26 09:36:09 +0200
commit1088814e56811f3bca77f191d8c492405712fcdb (patch)
tree7899b77663824fa613551840c84a1e7b5f06727a /tests/parallel
parentdfd73902772a0236e09cae534ba98f1a58c194ad (diff)
downloadNim-1088814e56811f3bca77f191d8c492405712fcdb.tar.gz
deepCopy is instantiated when its corresponding type is instantiated
Diffstat (limited to 'tests/parallel')
-rw-r--r--tests/parallel/tdeepcopy2.nim35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/parallel/tdeepcopy2.nim b/tests/parallel/tdeepcopy2.nim
new file mode 100644
index 000000000..748ef4d9b
--- /dev/null
+++ b/tests/parallel/tdeepcopy2.nim
@@ -0,0 +1,35 @@
+discard """
+  output: '''called deepCopy for int
+called deepCopy for int
+done999 999
+"""
+
+import threadpool
+
+
+type
+  Bar[T] = object
+    x: T
+
+proc deepCopy[T](b: ref Bar[T]): ref Bar[T] {.override.} =
+  result.new
+  result.x = b.x
+  when T is int:
+    echo "called deepCopy for int"
+  else:
+    echo "called deepCopy for something else"
+
+proc foo(b: ref Bar[int]): int = 999
+
+# test that the disjoint checker deals with 'a = spawn f(); g = spawn f()':
+
+proc main =
+  var dummy: ref Bar[int]
+  new(dummy)
+  dummy.x = 44
+  parallel:
+    let f = spawn foo(dummy)
+    let b = spawn foo(dummy)
+  echo "done", f, " ", b
+
+main()