flatten_ok.rs 1.5 KB

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