Add `property' contract for QuickCheck properties to DeinProgramm languages

... and don't export the old property "combinator" to the language levels.

svn: r16770
This commit is contained in:
Mike Sperber 2009-11-14 14:28:31 +00:00
parent 3c68ac4a0c
commit 9d1c9672d9
8 changed files with 21 additions and 25 deletions

View File

@ -11,8 +11,8 @@
.. ... .... ..... ...... .. ... .... ..... ......
check-expect check-within check-error check-member-of check-range check-expect check-within check-error check-member-of check-range
check-property for-all ==> expect expect-within expect-member-of expect-range check-property for-all ==> expect expect-within expect-member-of expect-range
contract : define-contract -> mixed one-of predicate combined property contract : define-contract -> mixed one-of predicate combined
number real rational integer natural boolean true false string symbol empty-list unspecific number real rational integer natural boolean true false string symbol empty-list unspecific property
chocolate-cookie) chocolate-cookie)
(provide cons) (provide cons)
(provide-and-document (provide-and-document

View File

@ -11,8 +11,8 @@
.. ... .... ..... ...... .. ... .... ..... ......
check-expect check-within check-error check-member-of check-range check-expect check-within check-error check-member-of check-range
check-property for-all ==> expect expect-within expect-member-of expect-range check-property for-all ==> expect expect-within expect-member-of expect-range
contract : define-contract -> mixed one-of predicate combined property contract : define-contract -> mixed one-of predicate combined
number real rational integer natural boolean true false string empty-list unspecific number real rational integer natural boolean true false string empty-list unspecific property
chocolate-cookie) chocolate-cookie)
(provide cons) (provide cons)
(provide-and-document (provide-and-document

View File

@ -7,8 +7,8 @@
.. ... .... ..... ...... .. ... .... ..... ......
check-expect check-within check-error check-member-of check-range check-expect check-within check-error check-member-of check-range
check-property for-all ==> expect expect-within expect-member-of expect-range check-property for-all ==> expect expect-within expect-member-of expect-range
contract : define-contract -> mixed one-of predicate combined property contract : define-contract -> mixed one-of predicate combined
number real rational integer natural boolean true false string empty-list number real rational integer natural boolean true false string empty-list property
chocolate-cookie) chocolate-cookie)
(provide cons list) (provide cons list)
(provide-and-document (provide-and-document

View File

@ -7,8 +7,8 @@
.. ... .... ..... ...... .. ... .... ..... ......
check-expect check-within check-error check-member-of check-range check-expect check-within check-error check-member-of check-range
check-property for-all ==> expect expect-within expect-member-of expect-range check-property for-all ==> expect expect-within expect-member-of expect-range
contract : define-contract -> mixed one-of predicate combined property contract : define-contract -> mixed one-of predicate combined
number real rational integer natural boolean true false string empty-list number real rational integer natural boolean true false string empty-list property
chocolate-cookie) chocolate-cookie)
(provide cons) (provide cons)
(provide-and-document (provide-and-document

View File

@ -9,7 +9,7 @@
(require deinprogramm/contract/module-begin (require deinprogramm/contract/module-begin
deinprogramm/contract/contract deinprogramm/contract/contract
deinprogramm/contract/contract-test-engine deinprogramm/contract/contract-test-engine
deinprogramm/contract/contract-syntax) (except-in deinprogramm/contract/contract-syntax property))
(require (for-syntax scheme/base) (require (for-syntax scheme/base)
(for-syntax stepper/private/shared)) (for-syntax stepper/private/shared))
@ -30,14 +30,15 @@
(provide (all-from-out deinprogramm/define-record-procedures)) (provide (all-from-out deinprogramm/define-record-procedures))
(provide (all-from-out test-engine/scheme-tests)) (provide (all-from-out test-engine/scheme-tests))
(provide contract define-contract : (provide contract define-contract :
-> mixed one-of predicate combined property) -> mixed one-of predicate combined)
(provide number real rational integer natural (provide number real rational integer natural
boolean true false boolean true false
string symbol string symbol
empty-list empty-list
chocolate-cookie chocolate-cookie
unspecific) unspecific
property)
(define-syntax provide/rename (define-syntax provide/rename
(syntax-rules () (syntax-rules ()
@ -1067,4 +1068,7 @@
(beginner-equal? val cand)) (beginner-equal? val cand))
candidates))) candidates)))
(define property (contract (predicate (lambda (x)
(or (boolean? x)
(property? x))))))

View File

@ -18,6 +18,7 @@
arbitrary-symbol arbitrary-symbol
arbitrary-procedure arbitrary-procedure
property property
property?
==> ==>
label label
classify classify

View File

@ -243,7 +243,10 @@ Vertrag für die leere Liste.
} }
@defform/none[contract]{ @defform/none[contract]{
Vertrag Verträge.} Vertrag für Verträge.}
@defidform[property]{
Vertrag für Eigenschaften.}
@subsection{@scheme[predicate]} @subsection{@scheme[predicate]}
@defform[(predicate expr)]{ @defform[(predicate expr)]{
@ -276,17 +279,6 @@ für den Rückgabewert.
}} }}
} }
@subsection{@scheme[property]}
@defform[(property expr contr)]{
Dieser Vertrag ist für ein Objekt @scheme[obj] gültig, wenn der
Vertrag @scheme[contr] für @scheme[(expr obj)] gültig ist.
(In der Regel ist @scheme[expr] ein Record-Selektor @scheme[s]. In
dem Fall ist der Vertrag @scheme[(property s c)] für alle Records
gültig, bei denen der Wert des zu @scheme[s] gehörigen Felds den
Vertrag @scheme[c] erfüllt.)
}
@subsection{@scheme[list]} @subsection{@scheme[list]}
@defform[(list contr)]{ @defform[(list contr)]{
Dieser Vertrag ist dann für einen Wert gültig, wenn dieser eine Liste ist, Dieser Vertrag ist dann für einen Wert gültig, wenn dieser eine Liste ist,

View File

@ -60,7 +60,6 @@
@#,scheme[(list contr)] @#,scheme[(list contr)]
@#,scheme[(code:line %a %b %c (code:comment @#,seclink["contract-variable"]{Vertrags-Variable}))] @#,scheme[(code:line %a %b %c (code:comment @#,seclink["contract-variable"]{Vertrags-Variable}))]
@#,scheme[(combined contr (... ...))] @#,scheme[(combined contr (... ...))]
@#,scheme[(property expr contr)]
@#,scheme[contract] @#,scheme[contract]
] ]
[test-case @#,scheme[(check-expect expr expr)] [test-case @#,scheme[(check-expect expr expr)]