about summary refs log tree commit diff
path: root/library/compiler-builtins/builtins-test/tests/shift.rs
blob: 0f2483855e591efd3a23bd3da20ffa3fb36feb63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use builtins_test::*;

macro_rules! shift {
    ($($i:ty, $fn_std:ident, $fn_builtins:ident);*;) => {
        $(
            #[test]
            fn $fn_builtins() {
                use compiler_builtins::int::shift::$fn_builtins;

                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
                        );
                    }
                });
            }
        )*
    };
}

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;
}