Skip to content

Commit 585bbc7

Browse files
committed
Keep default shrink path allocation-free
1 parent c0f41d6 commit 585bbc7

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

quickcheck/driver.mbt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ impl Eq for CaseOutcome with fn equal(expected, actual) {
191191
fn[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 {
294296
pub 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(
415417
pub 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

Comments
 (0)