From fc0cdeb7f15483e86676e0d4143b2f3a9a4c7057 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 20 Aug 2016 22:17:50 -0500 Subject: [PATCH] qc: bias towards generation of edge cases --- src/qc.rs | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/qc.rs b/src/qc.rs index 6b37cce..fcb0b08 100644 --- a/src/qc.rs +++ b/src/qc.rs @@ -20,7 +20,18 @@ macro_rules! arbitrary { fn arbitrary(g: &mut G) -> $TY where G: Gen { - $TY(g.gen()) + // NOTE Generate edge cases with a 10% chance + let t = if g.gen_weighted_bool(10) { + *g.choose(&[ + $ty::min_value(), + 0, + $ty::max_value(), + ]).unwrap() + } else { + g.gen() + }; + + $TY(t) } fn shrink(&self) -> Box> { @@ -76,13 +87,23 @@ macro_rules! arbitrary_large { fn arbitrary(g: &mut G) -> $TY where G: Gen { - if g.gen() { - $TY($ty::from_parts(g.gen(), g.gen())) - } else if g.gen() { - $TY($ty::from_parts(0, g.gen())) + // NOTE Generate edge cases with a 10% chance + let t = if g.gen_weighted_bool(10) { + *g.choose(&[ + $ty::min_value(), + 0, + $ty::max_value(), + ]).unwrap() } else { - $TY($ty::from_parts(g.gen(), 0)) - } + match g.gen_range(0, 3) { + 0 => $ty::from_parts(g.gen(), g.gen()), + 1 => $ty::from_parts(0, g.gen()), + 2 => $ty::from_parts(g.gen(), 0), + _ => unreachable!(), + } + }; + + $TY(t) } fn shrink(&self) -> Box> {