type Result { Done error Failed(message: Text) } type Message { Value(value: Int?) } produce(values: Channel) () { 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) (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, 1) original = [1, 2] send(lists, original) original = append(original, 3) copied = receive(lists) nested_values = channel(Channel, 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) { value = channel(Int, 1) } nullable() (value: Channel?) { value = null } invalid() () { values = channel(Int, 0) } closed() () { values = channel(Int, 1) close(values) send(values, 42) }