// Compiler:
//
// Run-time:
//   status: 0

fn main() {
    use std::hint::black_box;

    macro_rules! check {
        ($ty:ty, $expr:expr) => {{
            const EXPECTED: $ty = $expr;
            assert_eq!($expr, EXPECTED);
        }};
    }

    check!(u32, (2220326408_u32 + black_box(1)) >> (32 - 6));

    /// Generate `check!` tests for integer types at least as wide as 128 bits.
    macro_rules! check_ops128 {
        () => {
            check_ops64!();

            // Shifts.
            check!(T, VAL1 << black_box(64));
            check!(T, VAL1 << black_box(81));
            check!(T, VAL3 << black_box(63));
            check!(T, VAL3 << black_box(64));

            check!(T, VAL1 >> black_box(64));
            check!(T, VAL2 >> black_box(64));
            check!(T, VAL3 >> black_box(64));
            check!(T, VAL3 >> black_box(81));
        };
    }

    /// Generate `check!` tests for integer types at least as wide as 64 bits.
    macro_rules! check_ops64 {
        () => {
            check_ops32!();

            // Shifts.
            check!(T, VAL2 << black_box(33));
            check!(T, VAL2 << black_box(49));
            check!(T, VAL2 << black_box(61));
            check!(T, VAL2 << black_box(63));

            check!(T, VAL3 << black_box(33));
            check!(T, VAL3 << black_box(49));
            check!(T, VAL3 << black_box(61));

            check!(T, VAL1 >> black_box(33));
            check!(T, VAL1 >> black_box(49));
            check!(T, VAL1 >> black_box(61));
            check!(T, VAL1 >> black_box(63));

            check!(T, VAL2 >> black_box(33));
            check!(T, VAL2 >> black_box(49));
            check!(T, VAL2 >> black_box(61));
            check!(T, VAL2 >> black_box(63));

            check!(T, VAL3 >> black_box(33));
            check!(T, VAL3 >> black_box(49));
            check!(T, VAL3 >> black_box(61));
            check!(T, VAL3 >> black_box(63));
        };
    }

    /// Generate `check!` tests for integer types at least as wide as 32 bits.
    macro_rules! check_ops32 {
        () => {
            // Shifts.
            check!(T, VAL2 << black_box(1));
            check!(T, VAL2 << black_box(0));

            check!(T, VAL3 << black_box(1));
            check!(T, VAL3 << black_box(0));

            check!(T, VAL1.wrapping_shl(black_box(0)));
            check!(T, VAL1.wrapping_shl(black_box(1)));
            check!(T, VAL1.wrapping_shl(black_box(33)));
            check!(T, VAL1.wrapping_shl(black_box(49)));
            check!(T, VAL1.wrapping_shl(black_box(61)));
            check!(T, VAL1.wrapping_shl(black_box(63)));
            check!(T, VAL1.wrapping_shl(black_box(64)));
            check!(T, VAL1.wrapping_shl(black_box(81)));

            check!(Option<T>, VAL1.checked_shl(black_box(0)));
            check!(Option<T>, VAL1.checked_shl(black_box(1)));
            check!(Option<T>, VAL1.checked_shl(black_box(33)));
            check!(Option<T>, VAL1.checked_shl(black_box(49)));
            check!(Option<T>, VAL1.checked_shl(black_box(61)));
            check!(Option<T>, VAL1.checked_shl(black_box(63)));
            check!(Option<T>, VAL1.checked_shl(black_box(64)));
            check!(Option<T>, VAL1.checked_shl(black_box(81)));

            check!(T, VAL1 >> black_box(0));
            check!(T, VAL1 >> black_box(1));

            check!(T, VAL2 >> black_box(1));
            check!(T, VAL2 >> black_box(0));

            check!(T, VAL3 >> black_box(0));
            check!(T, VAL3 >> black_box(1));

            check!(T, VAL1.wrapping_shr(black_box(0)));
            check!(T, VAL1.wrapping_shr(black_box(1)));
            check!(T, VAL1.wrapping_shr(black_box(33)));
            check!(T, VAL1.wrapping_shr(black_box(49)));
            check!(T, VAL1.wrapping_shr(black_box(61)));
            check!(T, VAL1.wrapping_shr(black_box(63)));
            check!(T, VAL1.wrapping_shr(black_box(64)));
            check!(T, VAL1.wrapping_shr(black_box(81)));

            check!(Option<T>, VAL1.checked_shr(black_box(0)));
            check!(Option<T>, VAL1.checked_shr(black_box(1)));
            check!(Option<T>, VAL1.checked_shr(black_box(33)));
            check!(Option<T>, VAL1.checked_shr(black_box(49)));
            check!(Option<T>, VAL1.checked_shr(black_box(61)));
            check!(Option<T>, VAL1.checked_shr(black_box(63)));
            check!(Option<T>, VAL1.checked_shr(black_box(64)));
            check!(Option<T>, VAL1.checked_shr(black_box(81)));

            // Casts
            check!(u64, (VAL1 >> black_box(1)) as u64);

            // Addition.
            check!(T, VAL1 + black_box(1));
            check!(T, VAL2 + black_box(1));
            check!(T, VAL2 + (VAL2 + black_box(1)));
            check!(T, VAL3 + black_box(1));

            check!(Option<T>, VAL1.checked_add(black_box(1)));
            check!(Option<T>, VAL2.checked_add(black_box(1)));
            check!(Option<T>, VAL2.checked_add(VAL2 + black_box(1)));
            check!(Option<T>, VAL3.checked_add(T::MAX));
            check!(Option<T>, VAL3.checked_add(T::MIN));

            check!(T, VAL1.wrapping_add(black_box(1)));
            check!(T, VAL2.wrapping_add(black_box(1)));
            check!(T, VAL2.wrapping_add(VAL2 + black_box(1)));
            check!(T, VAL3.wrapping_add(T::MAX));
            check!(T, VAL3.wrapping_add(T::MIN));

            check!((T, bool), VAL1.overflowing_add(black_box(1)));
            check!((T, bool), VAL2.overflowing_add(black_box(1)));
            check!((T, bool), VAL2.overflowing_add(VAL2 + black_box(1)));
            check!((T, bool), VAL3.overflowing_add(T::MAX));
            check!((T, bool), VAL3.overflowing_add(T::MIN));

            check!(T, VAL1.saturating_add(black_box(1)));
            check!(T, VAL2.saturating_add(black_box(1)));
            check!(T, VAL2.saturating_add(VAL2 + black_box(1)));
            check!(T, VAL3.saturating_add(T::MAX));
            check!(T, VAL3.saturating_add(T::MIN));

            // Subtraction
            check!(T, VAL1 - black_box(1));
            check!(T, VAL2 - black_box(1));
            check!(T, VAL3 - black_box(1));

            check!(Option<T>, VAL1.checked_sub(black_box(1)));
            check!(Option<T>, VAL2.checked_sub(black_box(1)));
            check!(Option<T>, VAL2.checked_sub(VAL2 + black_box(1)));
            check!(Option<T>, VAL3.checked_sub(T::MAX));
            check!(Option<T>, VAL3.checked_sub(T::MIN));

            check!(T, VAL1.wrapping_sub(black_box(1)));
            check!(T, VAL2.wrapping_sub(black_box(1)));
            check!(T, VAL2.wrapping_sub(VAL2 + black_box(1)));
            check!(T, VAL3.wrapping_sub(T::MAX));
            check!(T, VAL3.wrapping_sub(T::MIN));

            check!((T, bool), VAL1.overflowing_sub(black_box(1)));
            check!((T, bool), VAL2.overflowing_sub(black_box(1)));
            check!((T, bool), VAL2.overflowing_sub(VAL2 + black_box(1)));
            check!((T, bool), VAL3.overflowing_sub(T::MAX));
            check!((T, bool), VAL3.overflowing_sub(T::MIN));

            check!(T, VAL1.saturating_sub(black_box(1)));
            check!(T, VAL2.saturating_sub(black_box(1)));
            check!(T, VAL2.saturating_sub(VAL2 + black_box(1)));
            check!(T, VAL3.saturating_sub(T::MAX));
            check!(T, VAL3.saturating_sub(T::MIN));

            // Multiplication
            check!(T, VAL1 * black_box(2));
            check!(T, VAL1 * (black_box(1) + VAL2));
            check!(T, VAL2 * black_box(2));
            check!(T, VAL2 * (black_box(1) + VAL2));
            check!(T, VAL3 * black_box(1));
            check!(T, VAL4 * black_box(2));
            check!(T, VAL5 * black_box(2));

            check!(Option<T>, VAL1.checked_mul(black_box(2)));
            check!(Option<T>, VAL1.checked_mul(black_box(1) + VAL2));
            check!(Option<T>, VAL3.checked_mul(VAL3));
            check!(Option<T>, VAL4.checked_mul(black_box(2)));
            check!(Option<T>, VAL5.checked_mul(black_box(2)));

            check!(T, VAL1.wrapping_mul(black_box(2)));
            check!(T, VAL1.wrapping_mul((black_box(1) + VAL2)));
            check!(T, VAL3.wrapping_mul(VAL3));
            check!(T, VAL4.wrapping_mul(black_box(2)));
            check!(T, VAL5.wrapping_mul(black_box(2)));

            check!((T, bool), VAL1.overflowing_mul(black_box(2)));
            check!((T, bool), VAL1.overflowing_mul(black_box(1) + VAL2));
            check!((T, bool), VAL3.overflowing_mul(VAL3));
            check!((T, bool), VAL4.overflowing_mul(black_box(2)));
            check!((T, bool), VAL5.overflowing_mul(black_box(2)));

            check!(T, VAL1.saturating_mul(black_box(2)));
            check!(T, VAL1.saturating_mul(black_box(1) + VAL2));
            check!(T, VAL3.saturating_mul(VAL3));
            check!(T, VAL4.saturating_mul(black_box(2)));
            check!(T, VAL5.saturating_mul(black_box(2)));

            // Division.
            check!(T, VAL1 / black_box(2));
            check!(T, VAL1 / black_box(3));

            check!(T, VAL2 / black_box(2));
            check!(T, VAL2 / black_box(3));

            check!(T, VAL3 / black_box(2));
            check!(T, VAL3 / black_box(3));
            check!(T, VAL3 / (black_box(1) + VAL4));
            check!(T, VAL3 / (black_box(1) + VAL2));

            check!(T, VAL4 / black_box(2));
            check!(T, VAL4 / black_box(3));

            check!(Option<T>, VAL1.checked_div(black_box(2)));
            check!(Option<T>, VAL1.checked_div(black_box(1) + VAL2));
            check!(Option<T>, VAL3.checked_div(VAL3));
            check!(Option<T>, VAL4.checked_div(black_box(2)));
            check!(Option<T>, VAL5.checked_div(black_box(2)));
            check!(Option<T>, (T::MIN).checked_div(black_box(0 as T).wrapping_sub(1)));
            check!(Option<T>, VAL5.checked_div(black_box(0))); // var5 / 0

            check!(T, VAL1.wrapping_div(black_box(2)));
            check!(T, VAL1.wrapping_div(black_box(1) + VAL2));
            check!(T, VAL3.wrapping_div(VAL3));
            check!(T, VAL4.wrapping_div(black_box(2)));
            check!(T, VAL5.wrapping_div(black_box(2)));
            check!(T, (T::MIN).wrapping_div(black_box(0 as T).wrapping_sub(1)));

            check!((T, bool), VAL1.overflowing_div(black_box(2)));
            check!((T, bool), VAL1.overflowing_div(black_box(1) + VAL2));
            check!((T, bool), VAL3.overflowing_div(VAL3));
            check!((T, bool), VAL4.overflowing_div(black_box(2)));
            check!((T, bool), VAL5.overflowing_div(black_box(2)));
            check!((T, bool), (T::MIN).overflowing_div(black_box(0 as T).wrapping_sub(1)));

            check!(T, VAL1.saturating_div(black_box(2)));
            check!(T, VAL1.saturating_div((black_box(1) + VAL2)));
            check!(T, VAL3.saturating_div(VAL3));
            check!(T, VAL4.saturating_div(black_box(2)));
            check!(T, VAL5.saturating_div(black_box(2)));
            check!(T, (T::MIN).saturating_div((0 as T).wrapping_sub(black_box(1))));
        };
    }

    {
        type T = u32;
        const VAL1: T = 14162_u32;
        const VAL2: T = 14556_u32;
        const VAL3: T = 323656954_u32;
        const VAL4: T = 2023651954_u32;
        const VAL5: T = 1323651954_u32;
        check_ops32!();
    }

    {
        type T = i32;
        const VAL1: T = 13456_i32;
        const VAL2: T = 10475_i32;
        const VAL3: T = 923653954_i32;
        const VAL4: T = 993198738_i32;
        const VAL5: T = 1023653954_i32;
        check_ops32!();
    }

    {
        type T = u64;
        const VAL1: T = 134217856_u64;
        const VAL2: T = 104753732_u64;
        const VAL3: T = 12323651988970863954_u64;
        const VAL4: T = 7323651988970863954_u64;
        const VAL5: T = 8323651988970863954_u64;
        check_ops64!();
    }

    {
        type T = i64;
        const VAL1: T = 134217856_i64;
        const VAL2: T = 104753732_i64;
        const VAL3: T = 6323651988970863954_i64;
        const VAL4: T = 2323651988970863954_i64;
        const VAL5: T = 3323651988970863954_i64;
        check_ops64!();
    }

    {
        type T = u128;
        const VAL1: T = 134217856_u128;
        const VAL2: T = 10475372733397991552_u128;
        const VAL3: T = 193236519889708027473620326106273939584_u128;
        const VAL4: T = 123236519889708027473620326106273939584_u128;
        const VAL5: T = 153236519889708027473620326106273939584_u128;
        check_ops128!();
    }
    {
        type T = i128;
        const VAL1: T = 134217856_i128;
        const VAL2: T = 10475372733397991552_i128;
        const VAL3: T = 83236519889708027473620326106273939584_i128;
        const VAL4: T = 63236519889708027473620326106273939584_i128;
        const VAL5: T = 73236519889708027473620326106273939584_i128;
        check_ops128!();
    }
}
