]> git.lizzy.rs Git - rust.git/blob - tests/ui/range.rs
Merge pull request #2136 from ykrivopalov/identity_op_fixing
[rust.git] / tests / ui / range.rs
1 #![feature(iterator_step_by)]
2 #![feature(inclusive_range_syntax)]
3
4
5
6 struct NotARange;
7 impl NotARange {
8     fn step_by(&self, _: u32) {}
9 }
10
11 #[warn(iterator_step_by_zero, range_zip_with_len)]
12 fn main() {
13     let _ = (0..1).step_by(0);
14     // No warning for non-zero step
15     let _ = (0..1).step_by(1);
16
17     let _ = (1..).step_by(0);
18     let _ = (1..=2).step_by(0);
19
20     let x = 0..1;
21     let _ = x.step_by(0);
22
23     // No error, not a range.
24     let y = NotARange;
25     y.step_by(0);
26
27     let v1 = vec![1,2,3];
28     let v2 = vec![4,5];
29     let _x = v1.iter().zip(0..v1.len());
30     let _y = v1.iter().zip(0..v2.len()); // No error
31
32     // check const eval
33     let _ = v1.iter().step_by(2/3);
34 }
35
36 #[allow(unused)]
37 fn no_panic_with_fake_range_types() {
38     struct Range {
39         foo: i32,
40     }
41
42     let _ = Range { foo: 0 };
43 }