// run-pass
// compile-flags: -C debug_assertions=yes
// ignore-wasm32-bare compiled with panic=abort by default
// ignore-emscripten dies with an LLVM error

use std::panic;

fn main() {
    macro_rules! overflow_test {
        ($t:ident) => (
            let r = panic::catch_unwind(|| {
                ($t::max_value()).next_power_of_two()
            });
            assert!(r.is_err());

            let r = panic::catch_unwind(|| {
                (($t::max_value() >> 1) + 2).next_power_of_two()
            });
            assert!(r.is_err());
        )
    }
    overflow_test!(u8);
    overflow_test!(u16);
    overflow_test!(u32);
    overflow_test!(u64);
    overflow_test!(u128);
}
