rust/tests/ui/iterator_step_by_zero.rs

38 lines
1.1 KiB
Rust
Raw Normal View History

#![allow(clippy::useless_vec)]
#[warn(clippy::iterator_step_by_zero)]
fn main() {
let _ = vec!["A", "B", "B"].iter().step_by(0);
//~^ ERROR: `Iterator::step_by(0)` will panic at runtime
//~| NOTE: `-D clippy::iterator-step-by-zero` implied by `-D warnings`
let _ = "XXX".chars().step_by(0);
//~^ ERROR: `Iterator::step_by(0)` will panic at runtime
let _ = (0..1).step_by(0);
//~^ ERROR: `Iterator::step_by(0)` will panic at runtime
// No error, not an iterator.
let y = NotIterator;
y.step_by(0);
// No warning for non-zero step
let _ = (0..1).step_by(1);
let _ = (1..).step_by(0);
//~^ ERROR: `Iterator::step_by(0)` will panic at runtime
let _ = (1..=2).step_by(0);
//~^ ERROR: `Iterator::step_by(0)` will panic at runtime
let x = 0..1;
let _ = x.step_by(0);
//~^ ERROR: `Iterator::step_by(0)` will panic at runtime
// check const eval
let v1 = vec![1, 2, 3];
let _ = v1.iter().step_by(2 / 3);
//~^ ERROR: `Iterator::step_by(0)` will panic at runtime
}
struct NotIterator;
impl NotIterator {
fn step_by(&self, _: u32) {}
}