1 //@compile-flags: -Zmiri-strict-provenance
2 use std::collections::VecDeque;
4 fn test_all_refs<'a, T: 'a>(dummy: &mut T, iter: impl Iterator<Item = &'a mut T>) {
5 // Gather all those references.
6 let mut refs: Vec<&mut T> = iter.collect();
7 // Use them all. Twice, to be sure we got all interleavings.
8 for r in refs.iter_mut() {
9 std::mem::swap(dummy, r);
12 std::mem::swap(dummy, r);
17 let mut dst = VecDeque::new();
18 dst.push_front(Box::new(1));
19 dst.push_front(Box::new(2));
22 let mut src = VecDeque::new();
23 src.push_front(Box::new(2));
29 // Regression test for Debug impl's
30 println!("{:?} {:?}", dst, dst.iter());
31 println!("{:?}", VecDeque::<u32>::new().iter());
38 let mut v = std::collections::VecDeque::new();
42 // Test `fold` bad aliasing.
43 let mut it = v.iter_mut();
44 let ref0 = it.next().unwrap();
45 let sum = it.fold(0, |x, y| x + *y);
46 assert_eq!(*ref0 + sum, 3);
48 // Test general iterator aliasing.
50 test_all_refs(&mut 0, v.iter_mut());