diff options
Diffstat (limited to 'vendor/async-stream/tests/try_stream.rs')
| -rw-r--r-- | vendor/async-stream/tests/try_stream.rs | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/vendor/async-stream/tests/try_stream.rs b/vendor/async-stream/tests/try_stream.rs new file mode 100644 index 00000000..c404e627 --- /dev/null +++ b/vendor/async-stream/tests/try_stream.rs @@ -0,0 +1,87 @@ +use async_stream::try_stream; + +use futures_core::stream::Stream; +use futures_util::stream::StreamExt; + +#[tokio::test] +async fn single_err() { + let s = try_stream! { + if true { + Err("hello")?; + } else { + yield "world"; + } + + unreachable!(); + }; + + let values: Vec<_> = s.collect().await; + assert_eq!(1, values.len()); + assert_eq!(Err("hello"), values[0]); +} + +#[tokio::test] +async fn yield_then_err() { + let s = try_stream! { + yield "hello"; + Err("world")?; + unreachable!(); + }; + + let values: Vec<_> = s.collect().await; + assert_eq!(2, values.len()); + assert_eq!(Ok("hello"), values[0]); + assert_eq!(Err("world"), values[1]); +} + +#[tokio::test] +async fn convert_err() { + struct ErrorA(u8); + #[derive(PartialEq, Debug)] + struct ErrorB(u8); + impl From<ErrorA> for ErrorB { + fn from(a: ErrorA) -> ErrorB { + ErrorB(a.0) + } + } + + fn test() -> impl Stream<Item = Result<&'static str, ErrorB>> { + try_stream! { + if true { + Err(ErrorA(1))?; + } else { + Err(ErrorB(2))?; + } + yield "unreachable"; + } + } + + let values: Vec<_> = test().collect().await; + assert_eq!(1, values.len()); + assert_eq!(Err(ErrorB(1)), values[0]); +} + +#[tokio::test] +async fn multi_try() { + fn test() -> impl Stream<Item = Result<i32, String>> { + try_stream! { + let a = Ok::<_, String>(Ok::<_, String>(123))??; + for _ in 1..10 { + yield a; + } + } + } + let values: Vec<_> = test().collect().await; + assert_eq!(9, values.len()); + assert_eq!( + std::iter::repeat(123).take(9).map(Ok).collect::<Vec<_>>(), + values + ); +} + +#[allow(unused)] +fn issue_65() -> impl Stream<Item = Result<u32, ()>> { + try_stream! { + yield Err(())?; + } +} |
