doc HtDP language additions for testing

svn: r9163
This commit is contained in:
Matthew Flatt 2008-04-04 12:12:35 +00:00
parent 4047d38184
commit a9d7b95d3d
6 changed files with 89 additions and 13 deletions

View File

@ -17,7 +17,7 @@
(define intm-time (scheme time)))) (define intm-time (scheme time))))
@(bd intm-define intm-define-struct intm-lambda intm-local intm-letrec intm-let intm-let* intm-time) @(bd intm-define intm-define-struct intm-lambda intm-local intm-letrec intm-let intm-let* intm-time)
@(define-syntax-rule (bbd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-require) @(define-syntax-rule (bbd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-check-expect beg-require)
(begin (begin
(require (for-label lang/htdp-beginner)) (require (for-label lang/htdp-beginner))
(define beg-define (scheme define)) (define beg-define (scheme define))
@ -26,8 +26,9 @@
(define beg-if (scheme if)) (define beg-if (scheme if))
(define beg-and (scheme and)) (define beg-and (scheme and))
(define beg-or (scheme or)) (define beg-or (scheme or))
(define beg-check-expect (scheme check-expect))
(define beg-require (scheme require)))) (define beg-require (scheme require))))
@(bbd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-require) @(bbd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-check-expect beg-require)
@title[#:style 'toc]{Advanced Student} @title[#:style 'toc]{Advanced Student}
@ -36,7 +37,8 @@
@schemegrammar*+qq[ @schemegrammar*+qq[
#:literals (define define-struct lambda cond else if and or empty true false require lib planet #:literals (define define-struct lambda cond else if and or empty true false require lib planet
local let let* letrec time begin begin0 set! delay shared recur when case unless) local let let* letrec time begin begin0 set! delay shared recur when case unless
check-expect check-within check-error)
[program (code:line def-or-expr ...)] [program (code:line def-or-expr ...)]
[def-or-expr definition [def-or-expr definition
expr expr
@ -69,6 +71,7 @@
(and expr expr expr ...) (and expr expr expr ...)
(or expr expr expr ...) (or expr expr expr ...)
(time expr) (time expr)
test-case
empty empty
(code:line id (code:comment #, @seclink["intermediate-id"]{identifier})) (code:line id (code:comment #, @seclink["intermediate-id"]{identifier}))
(code:line prim-op (code:comment #, @seclink["intermediate-lambda-prim-op"]{primitive operation})) (code:line prim-op (code:comment #, @seclink["intermediate-lambda-prim-op"]{primitive operation}))
@ -316,6 +319,16 @@ The same as Beginning's @|beg-and| and @|beg-or|.}
The same as Intermediate's @|intm-time|.} The same as Intermediate's @|intm-time|.}
@deftogether[(
@defform[(check-expect expr expr)]
@defform[(check-within expr expr expr)]
@defform[(check-error expr expr)]
)]{
The same as Beginning's @|beg-check-expect|, etc.}
@deftogether[( @deftogether[(
@defthing[empty empty?] @defthing[empty empty?]
@defthing[true boolean?] @defthing[true boolean?]

View File

@ -4,7 +4,7 @@
"prim-ops.ss" "prim-ops.ss"
(for-label lang/htdp-beginner-abbr)) (for-label lang/htdp-beginner-abbr))
@(define-syntax-rule (bd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-require) @(define-syntax-rule (bd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-check-expect beg-require)
(begin (begin
(require (for-label lang/htdp-beginner)) (require (for-label lang/htdp-beginner))
(define beg-define (scheme define)) (define beg-define (scheme define))
@ -13,8 +13,9 @@
(define beg-if (scheme if)) (define beg-if (scheme if))
(define beg-and (scheme and)) (define beg-and (scheme and))
(define beg-or (scheme or)) (define beg-or (scheme or))
(define beg-check-expect (scheme check-expect))
(define beg-require (scheme require)))) (define beg-require (scheme require))))
@(bd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-require) @(bd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-check-expect beg-require)
@title[#:style 'toc]{Beginning Student with List Abbreviations} @title[#:style 'toc]{Beginning Student with List Abbreviations}
@ -22,7 +23,8 @@
@declare-exporting[lang/htdp-beginner-abbr] @declare-exporting[lang/htdp-beginner-abbr]
@schemegrammar*+qq[ @schemegrammar*+qq[
#:literals (define define-struct lambda cond else if and or empty true false require lib planet) #:literals (define define-struct lambda cond else if and or empty true false require lib planet
check-expect check-within check-error)
[program (code:line def-or-expr ...)] [program (code:line def-or-expr ...)]
[def-or-expr definition [def-or-expr definition
expr expr
@ -38,6 +40,7 @@
(if expr expr expr) (if expr expr expr)
(and expr expr expr ...) (and expr expr expr ...)
(or expr expr expr ...) (or expr expr expr ...)
test-case
empty empty
id id
(code:line #, @elem{@schemevalfont{'}@scheme[quoted]} (code:comment #, @seclink["beginner-abbr-quote"]{quoted value})) (code:line #, @elem{@schemevalfont{'}@scheme[quoted]} (code:comment #, @seclink["beginner-abbr-quote"]{quoted value}))
@ -164,6 +167,14 @@ The same as Beginning's @|beg-if|.}
The same as Beginning's @|beg-and| and @|beg-or|.} The same as Beginning's @|beg-and| and @|beg-or|.}
@deftogether[(
@defform[(check-expect expr expr)]
@defform[(check-within expr expr expr)]
@defform[(check-error expr expr)]
)]{
The same as Beginning's @|beg-check-expect|, etc.}
@deftogether[( @deftogether[(
@defthing[empty empty?] @defthing[empty empty?]
@defthing[true boolean?] @defthing[true boolean?]

View File

@ -10,10 +10,12 @@
@declare-exporting[lang/htdp-beginner] @declare-exporting[lang/htdp-beginner]
@schemegrammar*+library[ @schemegrammar*+library[
#:literals (define define-struct lambda cond else if and or empty true false require lib planet) #:literals (define define-struct lambda cond else if and or empty true false require lib planet
check-expect check-within check-error)
[program (code:line def-or-expr ...)] [program (code:line def-or-expr ...)]
[def-or-expr definition [def-or-expr definition
expr expr
library-require] library-require]
[definition (define (id id id ...) expr) [definition (define (id id id ...) expr)
(define id expr) (define id expr)
@ -26,6 +28,7 @@
(if expr expr expr) (if expr expr expr)
(and expr expr expr ...) (and expr expr expr ...)
(or expr expr expr ...) (or expr expr expr ...)
test-case
empty empty
id id
(code:line id (code:comment #, @seclink["beginner-id"]{identifier})) (code:line id (code:comment #, @seclink["beginner-id"]{identifier}))
@ -219,6 +222,29 @@ value other than @scheme[true] or @scheme[false], it is an error.}
@; ---------------------------------------------------------------------- @; ----------------------------------------------------------------------
@section{Test Cases}
@defform[(check-expect expr expr)]{
A test case to check that the first @scheme[expr] produces the same
value as the second @scheme[expr], where the latter is normally an
immediate value.}
@defform[(check-within expr expr expr)]{
Like @scheme[check-expect], but with an extra expression that produces
a number @scheme[_delta]. The test case checks that each number in the
result of the first @scheme[expr] is within @scheme[_delta] of each
corresponding number from the second @scheme[expr].}
@defform[(check-error expr expr)]{
A test case to check that the first @scheme[expr] signals an error,
where the error messages matches the string produced by the second
@scheme[expr].}
@; ----------------------------------------------------------------------
@section{@scheme[empty]} @section{@scheme[empty]}
@defthing[empty empty?]{ @defthing[empty empty?]{

View File

@ -16,7 +16,7 @@
(define intm-time (scheme time)))) (define intm-time (scheme time))))
@(bd intm-define intm-define-struct intm-local intm-letrec intm-let intm-let* intm-time) @(bd intm-define intm-define-struct intm-local intm-letrec intm-let intm-let* intm-time)
@(define-syntax-rule (bbd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-require) @(define-syntax-rule (bbd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-check-expect beg-require)
(begin (begin
(require (for-label lang/htdp-beginner)) (require (for-label lang/htdp-beginner))
(define beg-define (scheme define)) (define beg-define (scheme define))
@ -25,8 +25,9 @@
(define beg-if (scheme if)) (define beg-if (scheme if))
(define beg-and (scheme and)) (define beg-and (scheme and))
(define beg-or (scheme or)) (define beg-or (scheme or))
(define beg-check-expect (scheme check-expect))
(define beg-require (scheme require)))) (define beg-require (scheme require))))
@(bbd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-require) @(bbd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-check-expect beg-require)
@title[#:style 'toc]{Intermediate Student with Lambda} @title[#:style 'toc]{Intermediate Student with Lambda}
@ -35,7 +36,7 @@
@schemegrammar*+qq[ @schemegrammar*+qq[
#:literals (define define-struct lambda cond else if and or empty true false require lib planet #:literals (define define-struct lambda cond else if and or empty true false require lib planet
local let let* letrec time) local let let* letrec time check-expect check-within check-error)
[program (code:line def-or-expr ...)] [program (code:line def-or-expr ...)]
[def-or-expr definition [def-or-expr definition
expr expr
@ -55,6 +56,7 @@
(and expr expr expr ...) (and expr expr expr ...)
(or expr expr expr ...) (or expr expr expr ...)
(time expr) (time expr)
test-case
empty empty
(code:line id (code:comment #, @seclink["intermediate-id"]{identifier})) (code:line id (code:comment #, @seclink["intermediate-id"]{identifier}))
(code:line prim-op (code:comment #, @seclink["intermediate-lambda-prim-op"]{primitive operation})) (code:line prim-op (code:comment #, @seclink["intermediate-lambda-prim-op"]{primitive operation}))
@ -167,6 +169,15 @@ The same as Beginning's @|beg-and| and @|beg-or|.}
The same as Intermediate's @|intm-time|.} The same as Intermediate's @|intm-time|.}
@deftogether[(
@defform[(check-expect expr expr)]
@defform[(check-within expr expr expr)]
@defform[(check-error expr expr)]
)]{
The same as Beginning's @|beg-check-expect|, etc.}
@deftogether[( @deftogether[(
@defthing[empty empty?] @defthing[empty empty?]
@defthing[true boolean?] @defthing[true boolean?]

View File

@ -4,7 +4,7 @@
"prim-ops.ss" "prim-ops.ss"
(for-label lang/htdp-intermediate)) (for-label lang/htdp-intermediate))
@(define-syntax-rule (bd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-require) @(define-syntax-rule (bd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-check-expect beg-require)
(begin (begin
(require (for-label lang/htdp-beginner)) (require (for-label lang/htdp-beginner))
(define beg-define (scheme define)) (define beg-define (scheme define))
@ -13,8 +13,9 @@
(define beg-if (scheme if)) (define beg-if (scheme if))
(define beg-and (scheme and)) (define beg-and (scheme and))
(define beg-or (scheme or)) (define beg-or (scheme or))
(define beg-check-expect (scheme check-expect))
(define beg-require (scheme require)))) (define beg-require (scheme require))))
@(bd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-require) @(bd beg-define beg-define-struct beg-cond beg-if beg-and beg-or beg-check-expect beg-require)
@title[#:style 'toc]{Intermediate Student} @title[#:style 'toc]{Intermediate Student}
@ -22,7 +23,7 @@
@schemegrammar*+qq[ @schemegrammar*+qq[
#:literals (define define-struct lambda cond else if and or empty true false require lib planet #:literals (define define-struct lambda cond else if and or empty true false require lib planet
local let let* letrec time) local let let* letrec time check-expect check-within check-error)
[program (code:line def-or-expr ...)] [program (code:line def-or-expr ...)]
[def-or-expr definition [def-or-expr definition
expr expr
@ -43,6 +44,7 @@
(and expr expr expr ...) (and expr expr expr ...)
(or expr expr expr ...) (or expr expr expr ...)
(time expr) (time expr)
test-case
empty empty
(code:line id (code:comment #, @seclink["intermediate-id"]{identifier})) (code:line id (code:comment #, @seclink["intermediate-id"]{identifier}))
(code:line prim-op (code:comment #, @seclink["intermediate-prim-op"]{primitive operation})) (code:line prim-op (code:comment #, @seclink["intermediate-prim-op"]{primitive operation}))
@ -210,6 +212,16 @@ The same as Beginning's @|beg-if|.}
The same as Beginning's @|beg-and| and @|beg-or|.} The same as Beginning's @|beg-and| and @|beg-or|.}
@deftogether[(
@defform[(check-expect expr expr)]
@defform[(check-within expr expr expr)]
@defform[(check-error expr expr)]
)]{
The same as Beginning's @|beg-check-expect|, etc.}
@deftogether[( @deftogether[(
@defthing[empty empty?] @defthing[empty empty?]
@defthing[true boolean?] @defthing[true boolean?]

View File

@ -13,6 +13,9 @@
(define-syntax-rule (schemegrammar*+library form ...) (define-syntax-rule (schemegrammar*+library form ...)
(schemegrammar* (schemegrammar*
form ... form ...
[test-case #, @scheme[(check-expect expr expr)]
#, @scheme[(check-within expr expr expr)]
#, @scheme[(check-error expr expr)]]
(... (...
[libray-require #, @scheme[(require string)] [libray-require #, @scheme[(require string)]
#, @scheme[(require (lib string string ...))] #, @scheme[(require (lib string string ...))]