quickcheck-arbitrary-derive 0.2.7

Derive QuickCheck's Arbitrary trait
Documentation

QuickCheck Arbitrary Derive

crates.io MIT OR UNLICENSE docs.rs

A #[derive(QuickCheck)] macro to automatically implement QuickCheck’s Arbitrary (with arbitrary + shrink) for your types.

Dual-licensed under MIT or UNLICENSE


Installation

Add to your Cargo.toml:

quickcheck = "1.0.3"                  # quickcheck runtime
quickcheck-arbitrary-derive = "0.2.7"    # this derive macro

Example usage

#[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.

Features

  • Implements both arbitrary and shrink
  • Works on:
    • Named Structs
    • Unnamed Structs
    • Enums
  • Supports generic type paramaters
  • Supports recursive types via #[quickcheck(recursive = Exponential)] enum variant attribute

Limitations

  • Does not support union types
  • Does not support lifetime parameters