Write some with-contract tests.
svn: r11666 original commit: d9c47de816d3cff6ad3cea0cbeac309506007c70
This commit is contained in:
parent
68c83b2a54
commit
e05c164435
|
@ -1668,6 +1668,63 @@ of the contract library does not change over time.
|
|||
(g #f 3))
|
||||
"g")
|
||||
|
||||
(test/spec-passed
|
||||
'with-contract1
|
||||
'(let ()
|
||||
(with-contract odd-even
|
||||
([odd? (-> number? boolean?)]
|
||||
[even? (-> number? boolean?)])
|
||||
(define (odd? n)
|
||||
(if (zero? n) #f (even? (sub1 n))))
|
||||
(define (even? n)
|
||||
(if (zero? n) #t (odd? (sub1 n)))))
|
||||
(odd? 5)))
|
||||
|
||||
(test/spec-failed
|
||||
'with-contract2
|
||||
'(let ()
|
||||
(with-contract odd-even
|
||||
([odd? (-> number? boolean?)]
|
||||
[even? (-> number? boolean?)])
|
||||
(define (odd? n)
|
||||
(if (zero? n) #f (even? (sub1 n))))
|
||||
(define (even? n)
|
||||
(if (zero? n) #t (odd? (sub1 n)))))
|
||||
(odd? #t))
|
||||
"top-level")
|
||||
|
||||
(test/spec-failed
|
||||
'with-contract3
|
||||
'(let ()
|
||||
(with-contract odd-even
|
||||
([odd? (-> number? boolean?)]
|
||||
[even? (-> number? boolean?)])
|
||||
(define (odd? n)
|
||||
(if (zero? n) n (even? (sub1 n))))
|
||||
(define (even? n)
|
||||
(if (zero? n) #t (odd? (sub1 n)))))
|
||||
(odd? 4))
|
||||
"odd-even")
|
||||
|
||||
;; Functions within the same with-contract region can call
|
||||
;; each other however they want, so here we have even?
|
||||
;; call odd? with a boolean, even though its contract in
|
||||
;; the odd-even contract says it only takes numbers.
|
||||
(test/spec-passed
|
||||
'with-contract4
|
||||
'(let ()
|
||||
(with-contract odd-even
|
||||
([odd? (-> number? boolean?)]
|
||||
[even? (-> number? boolean?)])
|
||||
(define (odd? n)
|
||||
(cond
|
||||
[(not (number? n)) #f]
|
||||
[(zero? n) #f]
|
||||
[else (even? (sub1 n))]))
|
||||
(define (even? n)
|
||||
(if (zero? n) #t (odd? (zero? n)))))
|
||||
(odd? 5)))
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
|
|
Loading…
Reference in New Issue
Block a user