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-property for-all ==> expect expect-within expect-member-of expect-range
contract : define-contract -> mixed one-of predicate combined property
number real rational integer natural boolean true false string symbol empty-list unspecific
contract : define-contract -> mixed one-of predicate combined
number real rational integer natural boolean true false string symbol empty-list unspecific property
chocolate-cookie)
(provide cons)
(provide-and-document

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -243,7 +243,10 @@ Vertrag für die leere Liste.
}
@defform/none[contract]{
Vertrag Verträge.}
Vertrag für Verträge.}
@defidform[property]{
Vertrag für Eigenschaften.}
@subsection{@scheme[predicate]}
@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]}
@defform[(list contr)]{
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[(code:line %a %b %c (code:comment @#,seclink["contract-variable"]{Vertrags-Variable}))]
@#,scheme[(combined contr (... ...))]
@#,scheme[(property expr contr)]
@#,scheme[contract]
]
[test-case @#,scheme[(check-expect expr expr)]