summary refs log tree commit diff stats
path: root/tests/parallel
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-12-11 01:02:53 +0100
committerAraq <rumpf_a@web.de>2014-12-11 01:02:53 +0100
commit393be493136d8323d0335bf8c45b0f90a5e9742c (patch)
tree84c057c32c1012596078dac2f1a9cb80fdfdd44d /tests/parallel
parentb7c806381695b8f8ceb0676905461b9a145c0350 (diff)
downloadNim-393be493136d8323d0335bf8c45b0f90a5e9742c.tar.gz
fixes #1597
Diffstat (limited to 'tests/parallel')
-rw-r--r--tests/parallel/treadafterwrite.nim31
-rw-r--r--tests/parallel/tuseafterdef.nim31
2 files changed, 62 insertions, 0 deletions
diff --git a/tests/parallel/treadafterwrite.nim b/tests/parallel/treadafterwrite.nim
new file mode 100644
index 000000000..f59ad5ae0
--- /dev/null
+++ b/tests/parallel/treadafterwrite.nim
@@ -0,0 +1,31 @@
+discard """
+  errormsg: "'foo' not disjoint from 'foo'"
+  line: 23
+  disabled: "true"
+"""
+
+# bug #1597
+
+import strutils, math, threadpool
+
+type
+  BoxedFloat = object
+    value: float
+
+proc term(k: float): ptr BoxedFloat = 
+  var temp = 4 * math.pow(-1, k) / (2*k + 1)
+  result = cast[ptr BoxedFloat](allocShared(sizeof(BoxedFloat)))
+  result.value = temp
+
+proc pi(n: int): float =
+  var ch = newSeq[ptr BoxedFloat](n+1)
+  parallel:
+    for k in 0..ch.high:
+      let foo = (spawn term(float(k)))
+      assert foo != nil
+  for k in 0..ch.high:
+    var temp = ch[k][].value
+    result += temp
+    deallocShared(ch[k])
+
+echo formatFloat(pi(5000))
diff --git a/tests/parallel/tuseafterdef.nim b/tests/parallel/tuseafterdef.nim
new file mode 100644
index 000000000..95123e886
--- /dev/null
+++ b/tests/parallel/tuseafterdef.nim
@@ -0,0 +1,31 @@
+discard """
+  errormsg: "(k)..(k) not disjoint from (k)..(k)"
+  line: 23
+"""
+
+# bug #1597
+
+import strutils, math, threadpool
+
+type 
+  BoxedFloat = object
+    value: float
+
+proc term(k: float): ptr BoxedFloat = 
+  var temp = 4 * math.pow(-1, k) / (2*k + 1)
+  result = cast[ptr BoxedFloat](allocShared(sizeof(BoxedFloat)))
+  result.value = temp
+
+proc pi(n: int): float =
+  var ch = newSeq[ptr BoxedFloat](n+1)
+  parallel:
+    for k in 0..ch.high:
+      ch[k] = (spawn term(float(k)))
+      assert ch[k] != nil
+  for k in 0..ch.high:
+    var temp = ch[k][].value
+    result += temp
+    deallocShared(ch[k])
+
+
+echo formatFloat(pi(5000))