Crate proptest_quickcheck_interop [−] [src]
proptest
is a property testing framework (i.e., the QuickCheck
family)
inspired by the Hypothesis framework for
Python.
quickcheck
is another property testing framework for Rust which uses
a shrinking logic similar to Haskell's QuickCheck
.
This crate provides interoperability between quickcheck and proptest.
Currently, this is one way - if you've implemented quickcheck's
Arbitrary
trait as well as Debug
then you may get back the equivalent Strategy
in proptest.
Status of this crate
This crate is unlikely to see major changes. Any breaking changes
are only likely to come as a result of changes in the dependencies used by
this crate, in particular proptest or quickcheck. Since neither of those
crates have reached 1.0.0
neither has this crate. Once that happen, this
crate will go 1.0.0
as well.
See the changelog for a full list of substantial historical changes, breaking and otherwise.
Using the interoperability layer
Assuming that you already have a Cargo.toml
file in your project with,
among other things, the following:
[dependencies]
quickcheck = "0.5.0"
proptest = "0.3.2"
Now add this crate to your dependencies:
[dependencies]
quickcheck = "0.5.0"
proptest = "0.3.2"
proptest_quickcheck_interop = "0.1.0"
Let's now assume that usize
is a complex type for which you have
implemented quickcheck::Arbitrary
. You wish you reuse this in proptest
or if you simply prefer the implementation provided by quickcheck.
To do so, you can use from_qc
:
// Import crates: #[macro_use] extern crate proptest; extern crate proptest_quickcheck_interop as pqci; // And what we need into our scope: use proptest::strategy::Strategy; use pqci::from_qc; /// Given a usize returns the nearest usize that is also even. fn make_even(x: usize) -> usize { if x % 2 == 1 { x - 1 } else { x } } proptest! { /// A property asserting that make_even always produces an even usize. fn always_even(ref x in from_qc::<usize>().prop_map(make_even)) { prop_assert!(x % 2 == 0); } } fn main() { always_even(); }
If you want to control the size
of the input generated by quickcheck
you may instead use from_qc_sized(size)
. If you use,
from_qc
, then the default size used by quickcheck is used.
Structs
QCStrategy |
|
QCValueTree |
The |
Functions
from_qc |
Constructs a new |
from_qc_sized |
Constructs a new |