mirror of
https://github.com/logos-storage/apatheia.git
synced 2026-01-04 05:53:11 +00:00
more examples
This commit is contained in:
parent
61bd7aa567
commit
5a3d098557
63
tests/exFailureNoGcCollect.nim
Normal file
63
tests/exFailureNoGcCollect.nim
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import std/os
|
||||||
|
import chronos
|
||||||
|
import chronos/threadsync
|
||||||
|
import chronos/unittest2/asynctests
|
||||||
|
import taskpools
|
||||||
|
|
||||||
|
type
|
||||||
|
Seq*[T] = object
|
||||||
|
data*: ptr UncheckedArray[T]
|
||||||
|
size*: int
|
||||||
|
|
||||||
|
DataObj = ref object
|
||||||
|
mockSeq: Seq[char]
|
||||||
|
|
||||||
|
template toOpenArray*[T](arr: Seq[T]): auto =
|
||||||
|
system.toOpenArray(arr.data, 0, arr.size)
|
||||||
|
|
||||||
|
proc worker(data: ptr Seq[char], sig: ThreadSignalPtr) =
|
||||||
|
os.sleep(2_000)
|
||||||
|
echo "running worker: "
|
||||||
|
assert data[].data != nil
|
||||||
|
echo "worker: ", data[].toOpenArray()
|
||||||
|
discard sig.fireSync()
|
||||||
|
|
||||||
|
proc finalizer(obj: DataObj) =
|
||||||
|
echo "finalize DataObj and freeing mockSeq"
|
||||||
|
obj.mockSeq.data.dealloc()
|
||||||
|
obj.mockSeq.data = nil
|
||||||
|
|
||||||
|
proc initMockSeq(msg: string): Seq[char] =
|
||||||
|
result.data = cast[ptr UncheckedArray[char]](alloc0(13))
|
||||||
|
for i, c in msg:
|
||||||
|
result.data[i] = c
|
||||||
|
result.size = 12
|
||||||
|
|
||||||
|
proc runTest(tp: TaskPool, sig: ThreadSignalPtr) {.async.} =
|
||||||
|
## init
|
||||||
|
var obj: DataObj
|
||||||
|
obj.new(finalizer)
|
||||||
|
obj.mockSeq = initMockSeq("hello world!")
|
||||||
|
|
||||||
|
echo "spawn worker"
|
||||||
|
tp.spawn worker(addr obj.mockSeq, sig)
|
||||||
|
|
||||||
|
## adding fut.wait(100.milliseconds) creates memory issue
|
||||||
|
await wait(sig).wait(10.milliseconds)
|
||||||
|
## just doing the wait is fine:
|
||||||
|
# await wait(sig)
|
||||||
|
|
||||||
|
proc runTests(tp: TaskPool, sig: ThreadSignalPtr) {.async.} =
|
||||||
|
for i in 1..2_000:
|
||||||
|
try:
|
||||||
|
await runTest(tp, sig)
|
||||||
|
os.sleep(200)
|
||||||
|
except AsyncTimeoutError:
|
||||||
|
echo "Run GC"
|
||||||
|
|
||||||
|
suite "async tests":
|
||||||
|
var tp = Taskpool.new(num_threads = 2) # Default to the number of hardware threads.
|
||||||
|
let sig = ThreadSignalPtr.new().get()
|
||||||
|
|
||||||
|
asyncTest "test":
|
||||||
|
await runTests(tp, sig)
|
||||||
Loading…
x
Reference in New Issue
Block a user