tuples.rs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. use itertools::Itertools;
  2. #[test]
  3. fn tuples() {
  4. let v = [1, 2, 3, 4, 5];
  5. let mut iter = v.iter().cloned().tuples();
  6. assert_eq!(Some((1,)), iter.next());
  7. assert_eq!(Some((2,)), iter.next());
  8. assert_eq!(Some((3,)), iter.next());
  9. assert_eq!(Some((4,)), iter.next());
  10. assert_eq!(Some((5,)), iter.next());
  11. assert_eq!(None, iter.next());
  12. assert_eq!(None, iter.into_buffer().next());
  13. let mut iter = v.iter().cloned().tuples();
  14. assert_eq!(Some((1, 2)), iter.next());
  15. assert_eq!(Some((3, 4)), iter.next());
  16. assert_eq!(None, iter.next());
  17. itertools::assert_equal(vec![5], iter.into_buffer());
  18. let mut iter = v.iter().cloned().tuples();
  19. assert_eq!(Some((1, 2, 3)), iter.next());
  20. assert_eq!(None, iter.next());
  21. itertools::assert_equal(vec![4, 5], iter.into_buffer());
  22. let mut iter = v.iter().cloned().tuples();
  23. assert_eq!(Some((1, 2, 3, 4)), iter.next());
  24. assert_eq!(None, iter.next());
  25. itertools::assert_equal(vec![5], iter.into_buffer());
  26. }
  27. #[test]
  28. fn tuple_windows() {
  29. let v = [1, 2, 3, 4, 5];
  30. let mut iter = v.iter().cloned().tuple_windows();
  31. assert_eq!(Some((1,)), iter.next());
  32. assert_eq!(Some((2,)), iter.next());
  33. assert_eq!(Some((3,)), iter.next());
  34. let mut iter = v.iter().cloned().tuple_windows();
  35. assert_eq!(Some((1, 2)), iter.next());
  36. assert_eq!(Some((2, 3)), iter.next());
  37. assert_eq!(Some((3, 4)), iter.next());
  38. assert_eq!(Some((4, 5)), iter.next());
  39. assert_eq!(None, iter.next());
  40. let mut iter = v.iter().cloned().tuple_windows();
  41. assert_eq!(Some((1, 2, 3)), iter.next());
  42. assert_eq!(Some((2, 3, 4)), iter.next());
  43. assert_eq!(Some((3, 4, 5)), iter.next());
  44. assert_eq!(None, iter.next());
  45. let mut iter = v.iter().cloned().tuple_windows();
  46. assert_eq!(Some((1, 2, 3, 4)), iter.next());
  47. assert_eq!(Some((2, 3, 4, 5)), iter.next());
  48. assert_eq!(None, iter.next());
  49. let v = [1, 2, 3];
  50. let mut iter = v.iter().cloned().tuple_windows::<(_, _, _, _)>();
  51. assert_eq!(None, iter.next());
  52. }
  53. #[test]
  54. fn next_tuple() {
  55. let v = [1, 2, 3, 4, 5];
  56. let mut iter = v.iter();
  57. assert_eq!(iter.next_tuple().map(|(&x, &y)| (x, y)), Some((1, 2)));
  58. assert_eq!(iter.next_tuple().map(|(&x, &y)| (x, y)), Some((3, 4)));
  59. assert_eq!(iter.next_tuple::<(_, _)>(), None);
  60. }
  61. #[test]
  62. fn collect_tuple() {
  63. let v = [1, 2];
  64. let iter = v.iter().cloned();
  65. assert_eq!(iter.collect_tuple(), Some((1, 2)));
  66. let v = [1];
  67. let iter = v.iter().cloned();
  68. assert_eq!(iter.collect_tuple::<(_, _)>(), None);
  69. let v = [1, 2, 3];
  70. let iter = v.iter().cloned();
  71. assert_eq!(iter.collect_tuple::<(_, _)>(), None);
  72. }