apatheia/tests/exampleGcFailures/exNoFailurePtrSeqSeq.nim

61 lines
1.5 KiB
Nim
Raw Normal View History

2024-02-24 15:08:02 -07:00
import std/os
import std/sequtils
import chronos
import chronos/threadsync
import chronos/unittest2/asynctests
import taskpools
## create a probablistically likely failure of
## using sequence memory from another thread
## with refc.
##
## However, unlike `exFailure.nim`, this can take
## a while to run.
##
## It may not always produce an error either, but
## generally does so in a few seconds of running.
##
2024-03-19 13:53:29 +02:00
proc worker(data: ptr seq[seq[char]], sig: ThreadSignalPtr) =
2024-02-27 23:32:10 -07:00
# os.sleep(100)
2024-02-24 15:08:02 -07:00
echo "running worker: "
2024-03-19 13:53:29 +02:00
echo "worker: ", data.pointer.repr
echo "worker: ", data[]
2024-02-27 22:07:14 -07:00
# for i, d in data:
# for j, c in d:
2024-02-27 23:51:53 -07:00
# data[i][j] = char(c.uint8 + 10)
2024-02-27 22:07:14 -07:00
GC_fullCollect()
2024-02-27 22:10:30 -07:00
discard sig.fireSync()
2024-02-24 15:08:02 -07:00
2024-02-27 23:35:28 -07:00
proc runTest(tp: TaskPool, sig: ThreadSignalPtr, i: int) {.async.} =
2024-02-24 15:08:02 -07:00
## init
2024-02-27 23:51:53 -07:00
# await sleepAsync(10.milliseconds)
2024-02-27 23:35:28 -07:00
var obj1 = ("hello world! " & $i).toSeq()
2024-02-24 15:08:02 -07:00
var obj2 = "goodbye denver!".toSeq()
var data = @[obj1, obj2]
# echo "spawn worker"
2024-03-19 13:53:29 +02:00
tp.spawn worker(addr data, sig)
2024-02-24 15:08:02 -07:00
2024-02-27 23:32:10 -07:00
await wait(sig)
2024-02-27 23:51:53 -07:00
echo "data: ", data.addr.pointer.repr
2024-02-27 22:07:14 -07:00
echo "data: ", data
2024-02-27 23:51:53 -07:00
echo ""
2024-02-24 15:08:02 -07:00
proc runTests(tp: TaskPool, sig: ThreadSignalPtr) {.async.} =
2024-02-27 23:51:53 -07:00
var futs = newSeq[Future[void]]()
2024-03-19 14:01:43 +02:00
for i in 1..1:
2024-02-27 23:51:53 -07:00
let f = runTest(tp, sig, i)
# futs.add f
await f
2024-02-27 22:07:14 -07:00
GC_fullCollect()
2024-02-27 23:51:53 -07:00
await allFutures(futs)
2024-02-24 15:08:02 -07:00
suite "async tests":
2024-02-27 23:32:59 -07:00
var tp = Taskpool.new(num_threads = 4) # Default to the number of hardware threads.
2024-02-24 15:08:02 -07:00
let sig = ThreadSignalPtr.new().get()
asyncTest "test":
await runTests(tp, sig)
2024-02-27 22:07:14 -07:00
# os.sleep(10_000)