Add expect-member-of' and expect-range' to DeinProgramm / DMdA languages.

svn: r16750
This commit is contained in:
Mike Sperber 2009-11-13 18:02:10 +00:00
parent bd15e86680
commit 01058dfd26
6 changed files with 46 additions and 8 deletions

View File

@ -10,7 +10,7 @@
define-record-procedures-parametric define-record-procedures-parametric-2 define-record-procedures-parametric define-record-procedures-parametric-2
.. ... .... ..... ...... .. ... .... ..... ......
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 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 property
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
chocolate-cookie) chocolate-cookie)

View File

@ -10,7 +10,7 @@
define-record-procedures-parametric define-record-procedures-parametric-2 define-record-procedures-parametric define-record-procedures-parametric-2
.. ... .... ..... ...... .. ... .... ..... ......
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 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 property
number real rational integer natural boolean true false string empty-list unspecific number real rational integer natural boolean true false string empty-list unspecific
chocolate-cookie) chocolate-cookie)

View File

@ -6,7 +6,7 @@
define-record-procedures define-record-procedures-parametric define-record-procedures define-record-procedures-parametric
.. ... .... ..... ...... .. ... .... ..... ......
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 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 property
number real rational integer natural boolean true false string empty-list number real rational integer natural boolean true false string empty-list
chocolate-cookie) chocolate-cookie)

View File

@ -6,7 +6,7 @@
define-record-procedures define-record-procedures-parametric define-record-procedures define-record-procedures-parametric
.. ... .... ..... ...... .. ... .... ..... ......
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 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 property
number real rational integer natural boolean true false string empty-list number real rational integer natural boolean true false string empty-list
chocolate-cookie) chocolate-cookie)

View File

@ -72,8 +72,7 @@
(provide for-all ==> (provide for-all ==>
check-property check-property
expect expect expect-within expect-member-of expect-range)
expect-within)
(provide quote) (provide quote)
@ -1042,5 +1041,30 @@
(define (expect v1 v2) (define (expect v1 v2)
(quickcheck:property () (beginner-equal? 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) (define (expect-within v1 v2 epsilon)
(ensure-real 'expect-within "Drittes" epsilon)
(quickcheck:property () (beginner-equal~? v1 v2 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)))

View File

@ -326,8 +326,8 @@ des ersten Operanden gleich dem Wert eines der folgenden Operanden ist.}
@defform[(check-range expr expr expr)]{ @defform[(check-range expr expr expr)]{
Ähnlich wie @scheme[check-expect]: Alle drei Operanden müssen ein Ähnlich wie @scheme[check-expect]: Alle drei Operanden müssen
Zahlen. Der Testfall überprüft, ob die erste Zahl zwischen der Zahlen sein. Der Testfall überprüft, ob die erste Zahl zwischen der
zweiten und der dritten liegt (inklusive).} zweiten und der dritten liegt (inklusive).}
@defform[(check-error expr expr)]{ @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 @scheme[expr] maximal um @scheme[_delta] von der entsprechenden Zahl
im zweiten @scheme[expr] abweicht.} 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)]{ @defform[(==> expr expr)]{
Der erste Operand ist ein boolescher Ausdruck, der zweite Operand eine Der erste Operand ist ein boolescher Ausdruck, der zweite Operand eine
Eigenschaft: @scheme[(==> c p)] legt fest, daß die Eigenschaft Eigenschaft: @scheme[(==> c p)] legt fest, daß die Eigenschaft