Auto merge of #106943 - mina86:exact_size_take_repeat, r=dtolnay · patricklam/verify-rust-std@dc5fed5 (original) (raw)
`@@ -170,3 +170,93 @@ fn test_byref_take_consumed_items() {
`
170
170
`assert_eq!(count, 70);
`
171
171
`assert_eq!(inner, 90..90);
`
172
172
`}
`
``
173
+
``
174
`+
#[test]
`
``
175
`+
fn test_exact_size_take_repeat() {
`
``
176
`+
let mut iter = core::iter::repeat(42).take(40);
`
``
177
`+
assert_eq!((40, Some(40)), iter.size_hint());
`
``
178
`+
assert_eq!(40, iter.len());
`
``
179
+
``
180
`+
assert_eq!(Some(42), iter.next());
`
``
181
`+
assert_eq!((39, Some(39)), iter.size_hint());
`
``
182
`+
assert_eq!(39, iter.len());
`
``
183
+
``
184
`+
assert_eq!(Some(42), iter.next_back());
`
``
185
`+
assert_eq!((38, Some(38)), iter.size_hint());
`
``
186
`+
assert_eq!(38, iter.len());
`
``
187
+
``
188
`+
assert_eq!(Some(42), iter.nth(3));
`
``
189
`+
assert_eq!((34, Some(34)), iter.size_hint());
`
``
190
`+
assert_eq!(34, iter.len());
`
``
191
+
``
192
`+
assert_eq!(Some(42), iter.nth_back(3));
`
``
193
`+
assert_eq!((30, Some(30)), iter.size_hint());
`
``
194
`+
assert_eq!(30, iter.len());
`
``
195
+
``
196
`+
assert_eq!(Ok(()), iter.advance_by(10));
`
``
197
`+
assert_eq!((20, Some(20)), iter.size_hint());
`
``
198
`+
assert_eq!(20, iter.len());
`
``
199
+
``
200
`+
assert_eq!(Ok(()), iter.advance_back_by(10));
`
``
201
`+
assert_eq!((10, Some(10)), iter.size_hint());
`
``
202
`+
assert_eq!(10, iter.len());
`
``
203
`+
}
`
``
204
+
``
205
`+
#[test]
`
``
206
`+
fn test_exact_size_take_repeat_with() {
`
``
207
`+
let mut counter = 0;
`
``
208
`+
let mut iter = core::iter::repeat_with(move || {
`
``
209
`+
counter += 1;
`
``
210
`+
counter
`
``
211
`+
})
`
``
212
`+
.take(40);
`
``
213
`+
assert_eq!((40, Some(40)), iter.size_hint());
`
``
214
`+
assert_eq!(40, iter.len());
`
``
215
+
``
216
`+
assert_eq!(Some(1), iter.next());
`
``
217
`+
assert_eq!((39, Some(39)), iter.size_hint());
`
``
218
`+
assert_eq!(39, iter.len());
`
``
219
+
``
220
`+
assert_eq!(Some(5), iter.nth(3));
`
``
221
`+
assert_eq!((35, Some(35)), iter.size_hint());
`
``
222
`+
assert_eq!(35, iter.len());
`
``
223
+
``
224
`+
assert_eq!(Ok(()), iter.advance_by(10));
`
``
225
`+
assert_eq!((25, Some(25)), iter.size_hint());
`
``
226
`+
assert_eq!(25, iter.len());
`
``
227
+
``
228
`+
assert_eq!(Some(16), iter.next());
`
``
229
`+
assert_eq!((24, Some(24)), iter.size_hint());
`
``
230
`+
assert_eq!(24, iter.len());
`
``
231
`+
}
`
``
232
+
``
233
`+
// This is https://github.com/rust-lang/rust/issues/104729 with all uses of
`
``
234
`+
// repeat(0) were replaced by repeat(0).take(20).
`
``
235
`+
#[test]
`
``
236
`+
fn test_reverse_on_zip() {
`
``
237
`+
let vec_1 = [1; 10];
`
``
238
+
``
239
`+
let zipped_iter = vec_1.iter().copied().zip(core::iter::repeat(0).take(20));
`
``
240
+
``
241
`+
// Forward
`
``
242
`+
for (one, zero) in zipped_iter {
`
``
243
`+
assert_eq!((1, 0), (one, zero));
`
``
244
`+
}
`
``
245
+
``
246
`+
let rev_vec_iter = vec_1.iter().rev();
`
``
247
`+
let rev_repeat_iter = std::iter::repeat(0).take(20).rev();
`
``
248
+
``
249
`+
// Manual reversed zip
`
``
250
`+
let rev_zipped_iter = rev_vec_iter.zip(rev_repeat_iter);
`
``
251
+
``
252
`+
for (&one, zero) in rev_zipped_iter {
`
``
253
`+
assert_eq!((1, 0), (one, zero));
`
``
254
`+
}
`
``
255
+
``
256
`+
let zipped_iter = vec_1.iter().zip(core::iter::repeat(0).take(20));
`
``
257
+
``
258
`+
// Cannot call rev here for automatic reversed zip constuction
`
``
259
`+
for (&one, zero) in zipped_iter.rev() {
`
``
260
`+
assert_eq!((1, 0), (one, zero));
`
``
261
`+
}
`
``
262
`+
}
`