Skip to content

Commit c197560

Browse files
committed
[stdsimd-test] testing conditional on more than one feature
1 parent 231405f commit c197560

File tree

1 file changed

+25
-3
lines changed
  • stdsimd-test/simd-test-macro/src

1 file changed

+25
-3
lines changed

stdsimd-test/simd-test-macro/src/lib.rs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,25 +33,47 @@ pub fn simd_test(
3333
TokenNode::Op('=', _) => {}
3434
_ => panic!("expected #[simd_test = \"feature\"]"),
3535
}
36-
let target_feature = &tokens[1];
36+
let target_features = match tokens[1].kind {
37+
TokenNode::Literal(ref l) => l.to_string(),
38+
_ => panic!("expected #[simd_test = \"feature\"]"),
39+
};
40+
let target_features: Vec<String> = target_features
41+
.replace('"', "")
42+
.replace('+', "")
43+
.split(',')
44+
.map(|v| String::from(v))
45+
.collect();
46+
3747
let enable_feature = match tokens[1].kind {
3848
TokenNode::Literal(ref l) => l.to_string(),
3949
_ => panic!("expected #[simd_test = \"feature\"]"),
4050
};
4151
let enable_feature = enable_feature
4252
.trim_left_matches('"')
4353
.trim_right_matches('"');
44-
let enable_feature = string(&format!("+{}", enable_feature));
54+
let enable_feature =
55+
string(&(format!("+{}", enable_feature).replace(',', ",+")));
4556
let item = TokenStream::from(item);
4657
let name = find_name(item.clone());
4758

4859
let name: TokenStream = name.as_str().parse().unwrap();
4960

61+
let mut cfg_target_features = quote::Tokens::new();
62+
use quote::ToTokens;
63+
for feature in target_features {
64+
let q = quote! {
65+
cfg_feature_enabled!(#feature) &&
66+
};
67+
q.to_tokens(&mut cfg_target_features);
68+
}
69+
let q = quote!{ true };
70+
q.to_tokens(&mut cfg_target_features);
71+
5072
let ret: TokenStream = quote! {
5173
#[allow(non_snake_case)]
5274
#[test]
5375
fn #name() {
54-
if cfg_feature_enabled!(#target_feature) {
76+
if #cfg_target_features {
5577
return unsafe { #name() };
5678
} else {
5779
::stdsimd_test::assert_skip_test_ok(stringify!(#name));

0 commit comments

Comments
 (0)