Skip to content

Commit 47a893f

Browse files
committed
adjust redex-check's default strategy to ensure that it always uses the
random generator, at least some of the time
1 parent 52e4d90 commit 47a893f

File tree

3 files changed

+17
-28
lines changed

3 files changed

+17
-28
lines changed

redex-doc/redex/scribblings/ref/testing.scrbl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -606,11 +606,10 @@ using the @racket[match-bindings] produced by @racket[match]ing
606606
how @math{t} is generated:
607607
@itemlist[@item{@racket[language @#,ttpattern]:
608608
In this case, @racket[redex-check] uses an ad hoc strategy for
609-
generating @racket[_pattern]. For the first 10 seconds, it uses
610-
in-order enumeration to pick terms. After that, it
611-
alternates back and forth between in-order enumeration
612-
and the ad hoc random generator. After the 10 minute mark,
613-
it switches over to using just the ad hoc random generator.}
609+
generating @racket[_pattern]. For the first half of the attempts
610+
(or only 500 if there are more than 1000 attempts) it uses
611+
in-order enumeration to pick terms. After that,
612+
it switches over to using the ad hoc random generator.}
614613
@item{@racket[language @#,ttpattern #:ad-hoc]:
615614
In this case, @racket[redex-check] uses an ad hoc random generator
616615
to generate terms that match @racket[_pattern].}

redex-lib/redex/HISTORY.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
v8.18
2+
3+
* changed redex-check's default generation strategy so that it
4+
always uses random generation. Specifically, spends half of its
5+
attempts on the enumerator and half on random generation when the
6+
total number of attempts is 1000 or less. Otherwise it caps the
7+
enumerator to 500 attempts.
8+
19
v8.17
210

311
* render-judgment-form and judgment-form->pict are functions, making

redex-lib/redex/private/generate-term.rkt

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -307,11 +307,11 @@
307307
keep-going?)]
308308
[else
309309
#`(check-one
310-
(default-generator #,lang `pattern)
310+
(default-generator #,lang `pattern att)
311311
property att ret (and print? show) (or fix (λ (x) x)) term-match
312312
keep-going?)])])))))))
313313

314-
(define (default-generator lang pat)
314+
(define (default-generator lang pat total-attempts)
315315
(define ad-hoc-generator ((compile lang 'redex-check) pat))
316316
(define enum (pat-enumerator (compiled-lang-enum-table lang)
317317
pat
@@ -323,12 +323,7 @@
323323
(define in-bounds (if (finite-enum? enum)
324324
(λ (x) (modulo x (enum-count enum)))
325325
(λ (x) x)))
326-
(define start-time (current-inexact-milliseconds))
327-
(define interleave-start-attempt #f)
328-
(define interleave-time (+ start-time (* 1000 10))) ;; 10 seconds later
329-
(define pure-random-start-attempt #f)
330-
(define pure-random-time (+ start-time (* 1000 60 10))) ;; 10 minutes later
331-
326+
(define random-start (min 500 (ceiling (/ total-attempts 2))))
332327
(λ (_size _attempt _retries)
333328
(define (enum-ith/fallback enum n)
334329
(define val (enum-ith enum n))
@@ -339,25 +334,12 @@
339334
;; when the enumerator properly handles (x_!_1 ...) patterns,
340335
;; then remove enum-ith/fallback and just use enum-ith
341336
(ad-hoc-generator _size _attempt _retries)))
342-
(define now (current-inexact-milliseconds))
343337
(cond
344-
[(<= now interleave-time)
338+
[(< _attempt random-start)
345339
(enum-ith/fallback enum (in-bounds (- _attempt 1)))]
346-
[(<= now pure-random-time)
347-
(unless interleave-start-attempt (set! interleave-start-attempt _attempt))
348-
(define interleave-attempt (- _attempt interleave-start-attempt))
349-
(cond
350-
[(odd? interleave-attempt)
351-
(ad-hoc-generator _size (/ (- interleave-attempt 1) 2) _retries)]
352-
[else
353-
(define enum-id (in-bounds (+ interleave-start-attempt (/ interleave-attempt 2) -1)))
354-
(enum-ith/fallback enum enum-id)])]
355340
[else
356-
(unless pure-random-start-attempt (set! pure-random-start-attempt _attempt))
357341
(ad-hoc-generator _size
358-
(+ (- _attempt pure-random-start-attempt)
359-
(quotient (- pure-random-start-attempt pure-random-start-attempt)
360-
2))
342+
(- _attempt random-start)
361343
_retries)]))]
362344
[else
363345
ad-hoc-generator]))

0 commit comments

Comments
 (0)