diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-02-28 22:18:48 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-02-28 22:18:48 -0500 |
| commit | 8429d4ceac4eb99fbe8aeca2ebe864dfd5b40470 (patch) | |
| tree | 693a05c4e44a5a1148505df8bf599ab5dda99fca /test | |
| parent | c6227661568a9e8cad9d28bd7a11cb76c4f9c1c1 (diff) | |
| download | zig-8429d4ceac4eb99fbe8aeca2ebe864dfd5b40470.tar.gz zig-8429d4ceac4eb99fbe8aeca2ebe864dfd5b40470.zip | |
implement coroutine resume
Diffstat (limited to 'test')
| -rw-r--r-- | test/cases/coroutines.zig | 27 |
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; +} |
