#![warn(clippy::needless_range_loop)]
#![expect(clippy::useless_vec)]
//@no-rustfix
fn calc_idx(i: usize) -> usize {
    (i + i + 20) % 4
}

fn main() {
    let ns = vec![2, 3, 5, 7];

    for i in 3..10 {
        //~^ needless_range_loop

        println!("{}", ns[i]);
    }

    for i in 3..10 {
        println!("{}", ns[i % 4]);
    }

    for i in 3..10 {
        println!("{}", ns[i % ns.len()]);
    }

    for i in 3..10 {
        println!("{}", ns[calc_idx(i)]);
    }

    for i in 3..10 {
        println!("{}", ns[calc_idx(i) % 4]);
    }

    let mut ms = vec![1, 2, 3, 4, 5, 6];
    for i in 0..ms.len() {
        //~^ needless_range_loop

        ms[i] *= 2;
    }
    assert_eq!(ms, vec![2, 4, 6, 8, 10, 12]);

    let mut ms = vec![1, 2, 3, 4, 5, 6];
    for i in 0..ms.len() {
        //~^ needless_range_loop

        let x = &mut ms[i];
        *x *= 2;
    }
    assert_eq!(ms, vec![2, 4, 6, 8, 10, 12]);

    let g = vec![1, 2, 3, 4, 5, 6];
    let glen = g.len();
    for i in 0..glen {
        let x: u32 = g[i + 1..].iter().sum();
        println!("{}", g[i] + x);
    }
    assert_eq!(g, vec![20, 18, 15, 11, 6, 0]);

    let mut g = vec![1, 2, 3, 4, 5, 6];
    let glen = g.len();
    for i in 0..glen {
        g[i] = g[i + 1..].iter().sum();
    }
    assert_eq!(g, vec![20, 18, 15, 11, 6, 0]);

    let x = 5;
    let mut vec = vec![0; 9];

    for i in x..x + 4 {
        //~^ needless_range_loop

        vec[i] += 1;
    }

    let x = 5;
    let mut vec = vec![0; 10];

    for i in x..=x + 4 {
        //~^ needless_range_loop

        vec[i] += 1;
    }

    let arr = [1, 2, 3];

    for i in 0..3 {
        //~^ needless_range_loop

        println!("{}", arr[i]);
    }

    for i in 0..2 {
        //~^ needless_range_loop

        println!("{}", arr[i]);
    }

    for i in 1..3 {
        //~^ needless_range_loop

        println!("{}", arr[i]);
    }

    // Fix #5945
    let mut vec = vec![1, 2, 3, 4];
    for i in 0..vec.len() - 1 {
        vec[i] += 1;
    }
    let mut vec = vec![1, 2, 3, 4];
    for i in vec.len() - 3..vec.len() {
        vec[i] += 1;
    }
    let mut vec = vec![1, 2, 3, 4];
    for i in vec.len() - 3..vec.len() - 1 {
        vec[i] += 1;
    }
}

mod issue2277 {
    pub fn example(list: &[[f64; 3]]) {
        let mut x: [f64; 3] = [10.; 3];

        for i in 0..3 {
            x[i] = list.iter().map(|item| item[i]).sum::<f64>();
        }
    }
}
