1 use itertools::{assert_equal, Itertools};
2 use std::{ops::Range, vec::IntoIter};
3 
mix_data() -> IntoIter<Result<Range<i32>, bool>>4 fn mix_data() -> IntoIter<Result<Range<i32>, bool>> {
5     vec![Ok(0..2), Err(false), Ok(2..4), Err(true), Ok(4..6)].into_iter()
6 }
7 
ok_data() -> IntoIter<Result<Range<i32>, bool>>8 fn ok_data() -> IntoIter<Result<Range<i32>, bool>> {
9     vec![Ok(0..2), Ok(2..4), Ok(4..6)].into_iter()
10 }
11 
12 #[test]
flatten_ok_mixed_expected_forward()13 fn flatten_ok_mixed_expected_forward() {
14     assert_equal(
15         mix_data().flatten_ok(),
16         vec![
17             Ok(0),
18             Ok(1),
19             Err(false),
20             Ok(2),
21             Ok(3),
22             Err(true),
23             Ok(4),
24             Ok(5),
25         ],
26     );
27 }
28 
29 #[test]
flatten_ok_mixed_expected_reverse()30 fn flatten_ok_mixed_expected_reverse() {
31     assert_equal(
32         mix_data().flatten_ok().rev(),
33         vec![
34             Ok(5),
35             Ok(4),
36             Err(true),
37             Ok(3),
38             Ok(2),
39             Err(false),
40             Ok(1),
41             Ok(0),
42         ],
43     );
44 }
45 
46 #[test]
flatten_ok_collect_mixed_forward()47 fn flatten_ok_collect_mixed_forward() {
48     assert_eq!(
49         mix_data().flatten_ok().collect::<Result<Vec<_>, _>>(),
50         Err(false)
51     );
52 }
53 
54 #[test]
flatten_ok_collect_mixed_reverse()55 fn flatten_ok_collect_mixed_reverse() {
56     assert_eq!(
57         mix_data().flatten_ok().rev().collect::<Result<Vec<_>, _>>(),
58         Err(true)
59     );
60 }
61 
62 #[test]
flatten_ok_collect_ok_forward()63 fn flatten_ok_collect_ok_forward() {
64     assert_eq!(
65         ok_data().flatten_ok().collect::<Result<Vec<_>, _>>(),
66         Ok((0..6).collect())
67     );
68 }
69 
70 #[test]
flatten_ok_collect_ok_reverse()71 fn flatten_ok_collect_ok_reverse() {
72     assert_eq!(
73         ok_data().flatten_ok().rev().collect::<Result<Vec<_>, _>>(),
74         Ok((0..6).rev().collect())
75     );
76 }
77