4 fn test_iterator_enumerate() {
5 let xs = [0, 1, 2, 3, 4, 5];
6 let it = xs.iter().enumerate();
13 fn test_iterator_enumerate_nth() {
14 let xs = [0, 1, 2, 3, 4, 5];
15 for (i, &x) in xs.iter().enumerate() {
19 let mut it = xs.iter().enumerate();
20 while let Some((i, &x)) = it.nth(0) {
24 let mut it = xs.iter().enumerate();
25 while let Some((i, &x)) = it.nth(1) {
29 let (i, &x) = xs.iter().enumerate().nth(3).unwrap();
35 fn test_iterator_enumerate_nth_back() {
36 let xs = [0, 1, 2, 3, 4, 5];
37 let mut it = xs.iter().enumerate();
38 while let Some((i, &x)) = it.nth_back(0) {
42 let mut it = xs.iter().enumerate();
43 while let Some((i, &x)) = it.nth_back(1) {
47 let (i, &x) = xs.iter().enumerate().nth_back(3).unwrap();
53 fn test_iterator_enumerate_count() {
54 let xs = [0, 1, 2, 3, 4, 5];
55 assert_eq!(xs.iter().enumerate().count(), 6);
59 fn test_iterator_enumerate_fold() {
60 let xs = [0, 1, 2, 3, 4, 5];
61 let mut it = xs.iter().enumerate();
62 // steal a couple to get an interesting offset
63 assert_eq!(it.next(), Some((0, &0)));
64 assert_eq!(it.next(), Some((1, &1)));
65 let i = it.fold(2, |i, (j, &x)| {
70 assert_eq!(i, xs.len());
72 let mut it = xs.iter().enumerate();
73 assert_eq!(it.next(), Some((0, &0)));
74 let i = it.rfold(xs.len() - 1, |i, (j, &x)| {
83 fn test_enumerate_try_folds() {
84 let f = &|acc, (i, x)| usize::checked_add(2 * acc, x / (i + 1) + i);
85 assert_eq!((9..18).enumerate().try_fold(7, f), (0..9).map(|i| (i, i + 9)).try_fold(7, f));
86 assert_eq!((9..18).enumerate().try_rfold(7, f), (0..9).map(|i| (i, i + 9)).try_rfold(7, f));
88 let mut iter = (100..200).enumerate();
89 let f = &|acc, (i, x)| u8::checked_add(acc, u8::checked_div(x, i as u8 + 1)?);
90 assert_eq!(iter.try_fold(0, f), None);
91 assert_eq!(iter.next(), Some((7, 107)));
92 assert_eq!(iter.try_rfold(0, f), None);
93 assert_eq!(iter.next_back(), Some((11, 111)));
97 fn test_double_ended_enumerate() {
98 let xs = [1, 2, 3, 4, 5, 6];
99 let mut it = xs.iter().cloned().enumerate();
100 assert_eq!(it.next(), Some((0, 1)));
101 assert_eq!(it.next(), Some((1, 2)));
102 assert_eq!(it.next_back(), Some((5, 6)));
103 assert_eq!(it.next_back(), Some((4, 5)));
104 assert_eq!(it.next_back(), Some((3, 4)));
105 assert_eq!(it.next_back(), Some((2, 3)));
106 assert_eq!(it.next(), None);