Removed test code from coro.nim and created three real tests for coroutines
This commit is contained in:
parent
f80ddbbcc6
commit
5aef77a3d3
8 changed files with 71 additions and 92 deletions
24
tests/coroutines/texceptions.nim
Normal file
24
tests/coroutines/texceptions.nim
Normal file
|
|
@ -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")
|
||||
1
tests/coroutines/texceptions.nim.cfg
Normal file
1
tests/coroutines/texceptions.nim.cfg
Normal file
|
|
@ -0,0 +1 @@
|
|||
-d:nimCoroutines
|
||||
15
tests/coroutines/tgc.nim
Normal file
15
tests/coroutines/tgc.nim
Normal file
|
|
@ -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")
|
||||
1
tests/coroutines/tgc.nim.cfg
Normal file
1
tests/coroutines/tgc.nim.cfg
Normal file
|
|
@ -0,0 +1 @@
|
|||
-d:nimCoroutines
|
||||
26
tests/coroutines/titerators.nim
Normal file
26
tests/coroutines/titerators.nim
Normal file
|
|
@ -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")
|
||||
1
tests/coroutines/titerators.nim.cfg
Normal file
1
tests/coroutines/titerators.nim.cfg
Normal file
|
|
@ -0,0 +1 @@
|
|||
-d:nimCoroutines
|
||||
Loading…
Add table
Add a link
Reference in a new issue