1 use itertools::Itertools;
2 use itertools::{put_back, put_back_n};
3
4 #[test]
peeking_take_while_peekable()5 fn peeking_take_while_peekable() {
6 let mut r = (0..10).peekable();
7 r.peeking_take_while(|x| *x <= 3).count();
8 assert_eq!(r.next(), Some(4));
9 }
10
11 #[test]
peeking_take_while_put_back()12 fn peeking_take_while_put_back() {
13 let mut r = put_back(0..10);
14 r.peeking_take_while(|x| *x <= 3).count();
15 assert_eq!(r.next(), Some(4));
16 r.peeking_take_while(|_| true).count();
17 assert_eq!(r.next(), None);
18 }
19
20 #[test]
peeking_take_while_put_back_n()21 fn peeking_take_while_put_back_n() {
22 let mut r = put_back_n(6..10);
23 for elt in (0..6).rev() {
24 r.put_back(elt);
25 }
26 r.peeking_take_while(|x| *x <= 3).count();
27 assert_eq!(r.next(), Some(4));
28 r.peeking_take_while(|_| true).count();
29 assert_eq!(r.next(), None);
30 }
31
32 #[test]
peeking_take_while_slice_iter()33 fn peeking_take_while_slice_iter() {
34 let v = [1, 2, 3, 4, 5, 6];
35 let mut r = v.iter();
36 r.peeking_take_while(|x| **x <= 3).count();
37 assert_eq!(r.next(), Some(&4));
38 r.peeking_take_while(|_| true).count();
39 assert_eq!(r.next(), None);
40 }
41
42 #[test]
peeking_take_while_slice_iter_rev()43 fn peeking_take_while_slice_iter_rev() {
44 let v = [1, 2, 3, 4, 5, 6];
45 let mut r = v.iter().rev();
46 r.peeking_take_while(|x| **x >= 3).count();
47 assert_eq!(r.next(), Some(&2));
48 r.peeking_take_while(|_| true).count();
49 assert_eq!(r.next(), None);
50 }
51
52 #[test]
peeking_take_while_nested()53 fn peeking_take_while_nested() {
54 let mut xs = (0..10).peekable();
55 let ys: Vec<_> = xs
56 .peeking_take_while(|x| *x < 6)
57 .peeking_take_while(|x| *x != 3)
58 .collect();
59 assert_eq!(ys, vec![0, 1, 2]);
60 assert_eq!(xs.next(), Some(3));
61
62 let mut xs = (4..10).peekable();
63 let ys: Vec<_> = xs
64 .peeking_take_while(|x| *x != 3)
65 .peeking_take_while(|x| *x < 6)
66 .collect();
67 assert_eq!(ys, vec![4, 5]);
68 assert_eq!(xs.next(), Some(6));
69 }
70