A #[derive(QuickCheck)] macro to automatically implement QuickCheck’s Arbitrary (with arbitrary + shrink) for your types.
Dual-licensed under MIT or UNLICENSE
Add to your Cargo.toml:
quickcheck = "1.0.3" # quickcheck runtime
quickcheck-arbitrary-derive = "0.2.7" # this derive macro#[derive(Clone, QuickCheck, Debug)]
struct Pair<T> {
first: T,
second: T,
}
#[cfg(test)]
mod test {
use crate::Pair;
#[quickcheck_macros::quickcheck]
fn fails(pair: Pair<isize>) {
assert_eq!(pair.first, pair.second);
}
}You should see that the test fails, and that the minimal example produced is just (1, 0). The derive macro automatically implements both arbitrary and shrink so that the sample failing test cases are as simple as possible.
- Implements both
arbitraryandshrink - Works on:
- Named Structs
- Unnamed Structs
- Enums
- Supports generic type paramaters
- Supports recursive types via
#[quickcheck(recursive = Exponential)]enum variant attribute
- Does not support union types
- Does not support lifetime parameters