From 9d1c9672d967e8b092c1b77ebaae797321c4b6bb Mon Sep 17 00:00:00 2001 From: Mike Sperber Date: Sat, 14 Nov 2009 14:28:31 +0000 Subject: [PATCH] Add `property' contract for QuickCheck properties to DeinProgramm languages ... and don't export the old property "combinator" to the language levels. svn: r16770 --- collects/deinprogramm/DMdA-advanced.ss | 4 ++-- collects/deinprogramm/DMdA-assignments.ss | 4 ++-- collects/deinprogramm/DMdA-beginner.ss | 4 ++-- collects/deinprogramm/DMdA-vanilla.ss | 4 ++-- collects/deinprogramm/DMdA.ss | 12 ++++++++---- collects/deinprogramm/quickcheck/quickcheck.ss | 1 + .../deinprogramm/scribblings/DMdA-beginner.scrbl | 16 ++++------------ collects/deinprogramm/scribblings/std-grammar.ss | 1 - 8 files changed, 21 insertions(+), 25 deletions(-) diff --git a/collects/deinprogramm/DMdA-advanced.ss b/collects/deinprogramm/DMdA-advanced.ss index c8551f07c3..ae40ba19d0 100644 --- a/collects/deinprogramm/DMdA-advanced.ss +++ b/collects/deinprogramm/DMdA-advanced.ss @@ -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 diff --git a/collects/deinprogramm/DMdA-assignments.ss b/collects/deinprogramm/DMdA-assignments.ss index 61809dab92..895c51d6e3 100644 --- a/collects/deinprogramm/DMdA-assignments.ss +++ b/collects/deinprogramm/DMdA-assignments.ss @@ -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 diff --git a/collects/deinprogramm/DMdA-beginner.ss b/collects/deinprogramm/DMdA-beginner.ss index 8f8aa21ea3..c2d3e713fe 100644 --- a/collects/deinprogramm/DMdA-beginner.ss +++ b/collects/deinprogramm/DMdA-beginner.ss @@ -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 diff --git a/collects/deinprogramm/DMdA-vanilla.ss b/collects/deinprogramm/DMdA-vanilla.ss index 4e12195f7b..57e2ba777f 100644 --- a/collects/deinprogramm/DMdA-vanilla.ss +++ b/collects/deinprogramm/DMdA-vanilla.ss @@ -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 diff --git a/collects/deinprogramm/DMdA.ss b/collects/deinprogramm/DMdA.ss index 50fbb610f1..c8d197289e 100644 --- a/collects/deinprogramm/DMdA.ss +++ b/collects/deinprogramm/DMdA.ss @@ -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))) - \ No newline at end of file +(define property (contract (predicate (lambda (x) + (or (boolean? x) + (property? x)))))) + diff --git a/collects/deinprogramm/quickcheck/quickcheck.ss b/collects/deinprogramm/quickcheck/quickcheck.ss index fdaeb70bc3..8e3c2f0a6f 100644 --- a/collects/deinprogramm/quickcheck/quickcheck.ss +++ b/collects/deinprogramm/quickcheck/quickcheck.ss @@ -18,6 +18,7 @@ arbitrary-symbol arbitrary-procedure property + property? ==> label classify diff --git a/collects/deinprogramm/scribblings/DMdA-beginner.scrbl b/collects/deinprogramm/scribblings/DMdA-beginner.scrbl index 9aaef821b7..1797640669 100644 --- a/collects/deinprogramm/scribblings/DMdA-beginner.scrbl +++ b/collects/deinprogramm/scribblings/DMdA-beginner.scrbl @@ -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, diff --git a/collects/deinprogramm/scribblings/std-grammar.ss b/collects/deinprogramm/scribblings/std-grammar.ss index eced83cc27..8a6044fe3f 100644 --- a/collects/deinprogramm/scribblings/std-grammar.ss +++ b/collects/deinprogramm/scribblings/std-grammar.ss @@ -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)]