quickcheck-arbitrary-derive

Crates.ioquickcheck-arbitrary-derive
lib.rsquickcheck-arbitrary-derive
version0.2.7
created_at2025-06-10 15:07:52.6388+00
updated_at2025-06-12 01:31:52.649917+00
descriptionDerive QuickCheck's Arbitrary trait
homepage
repositoryhttps://github.com/NathanSnail/quickcheck-derive
max_upload_size
id1707219
size24,953
Nathan (NathanSnail)

documentation

README

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
Commit count: 45

cargo fmt