#![allow(clippy::no_effect, clippy::unnecessary_operation, dead_code)]
#![warn(clippy::cast_lossless)]

fn main() {
    // Test clippy::cast_lossless with casts to integer types
    let _ = i16::from(1i8);
    let _ = i32::from(1i8);
    let _ = i64::from(1i8);
    let _ = i16::from(1u8);
    let _ = i32::from(1u8);
    let _ = i64::from(1u8);
    let _ = u16::from(1u8);
    let _ = u32::from(1u8);
    let _ = u64::from(1u8);
    let _ = i32::from(1i16);
    let _ = i64::from(1i16);
    let _ = i32::from(1u16);
    let _ = i64::from(1u16);
    let _ = u32::from(1u16);
    let _ = u64::from(1u16);
    let _ = i64::from(1i32);
    let _ = i64::from(1u32);
    let _ = u64::from(1u32);

    // Test with an expression wrapped in parens
    let _ = u16::from(1u8 + 1u8);
}

// The lint would suggest using `f64::from(input)` here but the `XX::from` function is not const,
// so we skip the lint if the expression is in a const fn.
// See #3656
const fn abc(input: u16) -> u32 {
    input as u32
}

// Same as the above issue. We can't suggest `::from` in const fns in impls
mod cast_lossless_in_impl {
    struct A;

    impl A {
        pub const fn convert(x: u32) -> u64 {
            x as u64
        }
    }
}

#[derive(PartialEq, Debug)]
#[repr(i64)]
enum Test {
    A = u32::MAX as i64 + 1,
}

fn issue11458() {
    macro_rules! sign_cast {
        ($var: ident, $src: ty, $dest: ty) => {
            <$dest>::from_ne_bytes(($var as $src).to_ne_bytes())
        };
    }
    let x = 10_u128;
    let _ = i32::from(sign_cast!(x, u8, i8));
    let _ = i32::from(sign_cast!(x, u8, i8) + 1);
}
