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

#![warn(clippy::manual_assert)]
#![allow(dead_code, unused_doc_comments)]
#![allow(clippy::nonminimal_bool, clippy::uninlined_format_args, 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);
    }
    if !a.is_empty() {
        //~^ manual_assert
        panic!("qaqaq{:?}", a);
    }
    if !a.is_empty() {
        //~^ manual_assert
        panic!("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];
    if b.is_empty() {
        //~^ manual_assert
        panic!("panic1");
    }
    if b.is_empty() && a.is_empty() {
        //~^ manual_assert
        panic!("panic2");
    }
    if a.is_empty() && !b.is_empty() {
        //~^ manual_assert
        panic!("panic3");
    }
    if b.is_empty() || a.is_empty() {
        //~^ manual_assert
        panic!("panic4");
    }
    if a.is_empty() || !b.is_empty() {
        //~^ manual_assert
        panic!("panic5");
    }
    if a.is_empty() {
        //~^ manual_assert
        panic!("with expansion {}", one!())
    }
    if a.is_empty() {
        let _ = 0;
    } else if a.len() == 1 {
        panic!("panic6");
    }
}

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

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

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

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

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