diff options
author | Miran <narimiran@disroot.org> | 2018-11-09 23:45:17 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2018-11-09 22:45:17 +0000 |
commit | 964b5dac7cbfe04a8d015fe9d6c1020143bc51d2 (patch) | |
tree | aa11f5b2339b37233111cb77ac6f9caf31623ca3 /tests/async | |
parent | 8d850f7a69d473360c5b1a9db9fd998ab9b5dff4 (diff) | |
download | Nim-964b5dac7cbfe04a8d015fe9d6c1020143bc51d2.tar.gz |
complete future only once in `or` (fixes #8982) (#9632)
* complete future only once in `or` Analogous to `and`. Credits to @k0zmo for proposing the solution. * add test
Diffstat (limited to 'tests/async')
-rw-r--r-- | tests/async/t8982.nim | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/async/t8982.nim b/tests/async/t8982.nim new file mode 100644 index 000000000..5face7edf --- /dev/null +++ b/tests/async/t8982.nim @@ -0,0 +1,33 @@ +discard """ +output: ''' +timeout +runForever should throw ValueError, this is expected +''' +""" + + +import asyncdispatch + +proc failingAwaitable(p: int) {.async.} = + await sleepAsync(500) + if p > 0: + raise newException(Exception, "my exception") + +proc main() {.async.} = + let fut = failingAwaitable(1) + try: + await fut or sleepAsync(100) + if fut.finished: + echo "finished" + else: + echo "timeout" + except: + echo "failed" + + +# Previously this would raise "An attempt was made to complete a Future more than once." +try: + asyncCheck main() + runForever() +except ValueError: + echo "runForever should throw ValueError, this is expected" |