|
307 | 307 | keep-going?)] |
308 | 308 | [else |
309 | 309 | #`(check-one |
310 | | - (default-generator #,lang `pattern) |
| 310 | + (default-generator #,lang `pattern att) |
311 | 311 | property att ret (and print? show) (or fix (λ (x) x)) term-match |
312 | 312 | keep-going?)])]))))))) |
313 | 313 |
|
314 | | -(define (default-generator lang pat) |
| 314 | +(define (default-generator lang pat total-attempts) |
315 | 315 | (define ad-hoc-generator ((compile lang 'redex-check) pat)) |
316 | 316 | (define enum (pat-enumerator (compiled-lang-enum-table lang) |
317 | 317 | pat |
|
323 | 323 | (define in-bounds (if (finite-enum? enum) |
324 | 324 | (λ (x) (modulo x (enum-count enum))) |
325 | 325 | (λ (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)))) |
332 | 327 | (λ (_size _attempt _retries) |
333 | 328 | (define (enum-ith/fallback enum n) |
334 | 329 | (define val (enum-ith enum n)) |
|
339 | 334 | ;; when the enumerator properly handles (x_!_1 ...) patterns, |
340 | 335 | ;; then remove enum-ith/fallback and just use enum-ith |
341 | 336 | (ad-hoc-generator _size _attempt _retries))) |
342 | | - (define now (current-inexact-milliseconds)) |
343 | 337 | (cond |
344 | | - [(<= now interleave-time) |
| 338 | + [(< _attempt random-start) |
345 | 339 | (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)])] |
355 | 340 | [else |
356 | | - (unless pure-random-start-attempt (set! pure-random-start-attempt _attempt)) |
357 | 341 | (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) |
361 | 343 | _retries)]))] |
362 | 344 | [else |
363 | 345 | ad-hoc-generator])) |
|
0 commit comments