| 1 | #![deny (unreachable_code)] |
| 2 | |
| 3 | use futures::{executor::block_on, try_join}; |
| 4 | |
| 5 | // TODO: This abuses https://github.com/rust-lang/rust/issues/58733 in order to |
| 6 | // test behavior of the `try_join!` macro with the never type before it is |
| 7 | // stabilized. Once `!` is again stabilized this can be removed and replaced |
| 8 | // with direct use of `!` below where `Never` is used. |
| 9 | trait MyTrait { |
| 10 | type Output; |
| 11 | } |
| 12 | impl<T> MyTrait for fn() -> T { |
| 13 | type Output = T; |
| 14 | } |
| 15 | type Never = <fn() -> ! as MyTrait>::Output; |
| 16 | |
| 17 | #[test] |
| 18 | fn try_join_never_error() { |
| 19 | block_on(async { |
| 20 | let future1 = async { Ok::<(), Never>(()) }; |
| 21 | let future2 = async { Ok::<(), Never>(()) }; |
| 22 | try_join!(future1, future2) |
| 23 | }) |
| 24 | .unwrap(); |
| 25 | } |
| 26 | |
| 27 | #[test] |
| 28 | fn try_join_never_ok() { |
| 29 | block_on(async { |
| 30 | let future1 = async { Err::<Never, ()>(()) }; |
| 31 | let future2 = async { Err::<Never, ()>(()) }; |
| 32 | try_join!(future1, future2) |
| 33 | }) |
| 34 | .unwrap_err(); |
| 35 | } |
| 36 | |