aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-03-01 15:46:35 -0500
committerAndrew Kelley <superjoe30@gmail.com>2018-03-01 15:46:35 -0500
commit8a0e1d4c02480809fe7ab9ee40ce279ffcb4fd16 (patch)
tree057dd60209228dee4b821288a41b167702f9bf92 /test
parenta7c87ae1e4b621291a844df678cbe0fbfb531029 (diff)
downloadzig-8a0e1d4c02480809fe7ab9ee40ce279ffcb4fd16.tar.gz
zig-8a0e1d4c02480809fe7ab9ee40ce279ffcb4fd16.zip
await keyword works
Diffstat (limited to 'test')
-rw-r--r--test/cases/coroutines.zig39
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;
+}