assert_iterator<T>(it: impl ExactSizeIterator<Item = T> + Clone, expected: &[T]) where T: Copy + core::fmt::Debug + PartialEq,1 pub fn assert_iterator<T>(it: impl ExactSizeIterator<Item = T> + Clone, expected: &[T])
2 where
3     T: Copy + core::fmt::Debug + PartialEq,
4 {
5     // Assert that the cloned iterator is correct.
6     assert_exact_size_iterator(it.clone(), expected);
7     // Assert that the original iterator is correct.
8     assert_exact_size_iterator(it, expected);
9 }
10 
11 /// Asserts that `it` adheres to the `ExactSizeIterator` contract.
assert_exact_size_iterator<T>(mut it: impl ExactSizeIterator<Item = T>, expected: &[T]) where T: Copy + core::fmt::Debug + PartialEq,12 fn assert_exact_size_iterator<T>(mut it: impl ExactSizeIterator<Item = T>, expected: &[T])
13 where
14     T: Copy + core::fmt::Debug + PartialEq,
15 {
16     assert_eq!(it.len(), expected.len());
17     assert_eq!(it.size_hint(), expected.iter().size_hint());
18 
19     for i in 0..expected.len() {
20         let len = it.len();
21         assert_eq!(len, expected.len() - i);
22         assert_eq!(it.size_hint(), (len, Some(len)));
23         assert_eq!(it.next(), Some(expected[i]));
24     }
25 
26     assert_eq!(it.len(), 0);
27     assert_eq!(it.size_hint(), (0, Some(0)));
28     assert_eq!(it.next(), None);
29 }
30