1 use std::collections::VecDeque;
3 fn test_all_refs<'a, T: 'a>(dummy: &mut T, iter: impl Iterator<Item = &'a mut T>) {
4 // Gather all those references.
5 let mut refs: Vec<&mut T> = iter.collect();
6 // Use them all. Twice, to be sure we got all interleavings.
7 for r in refs.iter_mut() {
8 std::mem::swap(dummy, r);
11 std::mem::swap(dummy, r);
16 let mut dst = VecDeque::new();
17 dst.push_front(Box::new(1));
18 dst.push_front(Box::new(2));
21 let mut src = VecDeque::new();
22 src.push_front(Box::new(2));
28 // Regression test for Debug and Diaplay impl's
29 println!("{:?} {:?}", dst, dst.iter());
30 println!("{:?}", VecDeque::<u32>::new().iter());
37 let mut v = std::collections::VecDeque::new();
41 // Test `fold` bad aliasing.
42 let mut it = v.iter_mut();
43 let ref0 = it.next().unwrap();
44 let sum = it.fold(0, |x, y| x + *y);
45 assert_eq!(*ref0 + sum, 3);
47 // Test general iterator aliasing.
49 test_all_refs(&mut 0, v.iter_mut());