| ... | ... | @@ -820,6 +820,10 @@ test "Select" { |
| 820 | 820 | fn bar(io: Io) Io.Cancelable!void { |
| 821 | 821 | try io.sleep(.fromSeconds(300), .awake); |
| 822 | 822 | } |
| 823 | |
| 824 | fn baz() error{Ignored}!u8 { |
| 825 | return 42; |
| 826 | } |
| 823 | 827 | }; |
| 824 | 828 | |
| 825 | 829 | const io = testing.io; |
| ... | ... | @@ -827,6 +831,7 @@ test "Select" { |
| 827 | 831 | const U = union(enum) { |
| 828 | 832 | foo: bool, |
| 829 | 833 | bar: Io.Cancelable!void, |
| 834 | baz: error{Ignored}!u8, |
| 830 | 835 | }; |
| 831 | 836 | var buffer: [4]U = undefined; |
| 832 | 837 | var select: Io.Select(U) = .init(io, &buffer); |
| ... | ... | @@ -840,6 +845,7 @@ test "Select" { |
| 840 | 845 | switch (try select.await()) { |
| 841 | 846 | .foo => {}, |
| 842 | 847 | .bar => return error.TestFailed, // should be sleeping |
| 848 | .baz => return error.TestFailed, // not called yet |
| 843 | 849 | } |
| 844 | 850 | select.async(.foo, S.foo, .{}); |
| 845 | 851 | select.async(.foo, S.foo, .{}); |
| ... | ... | @@ -847,4 +853,14 @@ test "Select" { |
| 847 | 853 | var finished_buffer: [3]U = undefined; |
| 848 | 854 | const finished = finished_buffer[0..try select.awaitMany(&finished_buffer, 2)]; |
| 849 | 855 | try testing.expectEqualSlices(U, &.{ .{ .foo = true }, .{ .foo = true } }, finished); |
| 856 | |
| 857 | select.async(.baz, S.baz, .{}); |
| 858 | |
| 859 | const result = switch (try select.await()) { |
| 860 | .baz => |n| try n, |
| 861 | .foo => return error.TestFailed, // not called |
| 862 | .bar => return error.TestFailed, // should be sleeping |
| 863 | }; |
| 864 | |
| 865 | try testing.expectEqual(42, result); |
| 850 | 866 | } |