]> git.proxmox.com Git - rustc.git/blame - library/portable-simd/crates/core_simd/tests/masks.rs
New upstream version 1.61.0+dfsg1
[rustc.git] / library / portable-simd / crates / core_simd / tests / masks.rs
CommitLineData
3c0e092e
XL
1#![feature(portable_simd)]
2
3#[cfg(target_arch = "wasm32")]
4use wasm_bindgen_test::*;
5
6#[cfg(target_arch = "wasm32")]
7wasm_bindgen_test_configure!(run_in_browser);
8
9macro_rules! test_mask_api {
10 { $type:ident } => {
11 #[allow(non_snake_case)]
12 mod $type {
13 #[cfg(target_arch = "wasm32")]
14 use wasm_bindgen_test::*;
15
16 #[test]
17 #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
18 fn set_and_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);
23 }
24 for (lane, value) in values.iter().copied().enumerate() {
25 assert_eq!(mask.test(lane), value);
26 }
27 }
28
29 #[test]
30 #[should_panic]
31 fn set_invalid_lane() {
32 let mut mask = core_simd::Mask::<$type, 8>::splat(false);
33 mask.set(8, true);
34 let _ = mask;
35 }
36
37 #[test]
38 #[should_panic]
39 fn test_invalid_lane() {
40 let mask = core_simd::Mask::<$type, 8>::splat(false);
41 let _ = mask.test(8);
42 }
43
44 #[test]
45 fn any() {
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);
49 v.set(2, true);
50 assert!(v.any());
51 }
52
53 #[test]
54 fn all() {
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);
58 v.set(2, true);
59 assert!(!v.all());
60 }
61
62 #[test]
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);
69 }
70
3c0e092e
XL
71 #[test]
72 fn roundtrip_bitmask_conversion() {
ee023bcb 73 use core_simd::ToBitMask;
3c0e092e
XL
74 let values = [
75 true, false, false, true, false, false, true, false,
76 true, true, false, false, false, false, false, true,
77 ];
78 let mask = core_simd::Mask::<$type, 16>::from_array(values);
79 let bitmask = mask.to_bitmask();
ee023bcb 80 assert_eq!(bitmask, 0b1000001101001001);
3c0e092e
XL
81 assert_eq!(core_simd::Mask::<$type, 16>::from_bitmask(bitmask), mask);
82 }
83 }
84 }
85}
86
87mod mask_api {
88 test_mask_api! { i8 }
89 test_mask_api! { i16 }
90 test_mask_api! { i32 }
91 test_mask_api! { i64 }
92 test_mask_api! { isize }
93}
94
95#[test]
96fn convert() {
97 let values = [true, false, false, true, false, false, true, false];
98 assert_eq!(
99 core_simd::Mask::<i8, 8>::from_array(values),
100 core_simd::Mask::<i32, 8>::from_array(values).into()
101 );
102}