diff --git a/src/apatheia/jobs.nim b/src/apatheia/jobs.nim index de2f8c3..d9f255d 100644 --- a/src/apatheia/jobs.nim +++ b/src/apatheia/jobs.nim @@ -77,17 +77,16 @@ proc newJobQueue*[T](maxItems: int = 0, taskpool: Taskpool = Taskpool.new()): Jo asyncSpawn(processJobs(result)) template checkJobArgs*[T](exp: seq[T], fut: untyped): OpenArrayHolder[T] = - # static: - # echo "checkJobArgs::SEQ: ", $typeof(exp) - let rval = SeqHolder[T](data: exp) - fut.jobId().retainMemory(rval) - let expPtr = OpenArrayHolder[T](data: cast[ptr UncheckedArray[T]](unsafeAddr(rval.data[0])), size: rval.data.len()) - expPtr + when T is byte | SomeInteger | SomeFloat: + let rval = SeqHolder[T](data: exp) + fut.jobId().retainMemory(rval) + let expPtr = OpenArrayHolder[T](data: cast[ptr UncheckedArray[T]](unsafeAddr(rval.data[0])), size: rval.data.len()) + expPtr + else: + {.error: "unsupported sequence type for job argument: " & $typeof(seq[T]).} template checkJobArgs*(exp: typed, fut: untyped): auto = - # static: - # echo "checkJobArgs:: ", $typeof(exp) exp @@ -115,9 +114,6 @@ macro submitMacro(tp: untyped, jobs: untyped, exp: untyped): untyped = fncall.add(jobRes) for p in argids: fncall.add(p) - # for p in exp[1..^1]: - # echo "CHECK ARGS: ", p.treeRepr - # fncall.add(nnkCall.newTree(ident"checkJobArgs", p, `futName`)) result = quote do: block: @@ -149,11 +145,14 @@ when isMainModule: res += x discard jobResult.queue.send((jobResult.id, res,)) + proc addStrings(jobResult: JobResult[float], vals: OpenArrayHolder[string]) = + discard + suite "async tests": var tp = Taskpool.new(num_threads = 2) # Default to the number of hardware threads. - asyncTest "test": + asyncTest "basic openarray": # expandMacros: var jobs = newJobQueue[float](taskpool = tp) @@ -161,3 +160,12 @@ when isMainModule: let res = await job check res == 13.0 + + asyncTest "don't compile": + # expandMacros: + var jobs = newJobQueue[float](taskpool = tp) + + let job = jobs.submit(addStrings(@["a", "b", "c"])) + let res = await job + + check res == 13.0