@@ -191,7 +191,7 @@ impl Eq for CaseOutcome with fn equal(expected, actual) {
191191fn [A : @shrink.Shrink ] shrink_failure(
192192 property : (A ) -> Bool raise?,
193193 filter : (A ) -> Bool ,
194- shrink_equal : (A , A ) -> Bool ,
194+ shrink_equal : (( A , A ) -> Bool )? ,
195195 input : A ,
196196 initial : CaseOutcome ,
197197 max_shrinks : UInt ,
@@ -201,16 +201,18 @@ fn[A : @shrink.Shrink] shrink_failure(
201201 let mut successful = 0U
202202 let mut attempted = 0U
203203 let mut found = true
204- let seen = [input]
204+ let seen = shrink_equal.map(_ => [input])
205205 while attempted < max_shrinks && found {
206206 found = false
207207 let candidates = @shrink.Shrink ::shrink(current)
208208 while attempted < max_shrinks && candidates.next() is Some (candidate) {
209209 attempted = attempted + 1
210- if seen.any(previous => shrink_equal(previous, candidate)) {
211- continue
210+ if (shrink_equal, seen) is (Some (equal), Some (seen)) {
211+ if seen.any(previous => equal(previous, candidate)) {
212+ continue
213+ }
214+ seen.push(candidate)
212215 }
213- seen.push(candidate)
214216 let outcome = evaluate_case(property, filter, candidate)
215217 if initial == outcome {
216218 current = candidate
@@ -294,7 +296,7 @@ fn[A : @debug.Debug] failure_report(report : QuickCheckReport[A]) -> String {
294296pub fn [A : Arbitrary + @shrink.Shrink ] report(
295297 property : (A ) -> Bool raise?,
296298 filter? : (A ) -> Bool = _ => true ,
297- shrink_equal? : (A , A ) -> Bool = (_, _) => false ,
299+ shrink_equal? : (A , A ) -> Bool ,
298300 observe? : (A ) -> Observations = _ => [] ,
299301 counterexample_context? : (A ) -> String ,
300302 count? : UInt = 100,
@@ -415,7 +417,7 @@ pub fn[A : Arbitrary + @shrink.Shrink] report(
415417pub fn [A : Arbitrary + @shrink.Shrink + @debug.Debug ] check(
416418 property : (A ) -> Bool raise?,
417419 filter? : (A ) -> Bool = _ => true ,
418- shrink_equal? : (A , A ) -> Bool = (_, _) => false ,
420+ shrink_equal? : (A , A ) -> Bool ,
419421 observe? : (A ) -> Observations = _ => [] ,
420422 counterexample_context? : (A ) -> String ,
421423 count? : UInt = 100,
@@ -428,7 +430,7 @@ pub fn[A : Arbitrary + @shrink.Shrink + @debug.Debug] check(
428430 let result = report(
429431 property,
430432 filter~,
431- shrink_equal~ ,
433+ shrink_equal? ,
432434 observe~,
433435 counterexample_context?,
434436 count~,
0 commit comments