From 1f1d1a38aae9f4994f76f69948f1feaca73ba57f Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Wed, 21 May 2014 12:10:00 -0500 Subject: [PATCH] minor cleanups to contract-random-generate's API --- .../racket-doc/scribblings/reference/contracts.scrbl | 4 ++-- racket/collects/racket/contract/private/generate.rkt | 12 ++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/reference/contracts.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/reference/contracts.scrbl index f3b1356890..e8cf1653e0 100644 --- a/pkgs/racket-pkgs/racket-doc/scribblings/reference/contracts.scrbl +++ b/pkgs/racket-pkgs/racket-doc/scribblings/reference/contracts.scrbl @@ -2766,8 +2766,8 @@ parts of the contract system. @section{Random generation} @defproc[(contract-random-generate [ctc contract?] - [fuel int?] - [fail (-> any/c) (λ () (error ...))]) + [fuel 5 exact-nonnegative-integer?] + [fail (or/c #f (-> any)) #f]) any/c]{ Attempts to randomly generate a value which will match the contract. The fuel argument limits how hard the generator tries to generate a value matching the diff --git a/racket/collects/racket/contract/private/generate.rkt b/racket/collects/racket/contract/private/generate.rkt index c52b208abe..77b16cc22f 100644 --- a/racket/collects/racket/contract/private/generate.rkt +++ b/racket/collects/racket/contract/private/generate.rkt @@ -107,9 +107,17 @@ (append ctcs (definitely-available-contracts))]) (thunk))) -; generate : contract int -> ctc value or error -(define (contract-random-generate ctc fuel [_fail #f]) +(define (contract-random-generate ctc [fuel 5] [_fail #f]) (define def-ctc (coerce-contract 'contract-random-generate ctc)) + (unless (exact-nonnegative-integer? fuel) + (raise-argument-error 'contract-random-generate + "exact-nonnegative-integer?" + fuel)) + (unless (or (not _fail) (and (procedure? _fail) (procedure-arity-includes? _fail 0))) + (raise-argument-error 'contract-random-generate + (format "~s" '(or/c #f (-> any))) + 3 + ctc fuel _fail)) (define proc (parameterize ([generate-env (make-hash)]) (generate/choose def-ctc fuel)))