1 #![feature(portable_simd)]
3 #[cfg(target_arch = "wasm32")]
4 use wasm_bindgen_test::*;
6 #[cfg(target_arch = "wasm32")]
7 wasm_bindgen_test_configure!(run_in_browser);
9 macro_rules! test_mask_api {
11 #[allow(non_snake_case)]
13 #[cfg(target_arch = "wasm32")]
14 use wasm_bindgen_test::*;
17 #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
19 let values = [true, false, false, true, false, false, true, false];
20 let mut mask = core_simd::Mask::<$type, 8>::splat(false);
21 for (lane, value) in values.iter().copied().enumerate() {
22 mask.set(lane, value);
24 for (lane, value) in values.iter().copied().enumerate() {
25 assert_eq!(mask.test(lane), value);
31 fn set_invalid_lane() {
32 let mut mask = core_simd::Mask::<$type, 8>::splat(false);
39 fn test_invalid_lane() {
40 let mask = core_simd::Mask::<$type, 8>::splat(false);
46 assert!(!core_simd::Mask::<$type, 8>::splat(false).any());
47 assert!(core_simd::Mask::<$type, 8>::splat(true).any());
48 let mut v = core_simd::Mask::<$type, 8>::splat(false);
55 assert!(!core_simd::Mask::<$type, 8>::splat(false).all());
56 assert!(core_simd::Mask::<$type, 8>::splat(true).all());
57 let mut v = core_simd::Mask::<$type, 8>::splat(false);
63 fn roundtrip_int_conversion() {
64 let values = [true, false, false, true, false, false, true, false];
65 let mask = core_simd::Mask::<$type, 8>::from_array(values);
66 let int = mask.to_int();
67 assert_eq!(int.to_array(), [-1, 0, 0, -1, 0, 0, -1, 0]);
68 assert_eq!(core_simd::Mask::<$type, 8>::from_int(int), mask);
71 #[cfg(feature = "generic_const_exprs")]
73 fn roundtrip_bitmask_conversion() {
75 true, false, false, true, false, false, true, false,
76 true, true, false, false, false, false, false, true,
78 let mask = core_simd::Mask::<$type, 16>::from_array(values);
79 let bitmask = mask.to_bitmask();
80 assert_eq!(bitmask, [0b01001001, 0b10000011]);
81 assert_eq!(core_simd::Mask::<$type, 16>::from_bitmask(bitmask), mask);
89 test_mask_api! { i16 }
90 test_mask_api! { i32 }
91 test_mask_api! { i64 }
92 test_mask_api! { isize }
97 let values = [true, false, false, true, false, false, true, false];
99 core_simd::Mask::<i8, 8>::from_array(values),
100 core_simd::Mask::<i32, 8>::from_array(values).into()