In the DMdA languages, create arbitrary for record signature without fields.

This way, you don't have to use define-record-procedures-parametric
for records like this:

(define-record-procedures empty
  make-empty empty?
  ())
This commit is contained in:
Mike Sperber 2011-12-18 14:11:39 +01:00
parent c080940d02
commit 7fac9193fa
2 changed files with 9 additions and 3 deletions

View File

@ -13,7 +13,7 @@
deinprogramm/signature/signature deinprogramm/signature/signature
deinprogramm/signature/signature-german deinprogramm/signature/signature-german
deinprogramm/signature/signature-syntax deinprogramm/signature/signature-syntax
(only-in deinprogramm/quickcheck/quickcheck arbitrary-record)) (only-in deinprogramm/quickcheck/quickcheck arbitrary-record arbitrary-one-of))
(require (for-syntax scheme/base) (require (for-syntax scheme/base)
(for-syntax deinprogramm/syntax-checkers) (for-syntax deinprogramm/syntax-checkers)

View File

@ -169,8 +169,14 @@
(syntax->list #'(?param ...))))) (syntax->list #'(?param ...)))))
(with-syntax ((base-signature (with-syntax ((base-signature
(stepper-syntax-property (stepper-syntax-property
#'(define ?type-name #`(define ?type-name
(signature ?type-name (predicate real-predicate))) (let ((sig (signature ?type-name (predicate real-predicate))))
#,(if (null? (syntax->list #'(?field-spec ...)))
#'(set-signature-arbitrary-promise!
sig
(delay (arbitrary-one-of equal? (?constructor))))
#'(begin))
sig))
'stepper-skip-completely 'stepper-skip-completely
#t)) #t))
(constructor-signature (constructor-signature