add seq destroy example

This commit is contained in:
Jaremy Creechley 2024-03-20 14:04:18 +02:00
parent bc4d8d3095
commit eff04d8efa
2 changed files with 51 additions and 21 deletions

View File

@ -4,34 +4,16 @@ 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]
proc worker(data: seq[char], sig: ThreadSignalPtr) =
proc worker(data: string, sig: ThreadSignalPtr) =
os.sleep(4_000)
echo "running worker: "
echo "worker: ", data
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 = @"hello world!"
var obj = "hello world!"
# obj.shallow()
echo "spawn worker"
tp.spawn worker(obj, sig)

View File

@ -0,0 +1,48 @@
import std/os
import chronos
import chronos/threadsync
import chronos/unittest2/asynctests
import taskpools
type
Test* = object
count*: int
proc `=destroy`*(obj: var Test) =
echo "destroy count: ", obj.count, " thread: ", getThreadId()
proc worker(data: seq[Test], sig: ThreadSignalPtr) =
os.sleep(40)
echo "running worker: ", getThreadId()
echo "worker: ", data
discard sig.fireSync()
proc runTest(tp: TaskPool, sig: ThreadSignalPtr) {.async.} =
## init
var obj = @[Test(count: 1), Test(count: 2)]
echo "spawn worker"
tp.spawn worker(obj, sig)
obj[0].count = 10
obj[1].count = 20
## adding fut.wait(100.milliseconds) creates memory issue
await wait(sig)
## just doing the wait is fine:
# await wait(sig)
proc runTests(tp: TaskPool, sig: ThreadSignalPtr) {.async.} =
for i in 1..1:
try:
echo "\n\nrunning main: ", getThreadId()
await runTest(tp, sig)
os.sleep(200)
except AsyncTimeoutError:
echo "looping..."
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)