diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/coroutines/texceptions.nim | 24 | ||||
-rw-r--r-- | tests/coroutines/texceptions.nim.cfg | 1 | ||||
-rw-r--r-- | tests/coroutines/tgc.nim | 15 | ||||
-rw-r--r-- | tests/coroutines/tgc.nim.cfg | 1 | ||||
-rw-r--r-- | tests/coroutines/titerators.nim | 26 | ||||
-rw-r--r-- | tests/coroutines/titerators.nim.cfg | 1 |
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 |