|
1 | 1 | #[allow(unused_macros)] |
2 | 2 | macro_rules! engine_tests { |
3 | | - // Handles both cases: |
4 | | - // common::engine_tests!(rfdiffusion); |
5 | | - // common::engine_tests!(rfdiffusion; "high-memory-tests"); |
6 | | - // common::engine_tests!(rfdiffusion; "high-memory-tests", "some-awesome-feature"); |
7 | | - // |
8 | | - ($test_fn:ident $(; $($feature:literal),+ $(,)?)?) => { |
9 | | - ::paste::paste! { |
| 3 | + // Default: all engines (including none), optional features |
| 4 | + ($test_fn:ident $(; $($feature:literal),* $(,)?)? ) => { |
| 5 | + $crate::common::engine_tests!( |
| 6 | + @gen $test_fn; |
| 7 | + //engines(docker, singularity, apptainer, none); |
| 8 | + engines(docker, singularity, apptainer); |
| 9 | + features($($($feature),*)?) |
| 10 | + ); |
| 11 | + }; |
| 12 | + |
| 13 | + // Explicit engines override (+ optional features) |
| 14 | + ($test_fn:ident; |
| 15 | + engines($($eng:ident),+ $(,)? ) |
| 16 | + $(; $($feature:literal),* $(,)?)? |
| 17 | + ) => { |
| 18 | + $crate::common::engine_tests!( |
| 19 | + @gen $test_fn; |
| 20 | + engines($($eng),+); |
| 21 | + features($($($feature),*)?) |
| 22 | + ); |
| 23 | + }; |
| 24 | + |
| 25 | + // Normalize: features are passed as ONE token tree: ( ... ) |
| 26 | + (@gen $test_fn:ident; engines($($eng:ident),+); features $features:tt) => { |
| 27 | + $( |
| 28 | + $crate::common::engine_tests!(@emit $test_fn; $eng; $features); |
| 29 | + )+ |
| 30 | + }; |
| 31 | + |
| 32 | + // ---- Per-engine expansion (re-parse features here) ---- |
10 | 33 |
|
| 34 | + (@emit $test_fn:ident; docker; ($($feature:literal),*) ) => { |
| 35 | + ::paste::paste! { |
11 | 36 | #[test] |
12 | 37 | #[serial_test::serial] |
13 | 38 | #[cfg_attr( |
14 | | - not(all( |
15 | | - feature = "docker-tests" |
16 | | - $( $(, feature = $feature)*)? |
17 | | - )), |
| 39 | + not(all(feature = "docker-tests" $(, feature = $feature)*)), |
18 | 40 | ignore |
19 | 41 | )] |
20 | 42 | fn [<docker_ $test_fn>]() { |
21 | | - common::docker_clear_cache(); |
| 43 | + $crate::common::docker_clear_cache(); |
22 | 44 | $test_fn("docker"); |
23 | 45 | } |
| 46 | + } |
| 47 | + }; |
24 | 48 |
|
| 49 | + (@emit $test_fn:ident; singularity; ($($feature:literal),*) ) => { |
| 50 | + ::paste::paste! { |
25 | 51 | #[test] |
26 | 52 | #[serial_test::serial] |
27 | 53 | #[cfg_attr( |
28 | | - not(all( |
29 | | - feature = "hpc-tests" |
30 | | - $($(, feature = $feature)*)? |
31 | | - )), |
| 54 | + not(all(feature = "hpc-tests" $(, feature = $feature)*)), |
32 | 55 | ignore |
33 | 56 | )] |
34 | 57 | fn [<singularity_ $test_fn>]() { |
35 | 58 | $test_fn("singularity"); |
36 | 59 | } |
| 60 | + } |
| 61 | + }; |
37 | 62 |
|
| 63 | + (@emit $test_fn:ident; apptainer; ($($feature:literal),*) ) => { |
| 64 | + ::paste::paste! { |
38 | 65 | #[test] |
39 | 66 | #[serial_test::serial] |
40 | 67 | #[cfg_attr( |
41 | | - not(all( |
42 | | - feature = "hpc-tests" |
43 | | - $($(, feature = $feature)*)? |
44 | | - )), |
| 68 | + not(all(feature = "hpc-tests" $(, feature = $feature)*)), |
45 | 69 | ignore |
46 | 70 | )] |
47 | 71 | fn [<apptainer_ $test_fn>]() { |
48 | 72 | $test_fn("apptainer"); |
49 | 73 | } |
50 | 74 | } |
51 | 75 | }; |
| 76 | + |
| 77 | + (@emit $test_fn:ident; none; ($($feature:literal),*) ) => { |
| 78 | + ::paste::paste! { |
| 79 | + #[test] |
| 80 | + #[serial_test::serial] |
| 81 | + #[cfg_attr( |
| 82 | + not(all(feature = "native-tests" $(, feature = $feature)*)), |
| 83 | + ignore |
| 84 | + )] |
| 85 | + fn [<native_ $test_fn>]() { |
| 86 | + $test_fn("none"); |
| 87 | + } |
| 88 | + } |
| 89 | + }; |
| 90 | + |
| 91 | + // Nice error for typos / unsupported engines |
| 92 | + (@emit $test_fn:ident; $other:ident; $features:tt ) => { |
| 93 | + compile_error!(concat!( |
| 94 | + "engine_tests!: unknown engine '", |
| 95 | + stringify!($other), |
| 96 | + "'. Expected: docker, singularity, apptainer, none." |
| 97 | + )); |
| 98 | + }; |
52 | 99 | } |
53 | 100 |
|
54 | 101 | // macro_rules! engine_tests { |
|
0 commit comments