Trevor Gross 4bf116f146 Add an integration test that verifies a list of cases
We need someplace to collect known failures, previous regressions, edge
cases that are difficult to construct from generics, and similar.
Introduce this here.
2025-02-06 01:40:04 -06:00

39 lines
1.1 KiB
Rust

//! Test cases that have both an input and an output, so do not require a basis.
use libm_test::gen::case_list;
use libm_test::{CheckBasis, CheckCtx, CheckOutput, GeneratorKind, MathOp, TupleCall};
const BASIS: CheckBasis = CheckBasis::None;
fn standalone_runner<Op: MathOp>(
ctx: &CheckCtx,
cases: impl Iterator<Item = (Op::RustArgs, Op::RustRet)>,
) {
for (input, expected) in cases {
let crate_res = input.call(Op::ROUTINE);
crate_res.validate(expected, input, ctx).unwrap();
}
}
macro_rules! mp_tests {
(
fn_name: $fn_name:ident,
attrs: [$($attr:meta),*],
) => {
paste::paste! {
#[test]
$(#[$attr])*
fn [< standalone_ $fn_name >]() {
type Op = libm_test::op::$fn_name::Routine;
let ctx = CheckCtx::new(Op::IDENTIFIER, BASIS, GeneratorKind::List);
let cases = case_list::get_test_cases_standalone::<Op>(&ctx);
standalone_runner::<Op>(&ctx, cases);
}
}
};
}
libm_macros::for_each_function! {
callback: mp_tests,
}