Macro proptest::proptest
[−]
[src]
macro_rules! proptest { (#![proptest_config($config:expr)] $( $(#[$meta:meta])* fn $test_name:ident($($parm:pat in $strategy:expr),+) $body:block )*) => { ... }; (@_WRAP ($a:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt $a2:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt $a2:tt $a3:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt $a2:tt $a3:tt $a4:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt $a2:tt $a3:tt $a4:tt $a5:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt $a2:tt $a3:tt $a4:tt $a5:tt $a6:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt $a2:tt $a3:tt $a4:tt $a5:tt $a6:tt $a7:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt $a2:tt $a3:tt $a4:tt $a5:tt $a6:tt $a7:tt $a8:tt)) => { ... }; (@_WRAP ($a0:tt $a1:tt $a2:tt $a3:tt $a4:tt $a5:tt $a6:tt $a7:tt $a8:tt $a9:tt)) => { ... }; (@_WRAP ($a:tt $($rest:tt)*)) => { ... }; (@_WRAPPAT ($item:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat, $a2:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat, $a2:pat, $a3:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat, $a2:pat, $a3:pat, $a4:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat, $a2:pat, $a3:pat, $a4:pat, $a5:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat, $a2:pat, $a3:pat, $a4:pat, $a5:pat, $a6:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat, $a2:pat, $a3:pat, $a4:pat, $a5:pat, $a6:pat, $a7:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat, $a2:pat, $a3:pat, $a4:pat, $a5:pat, $a6:pat, $a7:pat, $a8:pat)) => { ... }; (@_WRAPPAT ($a0:pat, $a1:pat, $a2:pat, $a3:pat, $a4:pat, $a5:pat, $a6:pat, $a7:pat, $a8:pat, $a9:pat)) => { ... }; (@_WRAPPAT ($a:pat, $($rest:pat),*)) => { ... }; ($( $(#[$meta:meta])* fn $test_name:ident($($parm:pat in $strategy:expr),+) $body:block )*) => { ... }; }
Easily define proptest
tests.
Within proptest!
, define one or more functions without return type
normally, except instead of putting : type
after each parameter, write
in strategy
, where strategy
is an expression evaluating to some
Strategy
.
Each function will be wrapped in a function which sets up a TestRunner
,
and then invokes the function body with inputs generated according to the
strategies. Note that the inputs are borrowed from the test runner, so if
they are not Copy
, you will need to use ref
with each parameter name.
Example:
#[macro_use] extern crate proptest; proptest! { #[test] fn test_addition(a in 0..10, b in 0..10) { assert!(a + b <= 18); } // Note the `ref a` and `ref b` --- `String` is not `Copy`, // so we can't take ownership implicitly. #[test] fn test_string_concat(ref a in ".*", ref b in ".*") { let cat = format!("{}{}", a, b); assert_eq!(a.len() + b.len(), cat.len()); } }
To override the default configuration, you can start the proptest!
block
with #![proptest_config(expr)]
, where expr
is an expression that
evaluates to a proptest::test_runner::Config
(or a reference to one).
#[macro_use] extern crate proptest; use proptest::test_runner::Config; proptest! { #![proptest_config(Config { cases: 99, .. Config::default() })] #[test] fn test_addition(a in 0..10, b in 0..10) { assert!(a + b <= 18); } }