Parametrized tests tools for Rust
This rustc
plugin adds a macro to help you make parametrized tests:
```rust // Basic usage plague! { for [ (1, 1), (2, 2), ] test fn eq(a: i32, b: i32) { assert_eq!(a, b); } }
// You can also specify the expected value, Plague will assert_eq!
the result for you
plague! {
for [1 -> 2, 2 -> 4]
test fn double(a: i32) -> i32 {
2*a
}
}
// And you can call functions defined somewhere else or give meaningful names to test cases plague! { for [ 'empty ("",) -> 0, ("foo",) -> 3, 'c_str ("foo\u{0}bar",) -> 7, ] test str::len } ```
The plugin will generate one test function for each parameter set, this way,
running cargo test
will show each failed value, instead of just one:
```
running 8 tests
test pos#4 ... ok
test pos#2 ... FAILED
test pos#3 ... FAILED
test pos#5 ... ok
test pos'empty ... ok
test pos'notfound ... ok
test pos'unary ... FAILED
test withoutplague ... FAILED
failures:
---- pos#2 stdout ----
thread 'pos#2' panicked at 'test failed: got None
, expected Some(0)
', examples/cmp.rs:15
---- pos#3 stdout ----
thread 'pos#3' panicked at 'test failed: got Some(2)
, expected Some(0)
', examples/cmp.rs:15
---- pos'unary stdout ----
thread 'pos'unary' panicked at 'test failed: got None
, expected Some(0)
', examples/cmp.rs:15
---- withoutplague stdout ----
thread 'withoutplague' panicked at 'assertion failed: (left == right)
(left: None
, right: Some(0)
)', examples/cmp.rs:41
failures: pos#2 pos#3 pos'unary without_plague
test result: FAILED. 4 passed; 4 failed; 0 ignored; 0 measured ```