diff options
Diffstat (limited to 'tests/async/t12221.nim')
-rw-r--r-- | tests/async/t12221.nim | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/async/t12221.nim b/tests/async/t12221.nim new file mode 100644 index 000000000..e8bd9c11a --- /dev/null +++ b/tests/async/t12221.nim @@ -0,0 +1,40 @@ +import asyncdispatch, os, times + +proc doubleSleep(hardSleep: int) {.async.} = + await sleepAsync(50) + sleep(hardSleep) + +template assertTime(target, timeTook: float): untyped {.dirty.} = + doAssert(timeTook*1000 > target - 1000, "Took too short, should've taken " & + $target & "ms, but took " & $(timeTook*1000) & "ms") + doAssert(timeTook*1000 < target + 1000, "Took too long, should've taken " & + $target & "ms, but took " & $(timeTook*1000) & "ms") + +var + start: float + fut: Future[void] + +# NOTE: this uses poll(3000) to limit timing error potential. +start = epochTime() +fut = sleepAsync(40) and sleepAsync(100) and doubleSleep(20) +while not fut.finished: + poll(1000) +assertTime(150, epochTime() - start) + +start = epochTime() +fut = sleepAsync(40) and sleepAsync(100) and doubleSleep(50) +while not fut.finished: + poll(1000) +assertTime(200, epochTime() - start) + +start = epochTime() +fut = sleepAsync(40) and sleepAsync(100) and doubleSleep(20) and sleepAsync(200) +while not fut.finished: + poll(1000) +assertTime(300, epochTime() - start) + +start = epochTime() +fut = (sleepAsync(40) and sleepAsync(100) and doubleSleep(20)) or sleepAsync(300) +while not fut.finished: + poll(1000) +assertTime(150, epochTime() - start) |