| ... | ... | @@ -1,86 +1,86 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | | var defer_f1: bool = false; |
| 4 | | var defer_f2: bool = false; |
| 5 | | var defer_f3: bool = false; |
| 6 | | |
| 7 | | test "cancel forwards" { |
| 8 | | const p = async<std.heap.direct_allocator> f1() catch unreachable; |
| 9 | | cancel p; |
| 10 | | std.testing.expect(defer_f1); |
| 11 | | std.testing.expect(defer_f2); |
| 12 | | std.testing.expect(defer_f3); |
| 13 | | } |
| 14 | | |
| 15 | | async fn f1() void { |
| 16 | | defer { |
| 17 | | defer_f1 = true; |
| 18 | | } |
| 19 | | await (async f2() catch unreachable); |
| 20 | | } |
| 21 | | |
| 22 | | async fn f2() void { |
| 23 | | defer { |
| 24 | | defer_f2 = true; |
| 25 | | } |
| 26 | | await (async f3() catch unreachable); |
| 27 | | } |
| 28 | | |
| 29 | | async fn f3() void { |
| 30 | | defer { |
| 31 | | defer_f3 = true; |
| 32 | | } |
| 33 | | suspend; |
| 34 | | } |
| 35 | | |
| 36 | | var defer_b1: bool = false; |
| 37 | | var defer_b2: bool = false; |
| 38 | | var defer_b3: bool = false; |
| 39 | | var defer_b4: bool = false; |
| 40 | | |
| 41 | | test "cancel backwards" { |
| 42 | | const p = async<std.heap.direct_allocator> b1() catch unreachable; |
| 43 | | cancel p; |
| 44 | | std.testing.expect(defer_b1); |
| 45 | | std.testing.expect(defer_b2); |
| 46 | | std.testing.expect(defer_b3); |
| 47 | | std.testing.expect(defer_b4); |
| 48 | | } |
| 49 | | |
| 50 | | async fn b1() void { |
| 51 | | defer { |
| 52 | | defer_b1 = true; |
| 53 | | } |
| 54 | | await (async b2() catch unreachable); |
| 55 | | } |
| 56 | | |
| 57 | | var b4_handle: promise = undefined; |
| 58 | | |
| 59 | | async fn b2() void { |
| 60 | | const b3_handle = async b3() catch unreachable; |
| 61 | | resume b4_handle; |
| 62 | | cancel b4_handle; |
| 63 | | defer { |
| 64 | | defer_b2 = true; |
| 65 | | } |
| 66 | | const value = await b3_handle; |
| 67 | | @panic("unreachable"); |
| 68 | | } |
| 69 | | |
| 70 | | async fn b3() i32 { |
| 71 | | defer { |
| 72 | | defer_b3 = true; |
| 73 | | } |
| 74 | | await (async b4() catch unreachable); |
| 75 | | return 1234; |
| 76 | | } |
| 77 | | |
| 78 | | async fn b4() void { |
| 79 | | defer { |
| 80 | | defer_b4 = true; |
| 81 | | } |
| 82 | | suspend { |
| 83 | | b4_handle = @handle(); |
| 84 | | } |
| 85 | | suspend; |
| 86 | | } |
| 3 | //var defer_f1: bool = false; |
| 4 | //var defer_f2: bool = false; |
| 5 | //var defer_f3: bool = false; |
| 6 | // |
| 7 | //test "cancel forwards" { |
| 8 | // const p = async<std.heap.direct_allocator> f1() catch unreachable; |
| 9 | // cancel p; |
| 10 | // std.testing.expect(defer_f1); |
| 11 | // std.testing.expect(defer_f2); |
| 12 | // std.testing.expect(defer_f3); |
| 13 | //} |
| 14 | // |
| 15 | //async fn f1() void { |
| 16 | // defer { |
| 17 | // defer_f1 = true; |
| 18 | // } |
| 19 | // await (async f2() catch unreachable); |
| 20 | //} |
| 21 | // |
| 22 | //async fn f2() void { |
| 23 | // defer { |
| 24 | // defer_f2 = true; |
| 25 | // } |
| 26 | // await (async f3() catch unreachable); |
| 27 | //} |
| 28 | // |
| 29 | //async fn f3() void { |
| 30 | // defer { |
| 31 | // defer_f3 = true; |
| 32 | // } |
| 33 | // suspend; |
| 34 | //} |
| 35 | // |
| 36 | //var defer_b1: bool = false; |
| 37 | //var defer_b2: bool = false; |
| 38 | //var defer_b3: bool = false; |
| 39 | //var defer_b4: bool = false; |
| 40 | // |
| 41 | //test "cancel backwards" { |
| 42 | // const p = async<std.heap.direct_allocator> b1() catch unreachable; |
| 43 | // cancel p; |
| 44 | // std.testing.expect(defer_b1); |
| 45 | // std.testing.expect(defer_b2); |
| 46 | // std.testing.expect(defer_b3); |
| 47 | // std.testing.expect(defer_b4); |
| 48 | //} |
| 49 | // |
| 50 | //async fn b1() void { |
| 51 | // defer { |
| 52 | // defer_b1 = true; |
| 53 | // } |
| 54 | // await (async b2() catch unreachable); |
| 55 | //} |
| 56 | // |
| 57 | //var b4_handle: promise = undefined; |
| 58 | // |
| 59 | //async fn b2() void { |
| 60 | // const b3_handle = async b3() catch unreachable; |
| 61 | // resume b4_handle; |
| 62 | // cancel b4_handle; |
| 63 | // defer { |
| 64 | // defer_b2 = true; |
| 65 | // } |
| 66 | // const value = await b3_handle; |
| 67 | // @panic("unreachable"); |
| 68 | //} |
| 69 | // |
| 70 | //async fn b3() i32 { |
| 71 | // defer { |
| 72 | // defer_b3 = true; |
| 73 | // } |
| 74 | // await (async b4() catch unreachable); |
| 75 | // return 1234; |
| 76 | //} |
| 77 | // |
| 78 | //async fn b4() void { |
| 79 | // defer { |
| 80 | // defer_b4 = true; |
| 81 | // } |
| 82 | // suspend { |
| 83 | // b4_handle = @handle(); |
| 84 | // } |
| 85 | // suspend; |
| 86 | //} |