Skip to content

Commit 43b8594

Browse files
committed
Test Iterator adapter overrides.
1 parent 306f0d0 commit 43b8594

File tree

1 file changed

+215
-0
lines changed

1 file changed

+215
-0
lines changed

src/libcoretest/iter.rs

+215
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,42 @@ fn test_iterator_chain() {
100100
assert_eq!(i, expected.len());
101101
}
102102

103+
#[test]
104+
fn test_iterator_chain_nth() {
105+
let xs = [0, 1, 2, 3, 4, 5];
106+
let ys = [30, 40, 50, 60];
107+
let zs = [];
108+
let expected = [0, 1, 2, 3, 4, 5, 30, 40, 50, 60];
109+
for (i, x) in expected.iter().enumerate() {
110+
assert_eq!(Some(x), xs.iter().chain(ys.iter()).nth(i));
111+
}
112+
assert_eq!(zs.iter().chain(xs.iter()).nth(0), Some(&0));
113+
114+
let mut it = xs.iter().chain(zs.iter());
115+
assert_eq!(it.nth(5), Some(&5));
116+
assert_eq!(it.next(), None);
117+
}
118+
119+
#[test]
120+
fn test_iterator_chain_last() {
121+
let xs = [0, 1, 2, 3, 4, 5];
122+
let ys = [30, 40, 50, 60];
123+
let zs = [];
124+
assert_eq!(xs.iter().chain(ys.iter()).last(), Some(&60));
125+
assert_eq!(zs.iter().chain(ys.iter()).last(), Some(&60));
126+
assert_eq!(ys.iter().chain(zs.iter()).last(), Some(&60));
127+
assert_eq!(zs.iter().chain(zs.iter()).last(), None);
128+
}
129+
130+
#[test]
131+
fn test_iterator_chain_count() {
132+
let xs = [0, 1, 2, 3, 4, 5];
133+
let ys = [30, 40, 50, 60];
134+
let zs = [];
135+
assert_eq!(xs.iter().chain(ys.iter()).count(), 10);
136+
assert_eq!(zs.iter().chain(ys.iter()).count(), 4);
137+
}
138+
103139
#[test]
104140
fn test_filter_map() {
105141
let it = (0..).step_by(1).take(10)
@@ -116,6 +152,34 @@ fn test_iterator_enumerate() {
116152
}
117153
}
118154

155+
#[test]
156+
fn test_iterator_enumerate_nth() {
157+
let xs = [0, 1, 2, 3, 4, 5];
158+
for (i, &x) in xs.iter().enumerate() {
159+
assert_eq!(i, x);
160+
}
161+
162+
let mut it = xs.iter().enumerate();
163+
while let Some((i, &x)) = it.nth(0) {
164+
assert_eq!(i, x);
165+
}
166+
167+
let mut it = xs.iter().enumerate();
168+
while let Some((i, &x)) = it.nth(1) {
169+
assert_eq!(i, x);
170+
}
171+
172+
let (i, &x) = xs.iter().enumerate().nth(3).unwrap();
173+
assert_eq!(i, x);
174+
assert_eq!(i, 3);
175+
}
176+
177+
#[test]
178+
fn test_iterator_enumerate_count() {
179+
let xs = [0, 1, 2, 3, 4, 5];
180+
assert_eq!(xs.iter().count(), 6);
181+
}
182+
119183
#[test]
120184
fn test_iterator_peekable() {
121185
let xs = vec![0, 1, 2, 3, 4, 5];
@@ -148,6 +212,59 @@ fn test_iterator_peekable() {
148212
assert_eq!(it.len(), 0);
149213
}
150214

215+
#[test]
216+
fn test_iterator_peekable_count() {
217+
let xs = [0, 1, 2, 3, 4, 5];
218+
let ys = [10];
219+
let zs: [i32; 0] = [];
220+
221+
assert_eq!(xs.iter().peekable().count(), 6);
222+
223+
let mut it = xs.iter().peekable();
224+
assert_eq!(it.peek(), Some(&&0));
225+
assert_eq!(it.count(), 6);
226+
227+
assert_eq!(ys.iter().peekable().count(), 1);
228+
229+
let mut it = ys.iter().peekable();
230+
assert_eq!(it.peek(), Some(&&10));
231+
assert_eq!(it.count(), 1);
232+
233+
assert_eq!(zs.iter().peekable().count(), 0);
234+
235+
let mut it = zs.iter().peekable();
236+
assert_eq!(it.peek(), None);
237+
238+
}
239+
240+
#[test]
241+
fn test_iterator_peekable_nth() {
242+
let xs = [0, 1, 2, 3, 4, 5];
243+
let mut it = xs.iter().peekable();
244+
245+
assert_eq!(it.peek(), Some(&&0));
246+
assert_eq!(it.nth(0), Some(&0));
247+
assert_eq!(it.peek(), Some(&&1));
248+
assert_eq!(it.nth(1), Some(&2));
249+
assert_eq!(it.peek(), Some(&&3));
250+
assert_eq!(it.nth(2), Some(&5));
251+
assert_eq!(it.next(), None);
252+
}
253+
254+
#[test]
255+
fn test_iterator_peekable_last() {
256+
let xs = [0, 1, 2, 3, 4, 5];
257+
let ys = [0];
258+
259+
let mut it = xs.iter().peekable();
260+
assert_eq!(it.peek(), Some(&&0));
261+
assert_eq!(it.last(), Some(&5));
262+
263+
let mut it = ys.iter().peekable();
264+
assert_eq!(it.peek(), Some(&&0));
265+
assert_eq!(it.last(), Some(&0));
266+
}
267+
151268
#[test]
152269
fn test_iterator_take_while() {
153270
let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19];
@@ -189,6 +306,49 @@ fn test_iterator_skip() {
189306
assert_eq!(it.len(), 0);
190307
}
191308

309+
#[test]
310+
fn test_iterator_skip_nth() {
311+
let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
312+
313+
let mut it = xs.iter().skip(0);
314+
assert_eq!(it.nth(0), Some(&0));
315+
assert_eq!(it.nth(1), Some(&2));
316+
317+
let mut it = xs.iter().skip(5);
318+
assert_eq!(it.nth(0), Some(&13));
319+
assert_eq!(it.nth(1), Some(&16));
320+
321+
let mut it = xs.iter().skip(12);
322+
assert_eq!(it.nth(0), None);
323+
324+
}
325+
326+
#[test]
327+
fn test_iterator_skip_count() {
328+
let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
329+
330+
assert_eq!(xs.iter().skip(0).count(), 12);
331+
assert_eq!(xs.iter().skip(1).count(), 11);
332+
assert_eq!(xs.iter().skip(11).count(), 1);
333+
assert_eq!(xs.iter().skip(12).count(), 0);
334+
assert_eq!(xs.iter().skip(13).count(), 0);
335+
}
336+
337+
#[test]
338+
fn test_iterator_skip_last() {
339+
let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30];
340+
341+
assert_eq!(xs.iter().skip(0).last(), Some(&30));
342+
assert_eq!(xs.iter().skip(1).last(), Some(&30));
343+
assert_eq!(xs.iter().skip(11).last(), Some(&30));
344+
assert_eq!(xs.iter().skip(12).last(), None);
345+
assert_eq!(xs.iter().skip(13).last(), None);
346+
347+
let mut it = xs.iter().skip(5);
348+
assert_eq!(it.next(), Some(&13));
349+
assert_eq!(it.last(), Some(&30));
350+
}
351+
192352
#[test]
193353
fn test_iterator_take() {
194354
let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19];
@@ -205,6 +365,30 @@ fn test_iterator_take() {
205365
assert_eq!(it.len(), 0);
206366
}
207367

368+
#[test]
369+
fn test_iterator_take_nth() {
370+
let xs = [0, 1, 2, 4, 5];
371+
let mut it = xs.iter();
372+
{
373+
let mut take = it.by_ref().take(3);
374+
let mut i = 0;
375+
while let Some(&x) = take.nth(0) {
376+
assert_eq!(x, i);
377+
i += 1;
378+
}
379+
}
380+
assert_eq!(it.nth(1), Some(&5));
381+
assert_eq!(it.nth(0), None);
382+
383+
let xs = [0, 1, 2, 3, 4];
384+
let mut it = xs.iter().take(7);
385+
let mut i = 1;
386+
while let Some(&x) = it.nth(1) {
387+
assert_eq!(x, i);
388+
i += 2;
389+
}
390+
}
391+
208392
#[test]
209393
fn test_iterator_take_short() {
210394
let xs = [0, 1, 2, 3];
@@ -869,6 +1053,37 @@ fn test_fuse() {
8691053
assert_eq!(it.len(), 0);
8701054
}
8711055

1056+
#[test]
1057+
fn test_fuse_nth() {
1058+
let xs = [0, 1, 2];
1059+
let mut it = xs.iter();
1060+
1061+
assert_eq!(it.len(), 3);
1062+
assert_eq!(it.nth(2), Some(&2));
1063+
assert_eq!(it.len(), 0);
1064+
assert_eq!(it.nth(2), None);
1065+
assert_eq!(it.len(), 0);
1066+
}
1067+
1068+
#[test]
1069+
fn test_fuse_last() {
1070+
let xs = [0, 1, 2];
1071+
let it = xs.iter();
1072+
1073+
assert_eq!(it.len(), 3);
1074+
assert_eq!(it.last(), Some(&2));
1075+
}
1076+
1077+
#[test]
1078+
fn test_fuse_count() {
1079+
let xs = [0, 1, 2];
1080+
let it = xs.iter();
1081+
1082+
assert_eq!(it.len(), 3);
1083+
assert_eq!(it.count(), 3);
1084+
// Can't check len now because count consumes.
1085+
}
1086+
8721087
#[bench]
8731088
fn bench_rposition(b: &mut Bencher) {
8741089
let it: Vec<usize> = (0..300).collect();

0 commit comments

Comments
 (0)