aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-03-01 16:17:38 -0500
committerAndrew Kelley <superjoe30@gmail.com>2018-03-01 16:17:38 -0500
commit6bade0b825c37699346a414568e79fe4c1918409 (patch)
tree467d681bef420f319413d3fdae786dba9e80cf09 /test
parent8a0e1d4c02480809fe7ab9ee40ce279ffcb4fd16 (diff)
downloadzig-6bade0b825c37699346a414568e79fe4c1918409.tar.gz
zig-6bade0b825c37699346a414568e79fe4c1918409.zip
coroutines: add await early test case
Diffstat (limited to 'test')
-rw-r--r--test/cases/coroutines.zig32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/cases/coroutines.zig b/test/cases/coroutines.zig
index fa32cd8ce9..d5469a5d03 100644
--- a/test/cases/coroutines.zig
+++ b/test/cases/coroutines.zig
@@ -98,3 +98,35 @@ fn await_seq(c: u8) void {
await_points[await_seq_index] = c;
await_seq_index += 1;
}
+
+
+var early_final_result: i32 = 0;
+
+test "coroutine await early return" {
+ early_seq('a');
+ const p = async(std.debug.global_allocator) early_amain() catch unreachable;
+ early_seq('f');
+ assert(early_final_result == 1234);
+ assert(std.mem.eql(u8, early_points, "abcdef"));
+}
+
+async fn early_amain() void {
+ early_seq('b');
+ const p = async early_another() catch unreachable;
+ early_seq('d');
+ early_final_result = await p;
+ early_seq('e');
+}
+
+async fn early_another() i32 {
+ early_seq('c');
+ return 1234;
+}
+
+var early_points = []u8{0} ** "abcdef".len;
+var early_seq_index: usize = 0;
+
+fn early_seq(c: u8) void {
+ early_points[early_seq_index] = c;
+ early_seq_index += 1;
+}