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

57 lines
1.9 KiB
Plaintext

type Result { Done
error Failed(message: Text) }
type Message { Value(value: Int?) }
produce(values: Channel<Int>) () { send(values, 10)
send(values, 20)
close(values) }
handled(value: null) (answer: Bool) recover("处理接收错误") { answer = false }
handled(value: Result.Done) (answer: Bool) recover("处理接收错误") { answer = false }
handled(value: Result.Failed(message)) (answer: Bool) recover("处理接收错误") { answer = message == "reason" }
nested(value: null) (answer: Bool) { answer = false }
nested(value: Channel<Int>) (answer: Bool) { answer = receive(value) == 7 }
verify() (answer: Bool) {
values = channel(Int, 1)
pending = run(produce(values))
first = receive(values)
second = receive(values)
end = receive(values)
wait(pending)
nullable_values = channel(Message, 2)
send(nullable_values, Message.Value(null))
send(nullable_values, Message.Value(30))
nullable_item = receive(nullable_values)
present = receive(nullable_values)
alias = nullable_values
close(alias)
nullable_end = receive(nullable_values)
lists = channel(List<Int>, 1)
original = [1, 2]
send(lists, original)
original = append(original, 3)
copied = receive(lists)
nested_values = channel(Channel<Int>, 1)
child = channel(Int, 1)
send(child, 7)
send(nested_values, child)
nested_ok = nested(receive(nested_values))
failures = channel(Result, 1)
send(failures, Result.Failed("reason"))
error_ok = handled(receive(failures))
answer = first == 10 and second == 20 and end == null and nullable_item == Message.Value(null) and present == Message.Value(30) and nullable_end == null and copied == [1, 2] and original == [1, 2, 3] and nested_ok and error_ok
}
creation() (value: Channel<Int>) { value = channel(Int, 1) }
nullable() (value: Channel<Int>?) { value = null }
invalid() () { values = channel(Int, 0) }
closed() () { values = channel(Int, 1)
close(values)
send(values, 42) }