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:
parent
3c68ac4a0c
commit
9d1c9672d9
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))))))
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
arbitrary-symbol
|
arbitrary-symbol
|
||||||
arbitrary-procedure
|
arbitrary-procedure
|
||||||
property
|
property
|
||||||
|
property?
|
||||||
==>
|
==>
|
||||||
label
|
label
|
||||||
classify
|
classify
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user