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
.. ... .... ..... ......
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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)))

View File

@ -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