summaryrefslogtreecommitdiffstats
path: root/library/portable-simd/crates/core_simd/tests/cast.rs
blob: ab5650f071323a9e0b96dbb80c123495372bbf1e (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
36
37
#![feature(portable_simd)]
macro_rules! cast_types {
    ($start:ident, $($target:ident),*) => {
        mod $start {
            use core_simd::simd::Simd;
            type Vector<const N: usize> = Simd<$start, N>;
            $(
                mod $target {
                    use super::*;
                    test_helpers::test_lanes! {
                        fn cast_as<const N: usize>() {
                            test_helpers::test_unary_elementwise(
                                &Vector::<N>::cast::<$target>,
                                &|x| x as $target,
                                &|_| true,
                            )
                        }
                    }
                }
            )*
        }
    };
}

// The hypothesis is that widening conversions aren't terribly interesting.
cast_types!(f32, f64, i8, u8, usize, isize);
cast_types!(f64, f32, i8, u8, usize, isize);
cast_types!(i8, u8, f32);
cast_types!(u8, i8, f32);
cast_types!(i16, u16, i8, u8, f32);
cast_types!(u16, i16, i8, u8, f32);
cast_types!(i32, u32, i8, u8, f32, f64);
cast_types!(u32, i32, i8, u8, f32, f64);
cast_types!(i64, u64, i8, u8, isize, usize, f32, f64);
cast_types!(u64, i64, i8, u8, isize, usize, f32, f64);
cast_types!(isize, usize, i8, u8, f32, f64);
cast_types!(usize, isize, i8, u8, f32, f64);