apatheia/tests/exFailure.nim

56 lines
1.1 KiB
Nim
Raw Normal View History

2024-02-21 19:51:43 -07:00
import std/os
import std/sequtils
import chronos
import chronos/threadsync
import chronos/unittest2/asynctests
import taskpools
import apatheia/queues
2024-02-21 21:59:19 -07:00
import apatheia/jobs
2024-02-21 19:51:43 -07:00
2024-02-21 20:07:24 -07:00
type
DataObj = ref object
2024-02-21 22:04:43 -07:00
holder: OpenArrayHolder[char]
2024-02-21 20:07:24 -07:00
2024-02-21 22:04:43 -07:00
proc worker(data: ptr OpenArrayHolder[char], queue: SignalQueue[int]) =
2024-02-21 20:26:08 -07:00
os.sleep(1_000)
2024-02-21 22:04:43 -07:00
echo "worker: ", data[].toOpenArray()
discard queue.send(data[].toOpenArray().len())
2024-02-21 19:51:43 -07:00
2024-02-21 20:07:24 -07:00
proc finalizer(obj: DataObj) =
echo "FINALIZE!!"
2024-02-21 22:04:43 -07:00
obj.holder.data = nil
2024-02-21 20:07:24 -07:00
proc runTest(tp: TaskPool, queue: SignalQueue[int]) {.async.} =
## init
var obj: DataObj
new(obj, finalizer)
2024-02-21 22:04:43 -07:00
let data = "hello world!".toSeq
obj.holder = data.toArrayHolder()
2024-02-21 20:07:24 -07:00
echo "spawn worker"
2024-02-21 22:04:43 -07:00
tp.spawn worker(addr obj.holder, queue)
2024-02-21 20:07:24 -07:00
2024-02-21 20:26:08 -07:00
let res =
await wait(queue).wait(100.milliseconds)
2024-02-21 20:07:24 -07:00
check res.get() == 12
2024-02-21 19:51:43 -07:00
suite "async tests":
var tp = Taskpool.new(num_threads = 2) # Default to the number of hardware threads.
var queue = newSignalQueue[int]()
asyncTest "test":
2024-02-21 20:26:08 -07:00
try:
await runTest(tp, queue)
except AsyncTimeoutError as err:
echo "Run GC"
GC_fullCollect()
os.sleep(2_000)
echo "Done"
2024-02-21 19:51:43 -07:00