]> git.proxmox.com Git - rustc.git/blame - library/core/tests/iter/adapters/take.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / library / core / tests / iter / adapters / take.rs
CommitLineData
5869c6ff
XL
1use core::iter::*;
2
3#[test]
4fn test_iterator_take() {
5 let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19];
6 let ys = [0, 1, 2, 3, 5];
7
8 let mut it = xs.iter().take(ys.len());
9 let mut i = 0;
10 assert_eq!(it.len(), ys.len());
11 while let Some(&x) = it.next() {
12 assert_eq!(x, ys[i]);
13 i += 1;
14 assert_eq!(it.len(), ys.len() - i);
15 }
16 assert_eq!(i, ys.len());
17 assert_eq!(it.len(), 0);
18
19 let mut it = xs.iter().take(ys.len());
20 let mut i = 0;
21 assert_eq!(it.len(), ys.len());
22 while let Some(&x) = it.next_back() {
23 i += 1;
24 assert_eq!(x, ys[ys.len() - i]);
25 assert_eq!(it.len(), ys.len() - i);
26 }
27 assert_eq!(i, ys.len());
28 assert_eq!(it.len(), 0);
29}
30
31#[test]
32fn test_iterator_take_nth() {
33 let xs = [0, 1, 2, 4, 5];
34 let mut it = xs.iter();
35 {
36 let mut take = it.by_ref().take(3);
37 let mut i = 0;
38 while let Some(&x) = take.nth(0) {
39 assert_eq!(x, i);
40 i += 1;
41 }
42 }
43 assert_eq!(it.nth(1), Some(&5));
44 assert_eq!(it.nth(0), None);
45
46 let xs = [0, 1, 2, 3, 4];
47 let mut it = xs.iter().take(7);
48 let mut i = 1;
49 while let Some(&x) = it.nth(1) {
50 assert_eq!(x, i);
51 i += 2;
52 }
53}
54
55#[test]
56fn test_iterator_take_nth_back() {
57 let xs = [0, 1, 2, 4, 5];
58 let mut it = xs.iter();
59 {
60 let mut take = it.by_ref().take(3);
61 let mut i = 0;
62 while let Some(&x) = take.nth_back(0) {
63 i += 1;
64 assert_eq!(x, 3 - i);
65 }
66 }
67 assert_eq!(it.nth_back(0), None);
68
69 let xs = [0, 1, 2, 3, 4];
70 let mut it = xs.iter().take(7);
71 assert_eq!(it.nth_back(1), Some(&3));
72 assert_eq!(it.nth_back(1), Some(&1));
73 assert_eq!(it.nth_back(1), None);
74}
75
a2a8927a
XL
76#[test]
77fn test_take_advance_by() {
78 let mut take = (0..10).take(3);
79 assert_eq!(take.advance_by(2), Ok(()));
80 assert_eq!(take.next(), Some(2));
81 assert_eq!(take.advance_by(1), Err(0));
82
83 assert_eq!((0..0).take(10).advance_by(0), Ok(()));
84 assert_eq!((0..0).take(10).advance_by(1), Err(0));
85 assert_eq!((0..10).take(4).advance_by(5), Err(4));
86
87 let mut take = (0..10).take(3);
88 assert_eq!(take.advance_back_by(2), Ok(()));
89 assert_eq!(take.next(), Some(0));
90 assert_eq!(take.advance_back_by(1), Err(0));
91
92 assert_eq!((0..2).take(1).advance_back_by(10), Err(1));
93 assert_eq!((0..0).take(1).advance_back_by(1), Err(0));
94 assert_eq!((0..0).take(1).advance_back_by(0), Ok(()));
95 assert_eq!((0..usize::MAX).take(100).advance_back_by(usize::MAX), Err(100));
96}
97
5869c6ff
XL
98#[test]
99fn test_iterator_take_short() {
100 let xs = [0, 1, 2, 3];
101
102 let mut it = xs.iter().take(5);
103 let mut i = 0;
104 assert_eq!(it.len(), xs.len());
105 while let Some(&x) = it.next() {
106 assert_eq!(x, xs[i]);
107 i += 1;
108 assert_eq!(it.len(), xs.len() - i);
109 }
110 assert_eq!(i, xs.len());
111 assert_eq!(it.len(), 0);
112
113 let mut it = xs.iter().take(5);
114 let mut i = 0;
115 assert_eq!(it.len(), xs.len());
116 while let Some(&x) = it.next_back() {
117 i += 1;
118 assert_eq!(x, xs[xs.len() - i]);
119 assert_eq!(it.len(), xs.len() - i);
120 }
121 assert_eq!(i, xs.len());
122 assert_eq!(it.len(), 0);
123}
124
125#[test]
126fn test_take_try_folds() {
127 let f = &|acc, x| i32::checked_add(2 * acc, x);
128 assert_eq!((10..30).take(10).try_fold(7, f), (10..20).try_fold(7, f));
129 assert_eq!((10..30).take(10).try_rfold(7, f), (10..20).try_rfold(7, f));
130
131 let mut iter = (10..30).take(20);
132 assert_eq!(iter.try_fold(0, i8::checked_add), None);
133 assert_eq!(iter.next(), Some(20));
134 assert_eq!(iter.try_rfold(0, i8::checked_add), None);
135 assert_eq!(iter.next_back(), Some(24));
136
137 let mut iter = (2..20).take(3);
138 assert_eq!(iter.try_for_each(Err), Err(2));
139 assert_eq!(iter.try_for_each(Err), Err(3));
140 assert_eq!(iter.try_for_each(Err), Err(4));
141 assert_eq!(iter.try_for_each(Err), Ok(()));
142
143 let mut iter = (2..20).take(3).rev();
144 assert_eq!(iter.try_for_each(Err), Err(4));
145 assert_eq!(iter.try_for_each(Err), Err(3));
146 assert_eq!(iter.try_for_each(Err), Err(2));
147 assert_eq!(iter.try_for_each(Err), Ok(()));
148}
6522a427
EL
149
150#[test]
151fn test_byref_take_consumed_items() {
152 let mut inner = 10..90;
153
154 let mut count = 0;
155 inner.by_ref().take(0).for_each(|_| count += 1);
156 assert_eq!(count, 0);
157 assert_eq!(inner, 10..90);
158
159 let mut count = 0;
160 inner.by_ref().take(10).for_each(|_| count += 1);
161 assert_eq!(count, 10);
162 assert_eq!(inner, 20..90);
163
164 let mut count = 0;
165 inner.by_ref().take(100).for_each(|_| count += 1);
166 assert_eq!(count, 70);
167 assert_eq!(inner, 90..90);
168}