#![feature(portable_simd)] macro_rules! unary_test { { $scalar:tt, $($func:tt),+ } => { test_helpers::test_lanes! { $( fn $func() { test_helpers::test_unary_elementwise( &core_simd::simd::Simd::<$scalar, LANES>::$func, &$scalar::$func, &|_| true, ) } )* } } } macro_rules! binary_test { { $scalar:tt, $($func:tt),+ } => { test_helpers::test_lanes! { $( fn $func() { test_helpers::test_binary_elementwise( &core_simd::simd::Simd::<$scalar, LANES>::$func, &$scalar::$func, &|_, _| true, ) } )* } } } macro_rules! ternary_test { { $scalar:tt, $($func:tt),+ } => { test_helpers::test_lanes! { $( fn $func() { test_helpers::test_ternary_elementwise( &core_simd::simd::Simd::<$scalar, LANES>::$func, &$scalar::$func, &|_, _, _| true, ) } )* } } } macro_rules! impl_tests { { $scalar:tt } => { mod $scalar { use std_float::StdFloat; unary_test! { $scalar, sqrt, sin, cos, exp, exp2, ln, log2, log10, ceil, floor, round, trunc } binary_test! { $scalar, log } ternary_test! { $scalar, mul_add } test_helpers::test_lanes! { fn fract() { test_helpers::test_unary_elementwise_flush_subnormals( &core_simd::simd::Simd::<$scalar, LANES>::fract, &$scalar::fract, &|_| true, ) } } } } } impl_tests! { f32 } impl_tests! { f64 }