//@revisions: edition2018 edition2021
//@[edition2018] edition:2018
//@[edition2021] edition:2021

#![warn(clippy::manual_assert)]
#![expect(clippy::useless_vec)]

macro_rules! one {
    () => {
        1
    };
}

fn main() {
    let a = vec![1, 2, 3];
    let c = Some(2);
    if !a.is_empty()
        && a.len() == 3
        && c.is_some()
        && !a.is_empty()
        && a.len() == 3
        && !a.is_empty()
        && a.len() == 3
        && !a.is_empty()
        && a.len() == 3
    {
        panic!("qaqaq{:?}", a);
    }
    //~^ manual_assert
    assert!(a.is_empty(), "qaqaq{:?}", a);
    //~^ manual_assert
    assert!(a.is_empty(), "qwqwq");
    if a.len() == 3 {
        println!("qwq");
        println!("qwq");
        println!("qwq");
    }
    if let Some(b) = c {
        panic!("orz {}", b);
    }
    if a.len() == 3 {
        panic!("qaqaq");
    } else {
        println!("qwq");
    }
    let b = vec![1, 2, 3];
    //~^ manual_assert
    assert!(!b.is_empty(), "panic1");
    //~^ manual_assert
    assert!(!(b.is_empty() && a.is_empty()), "panic2");
    //~^ manual_assert
    assert!(!(a.is_empty() && !b.is_empty()), "panic3");
    //~^ manual_assert
    assert!(!(b.is_empty() || a.is_empty()), "panic4");
    //~^ manual_assert
    assert!(!(a.is_empty() || !b.is_empty()), "panic5");
    //~^ manual_assert
    assert!(!a.is_empty(), "with expansion {}", one!());
    if a.is_empty() {
        let _ = 0;
    } else if a.len() == 1 {
        panic!("panic6");
    }
}

fn issue7730(a: u8) {
    // Suggestion should preserve comment
    //~^ manual_assert
    // comment
    /* this is a
            multiline
            comment */
    /// Doc comment
    // comment after `panic!`
    assert!(a <= 2, "panic with comment");
}

fn issue12505() {
    struct Foo<T, const N: usize>(T);

    impl<T, const N: usize> Foo<T, N> {
        const BAR: () = //~^ manual_assert
        assert!(N != 0, );
    }
}

fn issue15227(left: u64, right: u64) -> u64 {
    macro_rules! is_x86_feature_detected {
        ($feature:literal) => {
            $feature.len() > 0 && $feature.starts_with("ss")
        };
    }

    //~^ manual_assert
    assert!(is_x86_feature_detected!("ssse3"), "SSSE3 is not supported");
    unsafe { todo!() }
}
