diff --git a/src/tester.rs b/src/tester.rs index f09326c..5f70f86 100644 --- a/src/tester.rs +++ b/src/tester.rs @@ -364,12 +364,14 @@ impl Testable for fn($($name),*) -> T { #[allow(non_snake_case)] fn result(&self, g: &mut Gen) -> TestResult { - fn shrink_failure( - g: &mut Gen, - self_: fn($($name),*) -> T, - a: ($($name,)*), - ) -> Option { - for t in a.shrink() { + let self_ = *self; + let a: ($($name,)*) = Arbitrary::arbitrary(g); + let ( $($name,)* ) = a.clone(); + let mut r = safe(move || {self_($($name),*)}).result(g); + + if r.is_failure() { + let mut a = a.shrink(); + while let Some(t) = a.next() { let ($($name,)*) = t.clone(); let mut r_new = safe(move || {self_($($name),*)}).result(g); if r_new.is_failure() { @@ -378,28 +380,18 @@ impl r, - Fail => { - shrink_failure(g, self_, a).unwrap_or(r) - } - } + r } }}}