use itertools::{assert_equal, Itertools}; use std::{ops::Range, vec::IntoIter}; fn mix_data() -> IntoIter, bool>> { vec![Ok(0..2), Err(false), Ok(2..4), Err(true), Ok(4..6)].into_iter() } fn ok_data() -> IntoIter, bool>> { vec![Ok(0..2), Ok(2..4), Ok(4..6)].into_iter() } #[test] fn flatten_ok_mixed_expected_forward() { assert_equal( mix_data().flatten_ok(), vec![ Ok(0), Ok(1), Err(false), Ok(2), Ok(3), Err(true), Ok(4), Ok(5), ], ); } #[test] fn flatten_ok_mixed_expected_reverse() { assert_equal( mix_data().flatten_ok().rev(), vec![ Ok(5), Ok(4), Err(true), Ok(3), Ok(2), Err(false), Ok(1), Ok(0), ], ); } #[test] fn flatten_ok_collect_mixed_forward() { assert_eq!( mix_data().flatten_ok().collect::, _>>(), Err(false) ); } #[test] fn flatten_ok_collect_mixed_reverse() { assert_eq!( mix_data().flatten_ok().rev().collect::, _>>(), Err(true) ); } #[test] fn flatten_ok_collect_ok_forward() { assert_eq!( ok_data().flatten_ok().collect::, _>>(), Ok((0..6).collect()) ); } #[test] fn flatten_ok_collect_ok_reverse() { assert_eq!( ok_data().flatten_ok().rev().collect::, _>>(), Ok((0..6).rev().collect()) ); }