Expand description
Pest-style parameterized tests via the dataset! macro.
Pest in Laravel-land lets you write:
it('squares numbers', function ($n, $sq) {
expect($n * $n)->toBe($sq);
})->with([[1, 1], [2, 4], [3, 9]]);Rust’s #[test] is rigid about test names and arguments, so we generate
a separate #[tokio::test] per row. The dataset! macro takes a base test
name, a list of named cases, the parameter list, and the test body.
ⓘ
use anvilforge::assay::*;
dataset!(squares_numbers, [
one => (1, 1),
two => (2, 4),
three => (3, 9),
negative => (-3, 9),
], |(n, sq): (i32, i32)| {
expect(n * n).to_be(sq);
});The closure parameter is a single tuple pattern + tuple type. Rust’s declarative macros can’t cleanly mix the case-level repetition with a per-arg parameter list, so we destructure once per generated test.
Each row becomes its own test:
squares_numbers__onesquares_numbers__twosquares_numbers__threesquares_numbers__negative
Async variants are supported by using dataset!(name, [...], async |...| { ... }).