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