summary refs log tree commit diff stats
path: root/tests/parallel/twaitany.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/parallel/twaitany.nim')
-rw-r--r--tests/parallel/twaitany.nim34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/parallel/twaitany.nim b/tests/parallel/twaitany.nim
new file mode 100644
index 000000000..d57c5f40f
--- /dev/null
+++ b/tests/parallel/twaitany.nim
@@ -0,0 +1,34 @@
+discard """
+  matrix: "--mm:refc"
+  output: '''true'''
+"""
+
+# bug #7638
+import threadpool, os
+
+proc timer(d: int): int =
+  #echo fmt"sleeping {d}"
+  sleep(d)
+  #echo fmt"done {d}"
+  return d
+
+var durations = [1000, 1500, 2000]
+var tasks: seq[FlowVarBase] = @[]
+var results: seq[int] = @[]
+
+for i in 0 .. durations.high:
+  tasks.add spawn timer(durations[i])
+
+var index = blockUntilAny(tasks)
+while index != -1:
+  results.add ^cast[FlowVar[int]](tasks[index])
+  tasks.del(index)
+  #echo repr results
+  index = blockUntilAny(tasks)
+
+doAssert results.len == 3
+doAssert 1000 in results
+doAssert 1500 in results
+doAssert 2000 in results
+sync()
+echo "true"