2019-07-06 08:16:31 +00:00
|
|
|
# Chronos Test Suite
|
|
|
|
# (c) Copyright 2018-Present
|
|
|
|
# Status Research & Development GmbH
|
|
|
|
#
|
|
|
|
# Licensed under either of
|
|
|
|
# Apache License, version 2.0, (LICENSE-APACHEv2)
|
|
|
|
# MIT license (LICENSE-MIT)
|
|
|
|
import unittest
|
|
|
|
import ../chronos
|
|
|
|
|
2019-10-24 13:01:57 +00:00
|
|
|
when defined(nimHasUsed): {.used.}
|
|
|
|
|
2019-07-06 08:16:31 +00:00
|
|
|
proc asyncRetValue(n: int): Future[int] {.async.} =
|
|
|
|
await sleepAsync(n.milliseconds)
|
|
|
|
result = n * 10
|
|
|
|
|
|
|
|
proc asyncRetVoid(n: int) {.async.} =
|
|
|
|
await sleepAsync(n.milliseconds)
|
|
|
|
|
|
|
|
proc asyncRetExceptionValue(n: int): Future[int] {.async.} =
|
|
|
|
await sleepAsync(n.milliseconds)
|
|
|
|
result = n * 10
|
|
|
|
if true:
|
|
|
|
raise newException(ValueError, "Test exception")
|
|
|
|
|
|
|
|
proc asyncRetExceptionVoid(n: int) {.async.} =
|
|
|
|
await sleepAsync(n.milliseconds)
|
|
|
|
if true:
|
|
|
|
raise newException(ValueError, "Test exception")
|
|
|
|
|
|
|
|
proc testAwait(): Future[bool] {.async.} =
|
|
|
|
var res: int
|
|
|
|
await asyncRetVoid(100)
|
|
|
|
res = await asyncRetValue(100)
|
|
|
|
if res != 1000:
|
|
|
|
return false
|
|
|
|
if (await asyncRetValue(100)) != 1000:
|
|
|
|
return false
|
|
|
|
try:
|
|
|
|
await asyncRetExceptionVoid(100)
|
|
|
|
return false
|
|
|
|
except ValueError:
|
|
|
|
discard
|
|
|
|
res = 0
|
|
|
|
try:
|
|
|
|
var res = await asyncRetExceptionValue(100)
|
|
|
|
return false
|
|
|
|
except ValueError:
|
|
|
|
discard
|
|
|
|
if res != 0:
|
|
|
|
return false
|
|
|
|
return true
|
|
|
|
|
|
|
|
proc testAwaitne(): Future[bool] {.async.} =
|
|
|
|
var res1: Future[void]
|
|
|
|
var res2: Future[int]
|
|
|
|
|
|
|
|
res1 = awaitne asyncRetVoid(100)
|
|
|
|
res2 = awaitne asyncRetValue(100)
|
|
|
|
if res1.failed():
|
|
|
|
return false
|
|
|
|
if res2.read() != 1000:
|
|
|
|
return false
|
|
|
|
|
|
|
|
res1 = awaitne asyncRetExceptionVoid(100)
|
|
|
|
if not(res1.failed()):
|
|
|
|
return false
|
|
|
|
|
|
|
|
res2 = awaitne asyncRetExceptionValue(100)
|
|
|
|
try:
|
|
|
|
var res = res2.read()
|
|
|
|
return false
|
|
|
|
except ValueError:
|
|
|
|
discard
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
suite "Macro transformations test suite":
|
|
|
|
test "`await` command test":
|
|
|
|
check waitFor(testAwait()) == true
|
|
|
|
test "`awaitne` command test":
|
|
|
|
check waitFor(testAwaitne()) == true
|