123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- use testcrate::*;
- macro_rules! shift {
- ($($i:ty, $fn_std:ident, $fn_builtins:ident);*;) => {
- $(
- fuzz_shift(|x: $i, s: u32| {
- let tmp0: $i = x.$fn_std(s);
- let tmp1: $i = $fn_builtins(x, s);
- if tmp0 != tmp1 {
- panic!(
- "{}({}, {}): std: {}, builtins: {}",
- stringify!($fn_builtins), x, s, tmp0, tmp1
- );
- }
- });
- )*
- };
- }
- macro_rules! overflowing_shift {
- ($($i:ty, $fn_std:ident, $fn_builtins:ident);*;) => {
- $(
- fuzz_shift(|x: $i, s: u32| {
- let tmp0: $i = x.$fn_std(s);
- let (tmp1, o1): ($i, bool) = $fn_builtins(x, s.into());
- if tmp0 != tmp1 || o1 {
- panic!(
- "{}({}, {}): std: {}, builtins: {}",
- stringify!($fn_builtins), x, s, tmp0, tmp1
- );
- }
- });
- )*
- };
- }
- #[test]
- fn shift() {
- use compiler_builtins::int::shift::{
- __ashldi3, __ashlsi3, __ashlti3, __ashrdi3, __ashrsi3, __ashrti3, __lshrdi3, __lshrsi3,
- __lshrti3, __rust_i128_shlo, __rust_i128_shro, __rust_u128_shlo, __rust_u128_shro,
- };
- shift!(
- u32, wrapping_shl, __ashlsi3;
- u64, wrapping_shl, __ashldi3;
- u128, wrapping_shl, __ashlti3;
- i32, wrapping_shr, __ashrsi3;
- i64, wrapping_shr, __ashrdi3;
- i128, wrapping_shr, __ashrti3;
- u32, wrapping_shr, __lshrsi3;
- u64, wrapping_shr, __lshrdi3;
- u128, wrapping_shr, __lshrti3;
- );
- overflowing_shift!(
- u128, wrapping_shl, __rust_u128_shlo;
- i128, wrapping_shl, __rust_i128_shlo;
- u128, wrapping_shr, __rust_u128_shro;
- i128, wrapping_shr, __rust_i128_shro;
- );
- }
|