diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-03-01 15:46:35 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-03-01 15:46:35 -0500 |
| commit | 8a0e1d4c02480809fe7ab9ee40ce279ffcb4fd16 (patch) | |
| tree | 057dd60209228dee4b821288a41b167702f9bf92 /test | |
| parent | a7c87ae1e4b621291a844df678cbe0fbfb531029 (diff) | |
| download | zig-8a0e1d4c02480809fe7ab9ee40ce279ffcb4fd16.tar.gz zig-8a0e1d4c02480809fe7ab9ee40ce279ffcb4fd16.zip | |
await keyword works
Diffstat (limited to 'test')
| -rw-r--r-- | test/cases/coroutines.zig | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/cases/coroutines.zig b/test/cases/coroutines.zig index 8f1909a64f..fa32cd8ce9 100644 --- a/test/cases/coroutines.zig +++ b/test/cases/coroutines.zig @@ -59,3 +59,42 @@ async fn testSuspendBlock() void { } result = true; } + +var await_a_promise: promise = undefined; +var await_final_result: i32 = 0; + +test "coroutine await" { + await_seq('a'); + const p = async(std.debug.global_allocator) await_amain() catch unreachable; + await_seq('f'); + resume await_a_promise; + await_seq('i'); + assert(await_final_result == 1234); + assert(std.mem.eql(u8, await_points, "abcdefghi")); +} + +async fn await_amain() void { + await_seq('b'); + const p = async await_another() catch unreachable; + await_seq('e'); + await_final_result = await p; + await_seq('h'); +} + +async fn await_another() i32 { + await_seq('c'); + suspend |p| { + await_seq('d'); + await_a_promise = p; + } + await_seq('g'); + return 1234; +} + +var await_points = []u8{0} ** "abcdefghi".len; +var await_seq_index: usize = 0; + +fn await_seq(c: u8) void { + await_points[await_seq_index] = c; + await_seq_index += 1; +} |
