1// run-rustfix
2#![allow(clippy::useless_vec, clippy::needless_borrow)]
3#![warn(clippy::into_iter_on_ref)]
4
5struct X;
6use std::collections::*;
7
8fn main() {
9    for _ in &[1, 2, 3] {}
10    for _ in vec![X, X] {}
11    for _ in &vec![X, X] {}
12
13    let _ = vec![1, 2, 3].into_iter();
14    let _ = (&vec![1, 2, 3]).iter(); //~ WARN equivalent to .iter()
15    let _ = vec![1, 2, 3].into_boxed_slice().iter(); //~ WARN equivalent to .iter()
16    let _ = std::rc::Rc::from(&[X][..]).iter(); //~ WARN equivalent to .iter()
17    let _ = std::sync::Arc::from(&[X][..]).iter(); //~ WARN equivalent to .iter()
18
19    let _ = (&&&&&&&[1, 2, 3]).iter(); //~ ERROR equivalent to .iter()
20    let _ = (&&&&mut &&&[1, 2, 3]).iter(); //~ ERROR equivalent to .iter()
21    let _ = (&mut &mut &mut [1, 2, 3]).iter_mut(); //~ ERROR equivalent to .iter_mut()
22
23    let _ = (&Some(4)).iter(); //~ WARN equivalent to .iter()
24    let _ = (&mut Some(5)).iter_mut(); //~ WARN equivalent to .iter_mut()
25    let _ = (&Ok::<_, i32>(6)).iter(); //~ WARN equivalent to .iter()
26    let _ = (&mut Err::<i32, _>(7)).iter_mut(); //~ WARN equivalent to .iter_mut()
27    let _ = (&Vec::<i32>::new()).iter(); //~ WARN equivalent to .iter()
28    let _ = (&mut Vec::<i32>::new()).iter_mut(); //~ WARN equivalent to .iter_mut()
29    let _ = (&BTreeMap::<i32, u64>::new()).iter(); //~ WARN equivalent to .iter()
30    let _ = (&mut BTreeMap::<i32, u64>::new()).iter_mut(); //~ WARN equivalent to .iter_mut()
31    let _ = (&VecDeque::<i32>::new()).iter(); //~ WARN equivalent to .iter()
32    let _ = (&mut VecDeque::<i32>::new()).iter_mut(); //~ WARN equivalent to .iter_mut()
33    let _ = (&LinkedList::<i32>::new()).iter(); //~ WARN equivalent to .iter()
34    let _ = (&mut LinkedList::<i32>::new()).iter_mut(); //~ WARN equivalent to .iter_mut()
35    let _ = (&HashMap::<i32, u64>::new()).iter(); //~ WARN equivalent to .iter()
36    let _ = (&mut HashMap::<i32, u64>::new()).iter_mut(); //~ WARN equivalent to .iter_mut()
37
38    let _ = (&BTreeSet::<i32>::new()).iter(); //~ WARN equivalent to .iter()
39    let _ = (&BinaryHeap::<i32>::new()).iter(); //~ WARN equivalent to .iter()
40    let _ = (&HashSet::<i32>::new()).iter(); //~ WARN equivalent to .iter()
41    let _ = std::path::Path::new("12/34").iter(); //~ WARN equivalent to .iter()
42    let _ = std::path::PathBuf::from("12/34").iter(); //~ ERROR equivalent to .iter()
43
44    let _ = (&[1, 2, 3]).iter().next(); //~ WARN equivalent to .iter()
45}
46