diff --git a/collects/deinprogramm/DMdA-advanced.ss b/collects/deinprogramm/DMdA-advanced.ss index ef222683d9..c8551f07c3 100644 --- a/collects/deinprogramm/DMdA-advanced.ss +++ b/collects/deinprogramm/DMdA-advanced.ss @@ -10,7 +10,7 @@ define-record-procedures-parametric define-record-procedures-parametric-2 .. ... .... ..... ...... check-expect check-within check-error check-member-of check-range - check-property for-all ==> expect expect-within + 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 chocolate-cookie) diff --git a/collects/deinprogramm/DMdA-assignments.ss b/collects/deinprogramm/DMdA-assignments.ss index 945eca53c8..61809dab92 100644 --- a/collects/deinprogramm/DMdA-assignments.ss +++ b/collects/deinprogramm/DMdA-assignments.ss @@ -10,7 +10,7 @@ define-record-procedures-parametric define-record-procedures-parametric-2 .. ... .... ..... ...... check-expect check-within check-error check-member-of check-range - check-property for-all ==> expect expect-within + 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 chocolate-cookie) diff --git a/collects/deinprogramm/DMdA-beginner.ss b/collects/deinprogramm/DMdA-beginner.ss index 5037d90f29..8f8aa21ea3 100644 --- a/collects/deinprogramm/DMdA-beginner.ss +++ b/collects/deinprogramm/DMdA-beginner.ss @@ -6,7 +6,7 @@ define-record-procedures define-record-procedures-parametric .. ... .... ..... ...... check-expect check-within check-error check-member-of check-range - check-property for-all ==> expect expect-within + 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 chocolate-cookie) diff --git a/collects/deinprogramm/DMdA-vanilla.ss b/collects/deinprogramm/DMdA-vanilla.ss index 21bf020921..4e12195f7b 100644 --- a/collects/deinprogramm/DMdA-vanilla.ss +++ b/collects/deinprogramm/DMdA-vanilla.ss @@ -6,7 +6,7 @@ define-record-procedures define-record-procedures-parametric .. ... .... ..... ...... check-expect check-within check-error check-member-of check-range - check-property for-all ==> expect expect-within + 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 chocolate-cookie) diff --git a/collects/deinprogramm/DMdA.ss b/collects/deinprogramm/DMdA.ss index a4fc2bae62..50fbb610f1 100644 --- a/collects/deinprogramm/DMdA.ss +++ b/collects/deinprogramm/DMdA.ss @@ -72,8 +72,7 @@ (provide for-all ==> check-property - expect - expect-within) + expect expect-within expect-member-of expect-range) (provide quote) @@ -1042,5 +1041,30 @@ (define (expect v1 v2) (quickcheck:property () (beginner-equal? v1 v2))) +(define (ensure-real who n val) + (unless (real? val) + (raise + (make-exn:fail:contract + (string->immutable-string + (format "~a Argument ~e zu `~a' keine reelle Zahl." n val who)) + (current-continuation-marks))))) + (define (expect-within v1 v2 epsilon) + (ensure-real 'expect-within "Drittes" epsilon) (quickcheck:property () (beginner-equal~? v1 v2 epsilon))) + +(define (expect-range val min max) + (ensure-real 'expect-range "Erstes" val) + (ensure-real 'expect-range "Zweites" min) + (ensure-real 'expect-range "Drittes" max) + (quickcheck:property () + (and (<= min val) + (<= val max)))) + +(define (expect-member-of val . candidates) + (quickcheck:property () + (ormap (lambda (cand) + (beginner-equal? val cand)) + candidates))) + + \ No newline at end of file diff --git a/collects/deinprogramm/scribblings/DMdA-beginner.scrbl b/collects/deinprogramm/scribblings/DMdA-beginner.scrbl index 7506014645..e9c17b1169 100644 --- a/collects/deinprogramm/scribblings/DMdA-beginner.scrbl +++ b/collects/deinprogramm/scribblings/DMdA-beginner.scrbl @@ -326,8 +326,8 @@ des ersten Operanden gleich dem Wert eines der folgenden Operanden ist.} @defform[(check-range expr expr expr)]{ -Ähnlich wie @scheme[check-expect]: Alle drei Operanden müssen ein -Zahlen. Der Testfall überprüft, ob die erste Zahl zwischen der +Ähnlich wie @scheme[check-expect]: Alle drei Operanden müssen +Zahlen sein. Der Testfall überprüft, ob die erste Zahl zwischen der zweiten und der dritten liegt (inklusive).} @defform[(check-error expr expr)]{ @@ -465,6 +465,20 @@ resultierende Eigenschaft gilt, wenn jede Zahl im Resultat des ersten @scheme[expr] maximal um @scheme[_delta] von der entsprechenden Zahl im zweiten @scheme[expr] abweicht.} +@defform[(expect-member-of expr expr ...)]{ + +Wie @scheme[expect], aber entsprechend @scheme[check-member-of] mit +weiteren Ausdrücken, die mit dem ersten verglichen werden. Die +resultierende Eigenschaft gilt, wenn das erste Argument gleich +einem der anderen Argumente ist.} + +@defform[(expect-range expr expr expr)]{ + +Wie @scheme[expect], aber entsprechend @scheme[check-range]: Die +Argumente müssen Zahlen sein. Die Eigenschaft gilt, wenn die erste Zahl +zwischen der zweiten und dritten Zahl liegt (inklusive).} + + @defform[(==> expr expr)]{ Der erste Operand ist ein boolescher Ausdruck, der zweite Operand eine Eigenschaft: @scheme[(==> c p)] legt fest, daß die Eigenschaft