summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorRokas Kupstys <rokups@zoho.com>2017-02-20 17:03:39 +0200
committerRokas Kupstys <rokups@zoho.com>2017-02-20 17:54:15 +0200
commit5aef77a3d3a0c2c8997fbb08163c0730a2742784 (patch)
tree38fe7b5793081a63ecebdef69e867567b0f979c9 /tests
parentf80ddbbcc6a599f2a17275f2cca4d268f7f1fc63 (diff)
downloadNim-5aef77a3d3a0c2c8997fbb08163c0730a2742784.tar.gz
Removed test code from coro.nim and created three real tests for coroutines
Diffstat (limited to 'tests')
-rw-r--r--tests/coroutines/texceptions.nim24
-rw-r--r--tests/coroutines/texceptions.nim.cfg1
-rw-r--r--tests/coroutines/tgc.nim15
-rw-r--r--tests/coroutines/tgc.nim.cfg1
-rw-r--r--tests/coroutines/titerators.nim26
-rw-r--r--tests/coroutines/titerators.nim.cfg1
6 files changed, 68 insertions, 0 deletions
diff --git a/tests/coroutines/texceptions.nim b/tests/coroutines/texceptions.nim
new file mode 100644
index 000000000..7ad4964a0
--- /dev/null
+++ b/tests/coroutines/texceptions.nim
@@ -0,0 +1,24 @@
+import coro
+var
+  stackCheckValue = 1100220033
+  numbers = newSeq[int](10)
+  i = 0
+
+proc testExceptions(id: int, sleep: float) =
+  try:
+    numbers[i] = id; inc(i)
+    suspend(sleep)
+    numbers[i] = id; inc(i)
+    raise (ref ValueError)()
+  except:
+    numbers[i] = id; inc(i)
+    suspend(sleep)
+    numbers[i] = id; inc(i)
+  suspend(sleep)
+  numbers[i] = id; inc(i)
+
+start(proc() = testExceptions(1, 0.01))
+start(proc() = testExceptions(2, 0.011))
+run()
+doAssert(stackCheckValue == 1100220033, "Thread stack got corrupted")
+doAssert(numbers == @[1, 2, 1, 2, 1, 2, 1, 2, 1, 2], "Coroutines executed in incorrect order")
diff --git a/tests/coroutines/texceptions.nim.cfg b/tests/coroutines/texceptions.nim.cfg
new file mode 100644
index 000000000..b011bc585
--- /dev/null
+++ b/tests/coroutines/texceptions.nim.cfg
@@ -0,0 +1 @@
+-d:nimCoroutines
diff --git a/tests/coroutines/tgc.nim b/tests/coroutines/tgc.nim
new file mode 100644
index 000000000..66a12ab9d
--- /dev/null
+++ b/tests/coroutines/tgc.nim
@@ -0,0 +1,15 @@
+import coro
+
+var maxOccupiedMemory = 0
+
+proc testGC() =
+  var numbers = newSeq[int](100)
+  maxOccupiedMemory = max(maxOccupiedMemory, getOccupiedMem())
+  suspend(0)
+
+start(testGC)
+start(testGC)
+run()
+
+GC_fullCollect()
+doAssert(getOccupiedMem() < maxOccupiedMemory, "GC did not free any memory allocated in coroutines")
diff --git a/tests/coroutines/tgc.nim.cfg b/tests/coroutines/tgc.nim.cfg
new file mode 100644
index 000000000..b011bc585
--- /dev/null
+++ b/tests/coroutines/tgc.nim.cfg
@@ -0,0 +1 @@
+-d:nimCoroutines
diff --git a/tests/coroutines/titerators.nim b/tests/coroutines/titerators.nim
new file mode 100644
index 000000000..c263b49db
--- /dev/null
+++ b/tests/coroutines/titerators.nim
@@ -0,0 +1,26 @@
+import coro
+include system/timers
+
+var
+  stackCheckValue = 1100220033
+  numbers = newSeq[int](10)
+  i = 0
+
+iterator theIterator(id: int, sleep: float): int =
+  for i in 0..<5:
+    yield 10 * id + i
+    suspend(sleep)
+
+proc theCoroutine(id: int, sleep: float32) =
+  for n in theIterator(id, sleep):
+    numbers[i] = n
+    inc(i)
+
+var start = getTicks()
+start(proc() = theCoroutine(1, 0.01))
+start(proc() = theCoroutine(2, 0.011))
+run()
+var executionTime = getTicks() - start
+doAssert(executionTime >= 55_000_000.Nanos and executionTime < 56_000_000.Nanos, "Coroutines executed too short")
+doAssert(stackCheckValue == 1100220033, "Thread stack got corrupted")
+doAssert(numbers == @[10, 20, 11, 21, 12, 22, 13, 23, 14, 24], "Coroutines executed in incorrect order")
diff --git a/tests/coroutines/titerators.nim.cfg b/tests/coroutines/titerators.nim.cfg
new file mode 100644
index 000000000..b011bc585
--- /dev/null
+++ b/tests/coroutines/titerators.nim.cfg
@@ -0,0 +1 @@
+-d:nimCoroutines