aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-02-28 22:18:48 -0500
committerAndrew Kelley <superjoe30@gmail.com>2018-02-28 22:18:48 -0500
commit8429d4ceac4eb99fbe8aeca2ebe864dfd5b40470 (patch)
tree693a05c4e44a5a1148505df8bf599ab5dda99fca /test
parentc6227661568a9e8cad9d28bd7a11cb76c4f9c1c1 (diff)
downloadzig-8429d4ceac4eb99fbe8aeca2ebe864dfd5b40470.tar.gz
zig-8429d4ceac4eb99fbe8aeca2ebe864dfd5b40470.zip
implement coroutine resume
Diffstat (limited to 'test')
-rw-r--r--test/cases/coroutines.zig27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/cases/coroutines.zig b/test/cases/coroutines.zig
index f5e70774fa..2a5505360c 100644
--- a/test/cases/coroutines.zig
+++ b/test/cases/coroutines.zig
@@ -14,3 +14,30 @@ async fn simpleAsyncFn() void {
suspend;
x += 1;
}
+
+test "coroutine suspend, resume, cancel" {
+ seq('a');
+ const p = (async(std.debug.global_allocator) testAsyncSeq()) catch unreachable;
+ seq('c');
+ resume p;
+ seq('f');
+ cancel p;
+ seq('g');
+
+ assert(std.mem.eql(u8, points, "abcdefg"));
+}
+
+async fn testAsyncSeq() void {
+ defer seq('e');
+
+ seq('b');
+ suspend;
+ seq('d');
+}
+var points = []u8{0} ** "abcdefg".len;
+var index: usize = 0;
+
+fn seq(c: u8) void {
+ points[index] = c;
+ index += 1;
+}