From c012eab3257ba47ccdc7e29ffae752bc1c0dffd4 Mon Sep 17 00:00:00 2001 From: Joakim Ohlrogge Date: Tue, 11 Apr 2023 21:00:30 +0200 Subject: Split test into test_flatten_ok and test_flatten_err Signed-off-by: johlrogge --- src/flatten.rs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/flatten.rs b/src/flatten.rs index 257fbc8..c500e45 100644 --- a/src/flatten.rs +++ b/src/flatten.rs @@ -124,21 +124,27 @@ fn test_flatten_ok() { .map_ok(|i| (0..i)) .map_err(|i| 0..(i * 2)) .flatten_ok() + .collect(); + + assert_eq!( + mapped, + [Ok(0), Ok(0), Ok(1), Err(0..4), Err(0..0), Ok(0), Ok(1)] + ); +} + +#[test] +fn test_flatten_err() { + use map::Map; + + let mapped: Vec<_> = vec![Ok(1), Ok(2), Err(2), Err(0), Ok(2)] + .into_iter() + .map_ok(|i| (0..i)) + .map_err(|i| 0..(i * 2)) .flatten_err() .collect(); assert_eq!( mapped, - [ - Ok(0), - Ok(0), - Ok(1), - Err(0), - Err(1), - Err(2), - Err(3), - Ok(0), - Ok(1) - ] + [Ok(0..1), Ok(0..2), Err(0), Err(1), Err(2), Err(3), Ok(0..2),] ); } -- cgit v1.2.3 From 3e6f618d7875e7a5eeb49a2fbea5eeee098fcb97 Mon Sep 17 00:00:00 2001 From: Joakim Ohlrogge Date: Tue, 11 Apr 2023 21:29:33 +0200 Subject: Document `flatten_ok` Signed-off-by: johlrogge --- src/flatten.rs | 78 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/src/flatten.rs b/src/flatten.rs index c500e45..9c61cdc 100644 --- a/src/flatten.rs +++ b/src/flatten.rs @@ -6,9 +6,53 @@ /// Extension trait for `Iterator>` to selectively transform Oks and Errors. pub trait Flatten: Sized { + /// [flatten](Iterator::flatten) `Ok` values while leaving `Err`-values as is. + /// + /// ``` + /// use resiter::flatten::Flatten; + /// use resiter::map::Map; + /// + /// let mapped: Vec<_> = vec![Ok(1), Ok(2), Err(2), Err(0), Ok(2)] + /// .into_iter() + /// .map_ok(|i| (0..i)) + /// .map_err(|i| 0..(i * 2)) + /// .flatten_ok() + /// .collect(); + /// + /// assert_eq!( + /// mapped, + /// [Ok(0), Ok(0), Ok(1), Err(0..4), Err(0..0), Ok(0), Ok(1)] + /// ); + /// ``` fn flatten_ok(self) -> FlattenOk where U: IntoIterator; + /// [flatten](Iterator::flatten) `Err` values while leaving `Ok`-values as is. + /// + /// ``` + /// use resiter::flatten::Flatten; + /// use resiter::map::Map; + /// + /// let mapped: Vec<_> = vec![Ok(1), Ok(2), Err(2), Err(0), Ok(2)] + /// .into_iter() + /// .map_ok(|i| (0..i)) + /// .map_err(|i| 0..(i * 2)) + /// .flatten_err() + /// .collect(); + /// + /// assert_eq!( + /// mapped, + /// [ + /// Ok(0..1), + /// Ok(0..2), + /// Err(0), + /// Err(1), + /// Err(2), + /// Err(3), + /// Ok(0..2), + /// ] + /// ); + /// ``` fn flatten_err(self) -> FlattenErr where U: IntoIterator; @@ -114,37 +158,3 @@ where self.iter.size_hint() } } - -#[test] -fn test_flatten_ok() { - use map::Map; - - let mapped: Vec<_> = vec![Ok(1), Ok(2), Err(2), Err(0), Ok(2)] - .into_iter() - .map_ok(|i| (0..i)) - .map_err(|i| 0..(i * 2)) - .flatten_ok() - .collect(); - - assert_eq!( - mapped, - [Ok(0), Ok(0), Ok(1), Err(0..4), Err(0..0), Ok(0), Ok(1)] - ); -} - -#[test] -fn test_flatten_err() { - use map::Map; - - let mapped: Vec<_> = vec![Ok(1), Ok(2), Err(2), Err(0), Ok(2)] - .into_iter() - .map_ok(|i| (0..i)) - .map_err(|i| 0..(i * 2)) - .flatten_err() - .collect(); - - assert_eq!( - mapped, - [Ok(0..1), Ok(0..2), Err(0), Err(1), Err(2), Err(3), Ok(0..2),] - ); -} -- cgit v1.2.3