4 fn test_iterator_skip() {
5 let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
6 let ys = [13, 15, 16, 17, 19, 20, 30];
7 let mut it = xs.iter().skip(5);
9 while let Some(&x) = it.next() {
12 assert_eq!(it.len(), xs.len() - 5 - i);
14 assert_eq!(i, ys.len());
15 assert_eq!(it.len(), 0);
18 fn test_iterator_skip_doubleended() {
19 let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
20 let mut it = xs.iter().rev().skip(5);
21 assert_eq!(it.next(), Some(&15));
22 assert_eq!(it.by_ref().rev().next(), Some(&0));
23 assert_eq!(it.next(), Some(&13));
24 assert_eq!(it.by_ref().rev().next(), Some(&1));
25 assert_eq!(it.next(), Some(&5));
26 assert_eq!(it.by_ref().rev().next(), Some(&2));
27 assert_eq!(it.next(), Some(&3));
28 assert_eq!(it.next(), None);
29 let mut it = xs.iter().rev().skip(5).rev();
30 assert_eq!(it.next(), Some(&0));
31 assert_eq!(it.rev().next(), Some(&15));
32 let mut it_base = xs.iter();
34 let mut it = it_base.by_ref().skip(5).rev();
35 assert_eq!(it.next(), Some(&30));
36 assert_eq!(it.next(), Some(&20));
37 assert_eq!(it.next(), Some(&19));
38 assert_eq!(it.next(), Some(&17));
39 assert_eq!(it.next(), Some(&16));
40 assert_eq!(it.next(), Some(&15));
41 assert_eq!(it.next(), Some(&13));
42 assert_eq!(it.next(), None);
44 // make sure the skipped parts have not been consumed
45 assert_eq!(it_base.next(), Some(&0));
46 assert_eq!(it_base.next(), Some(&1));
47 assert_eq!(it_base.next(), Some(&2));
48 assert_eq!(it_base.next(), Some(&3));
49 assert_eq!(it_base.next(), Some(&5));
50 assert_eq!(it_base.next(), None);
51 let it = xs.iter().skip(5).rev();
52 assert_eq!(it.last(), Some(&13));
55 fn test_iterator_skip_nth() {
56 let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
58 let mut it = xs.iter().skip(0);
59 assert_eq!(it.nth(0), Some(&0));
60 assert_eq!(it.nth(1), Some(&2));
62 let mut it = xs.iter().skip(5);
63 assert_eq!(it.nth(0), Some(&13));
64 assert_eq!(it.nth(1), Some(&16));
66 let mut it = xs.iter().skip(12);
67 assert_eq!(it.nth(0), None);
70 fn test_iterator_skip_count() {
71 let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
73 assert_eq!(xs.iter().skip(0).count(), 12);
74 assert_eq!(xs.iter().skip(1).count(), 11);
75 assert_eq!(xs.iter().skip(11).count(), 1);
76 assert_eq!(xs.iter().skip(12).count(), 0);
77 assert_eq!(xs.iter().skip(13).count(), 0);
80 fn test_iterator_skip_last() {
81 let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
83 assert_eq!(xs.iter().skip(0).last(), Some(&30));
84 assert_eq!(xs.iter().skip(1).last(), Some(&30));
85 assert_eq!(xs.iter().skip(11).last(), Some(&30));
86 assert_eq!(xs.iter().skip(12).last(), None);
87 assert_eq!(xs.iter().skip(13).last(), None);
89 let mut it = xs.iter().skip(5);
90 assert_eq!(it.next(), Some(&13));
91 assert_eq!(it.last(), Some(&30));
94 fn test_iterator_skip_fold() {
95 let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
96 let ys = [13, 15, 16, 17, 19, 20, 30];
98 let it = xs.iter().skip(5);
99 let i = it.fold(0, |i, &x| {
100 assert_eq!(x, ys[i]);
103 assert_eq!(i, ys.len());
105 let mut it = xs.iter().skip(5);
106 assert_eq!(it.next(), Some(&ys[0])); // process skips before folding
107 let i = it.fold(1, |i, &x| {
108 assert_eq!(x, ys[i]);
111 assert_eq!(i, ys.len());
113 let it = xs.iter().skip(5);
114 let i = it.rfold(ys.len(), |i, &x| {
116 assert_eq!(x, ys[i]);
121 let mut it = xs.iter().skip(5);
122 assert_eq!(it.next(), Some(&ys[0])); // process skips before folding
123 let i = it.rfold(ys.len(), |i, &x| {
125 assert_eq!(x, ys[i]);
131 fn test_skip_try_folds() {
132 let f = &|acc, x| i32::checked_add(2 * acc, x);
133 assert_eq!((1..20).skip(9).try_fold(7, f), (10..20).try_fold(7, f));
134 assert_eq!((1..20).skip(9).try_rfold(7, f), (10..20).try_rfold(7, f));
136 let mut iter = (0..30).skip(10);
137 assert_eq!(iter.try_fold(0, i8::checked_add), None);
138 assert_eq!(iter.next(), Some(20));
139 assert_eq!(iter.try_rfold(0, i8::checked_add), None);
140 assert_eq!(iter.next_back(), Some(24));
143 fn test_skip_nth_back() {
144 let xs = [0, 1, 2, 3, 4, 5];
145 let mut it = xs.iter().skip(2);
146 assert_eq!(it.nth_back(0), Some(&5));
147 assert_eq!(it.nth_back(1), Some(&3));
148 assert_eq!(it.nth_back(0), Some(&2));
149 assert_eq!(it.nth_back(0), None);
151 let ys = [2, 3, 4, 5];
152 let mut ity = ys.iter();
153 let mut it = xs.iter().skip(2);
154 assert_eq!(it.nth_back(1), ity.nth_back(1));
155 assert_eq!(it.clone().nth(0), ity.clone().nth(0));
156 assert_eq!(it.nth_back(0), ity.nth_back(0));
157 assert_eq!(it.clone().nth(0), ity.clone().nth(0));
158 assert_eq!(it.nth_back(0), ity.nth_back(0));
159 assert_eq!(it.clone().nth(0), ity.clone().nth(0));
160 assert_eq!(it.nth_back(0), ity.nth_back(0));
161 assert_eq!(it.clone().nth(0), ity.clone().nth(0));
163 let mut it = xs.iter().skip(2);
164 assert_eq!(it.nth_back(4), None);
165 assert_eq!(it.nth_back(0), None);
167 let mut it = xs.iter();
168 it.by_ref().skip(2).nth_back(3);
169 assert_eq!(it.next_back(), Some(&1));
171 let mut it = xs.iter();
172 it.by_ref().skip(2).nth_back(10);
173 assert_eq!(it.next_back(), Some(&1));