1// run-rustfix
2// aux-build:option_helpers.rs
3
4#![warn(clippy::iter_count)]
5#![allow(
6    unused_variables,
7    array_into_iter,
8    unused_mut,
9    clippy::into_iter_on_ref,
10    clippy::unnecessary_operation
11)]
12
13extern crate option_helpers;
14
15use option_helpers::IteratorFalsePositives;
16use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
17
18/// Struct to generate false positives for things with `.iter()`.
19#[derive(Copy, Clone)]
20struct HasIter;
21
22impl HasIter {
23    fn iter(self) -> IteratorFalsePositives {
24        IteratorFalsePositives { foo: 0 }
25    }
26
27    fn iter_mut(self) -> IteratorFalsePositives {
28        IteratorFalsePositives { foo: 0 }
29    }
30
31    fn into_iter(self) -> IteratorFalsePositives {
32        IteratorFalsePositives { foo: 0 }
33    }
34}
35
36#[allow(unused_must_use)]
37fn main() {
38    let mut vec = vec![0, 1, 2, 3];
39    let mut boxed_slice: Box<[u8]> = Box::new([0, 1, 2, 3]);
40    let mut vec_deque: VecDeque<_> = vec.iter().cloned().collect();
41    let mut hash_set = HashSet::new();
42    let mut hash_map = HashMap::new();
43    let mut b_tree_map = BTreeMap::new();
44    let mut b_tree_set = BTreeSet::new();
45    let mut linked_list = LinkedList::new();
46    let mut binary_heap = BinaryHeap::new();
47    hash_set.insert(1);
48    hash_map.insert(1, 2);
49    b_tree_map.insert(1, 2);
50    b_tree_set.insert(1);
51    linked_list.push_back(1);
52    binary_heap.push(1);
53
54    &vec[..].len();
55    vec.len();
56    boxed_slice.len();
57    vec_deque.len();
58    hash_set.len();
59    hash_map.len();
60    b_tree_map.len();
61    b_tree_set.len();
62    linked_list.len();
63    binary_heap.len();
64
65    vec.len();
66    &vec[..].len();
67    vec_deque.len();
68    hash_map.len();
69    b_tree_map.len();
70    linked_list.len();
71
72    &vec[..].len();
73    vec.len();
74    vec_deque.len();
75    hash_set.len();
76    hash_map.len();
77    b_tree_map.len();
78    b_tree_set.len();
79    linked_list.len();
80    binary_heap.len();
81
82    // Make sure we don't lint for non-relevant types.
83    let false_positive = HasIter;
84    false_positive.iter().count();
85    false_positive.iter_mut().count();
86    false_positive.into_iter().count();
87}
88