]> git.lizzy.rs Git - rust.git/blob - tests/ui/iter_nth.rs
Move MSRV tests into the lint specific test files
[rust.git] / tests / ui / iter_nth.rs
1 // aux-build:option_helpers.rs
2
3 #![warn(clippy::iter_nth)]
4
5 #[macro_use]
6 extern crate option_helpers;
7
8 use option_helpers::IteratorFalsePositives;
9 use std::collections::VecDeque;
10
11 /// Struct to generate false positives for things with `.iter()`.
12 #[derive(Copy, Clone)]
13 struct HasIter;
14
15 impl HasIter {
16     fn iter(self) -> IteratorFalsePositives {
17         IteratorFalsePositives { foo: 0 }
18     }
19
20     fn iter_mut(self) -> IteratorFalsePositives {
21         IteratorFalsePositives { foo: 0 }
22     }
23 }
24
25 /// Checks implementation of `ITER_NTH` lint.
26 fn iter_nth() {
27     let mut some_vec = vec![0, 1, 2, 3];
28     let mut boxed_slice: Box<[u8]> = Box::new([0, 1, 2, 3]);
29     let mut some_vec_deque: VecDeque<_> = some_vec.iter().cloned().collect();
30
31     {
32         // Make sure we lint `.iter()` for relevant types.
33         let bad_vec = some_vec.iter().nth(3);
34         let bad_slice = &some_vec[..].iter().nth(3);
35         let bad_boxed_slice = boxed_slice.iter().nth(3);
36         let bad_vec_deque = some_vec_deque.iter().nth(3);
37     }
38
39     {
40         // Make sure we lint `.iter_mut()` for relevant types.
41         let bad_vec = some_vec.iter_mut().nth(3);
42     }
43     {
44         let bad_slice = &some_vec[..].iter_mut().nth(3);
45     }
46     {
47         let bad_vec_deque = some_vec_deque.iter_mut().nth(3);
48     }
49
50     // Make sure we don't lint for non-relevant types.
51     let false_positive = HasIter;
52     let ok = false_positive.iter().nth(3);
53     let ok_mut = false_positive.iter_mut().nth(3);
54 }
55
56 fn main() {}