Files
core/test/rust/fixtures/task-select.dever
T
2026-11-03 03:32:07 +00:00

57 lines
2.1 KiB
Plaintext

type ValueResult { Ready(value: Int)
error Failed(message: Text) }
work(delay: Int, number: Int) (value: Int) { dever.task.sleep(delay)
value = number }
fallback() (value: Int) { value = 7 }
bad(delay: Int) (value: Int) { dever.task.sleep(delay)
fail(ValueResult.Failed("worker")) }
fallbackFault() (value: Int) { fail(ValueResult.Failed("fallback")) }
nothing() (value: Int?) { value = null }
nullableFallback() (value: Int?) { value = 9 }
pair(delay: Int) (first: Int, second: Text) { dever.task.sleep(delay)
first = 4
second = "pair" }
pairFallback() (first: Int, second: Text) { first = 7
second = "fallback" }
empty() () {}
duration() (value: Int) { dever.task.sleep(0)
value = 10000 }
badDuration() (value: Int) { dever.task.sleep(0)
fail(ValueResult.Failed("argument")) }
timeoutFault() (value: Int) { value = timeout(run(bad(0)), 10000, fallbackFault) }
raceFault() (value: Int) { value = race(run(bad(0)), run(work(60000, 3))) }
invalidTimeout() () { timeout(run(dever.task.sleep(60000)), 0, empty) }
argumentFault() (value: Int) { value = timeout(run(work(60000, 3)), badDuration(), fallback) }
raceArgumentFault() (value: Int) { value = race(run(work(60000, 1)), run(work(badDuration(), 2))) }
verify() (answer: Bool) {
ready = timeout(run(work(0, 1)), 10000, fallback)
expired = timeout(run(work(60000, 2)), 1, fallback)
nullable = timeout(run(nothing()), 10000, nullableFallback)
evaluated = timeout(run(work(0, 3)), duration(), fallback)
pair_value = timeout(run(pair(0)), 10000, pairFallback)
pair_expired = timeout(run(pair(60000)), 1, pairFallback)
pair_winner = race(run(pair(60000)), run(pair(0)))
winner = race(run(work(60000, 1)), run(work(60000, 2)), run(work(0, 3)))
timeout(run(dever.task.sleep(0)), 10000, empty)
timeout(run(dever.task.sleep(60000)), 1, empty)
race(run(dever.task.sleep(60000)), run(dever.task.sleep(0)))
answer = ready == 1 and expired == 7 and nullable == null and evaluated == 3 and pair_value.first == 4 and pair_value.second == "pair" and pair_expired.first == 7 and pair_expired.second == "fallback" and pair_winner.first == 4 and pair_winner.second == "pair" and winner == 3
}