]> git.lizzy.rs Git - rust.git/blob - crates/core_simd/tests/masks.rs
Begin reducing mask API
[rust.git] / crates / core_simd / tests / masks.rs
1 #[cfg(target_arch = "wasm32")]
2 use wasm_bindgen_test::*;
3
4 #[cfg(target_arch = "wasm32")]
5 wasm_bindgen_test_configure!(run_in_browser);
6
7 macro_rules! test_mask_api {
8     { $name:ident } => {
9         #[allow(non_snake_case)]
10         mod $name {
11             #[cfg(target_arch = "wasm32")]
12             use wasm_bindgen_test::*;
13
14             #[test]
15             #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
16             fn set_and_test() {
17                 let values = [true, false, false, true, false, false, true, false];
18                 let mut mask = core_simd::$name::<8>::splat(false);
19                 for (lane, value) in values.iter().copied().enumerate() {
20                     mask.set(lane, value);
21                 }
22                 for (lane, value) in values.iter().copied().enumerate() {
23                     assert_eq!(mask.test(lane), value);
24                 }
25             }
26
27             #[test]
28             #[should_panic]
29             fn set_invalid_lane() {
30                 let mut mask = core_simd::$name::<8>::splat(false);
31                 mask.set(8, true);
32                 let _ = mask;
33             }
34
35             #[test]
36             #[should_panic]
37             fn test_invalid_lane() {
38                 let mask = core_simd::$name::<8>::splat(false);
39                 let _ = mask.test(8);
40             }
41
42             #[test]
43             fn any() {
44                 assert!(!core_simd::$name::<8>::splat(false).any());
45                 assert!(core_simd::$name::<8>::splat(true).any());
46                 let mut v = core_simd::$name::<8>::splat(false);
47                 v.set(2, true);
48                 assert!(v.any());
49             }
50
51             #[test]
52             fn all() {
53                 assert!(!core_simd::$name::<8>::splat(false).all());
54                 assert!(core_simd::$name::<8>::splat(true).all());
55                 let mut v = core_simd::$name::<8>::splat(false);
56                 v.set(2, true);
57                 assert!(!v.all());
58             }
59         }
60     }
61 }
62
63 mod mask_api {
64     test_mask_api! { Mask8 }
65 }