12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- discard """
- action: compile
- """
- # XXX: action should be run!
- import asyncdispatch
- proc completeOnReturn(fut: FutureVar[string], x: bool) {.async.} =
- if x:
- fut.mget() = ""
- fut.mget.add("foobar")
- return
- proc completeOnImplicitReturn(fut: FutureVar[string], x: bool) {.async.} =
- if x:
- fut.mget() = ""
- fut.mget.add("foobar")
- proc failureTest(fut: FutureVar[string], x: bool) {.async.} =
- if x:
- raise newException(Exception, "Test")
- proc manualComplete(fut: FutureVar[string], x: bool) {.async.} =
- if x:
- fut.mget() = "Hello World"
- fut.complete()
- return
- proc main() {.async.} =
- var fut: FutureVar[string]
- fut = newFutureVar[string]()
- await completeOnReturn(fut, true)
- doAssert(fut.read() == "foobar")
- fut = newFutureVar[string]()
- await completeOnImplicitReturn(fut, true)
- doAssert(fut.read() == "foobar")
- fut = newFutureVar[string]()
- let retFut = failureTest(fut, true)
- yield retFut
- doAssert(fut.read().len == 0)
- doAssert(fut.finished)
- fut = newFutureVar[string]()
- await manualComplete(fut, true)
- doAssert(fut.read() == "Hello World")
- waitFor main()
|