original commit: 231e6deaf4a96359fad011d349810fad7f142da0
This commit is contained in:
Robby Findler 2004-03-12 21:37:53 +00:00
parent 42fcdf754f
commit 80bc20f71d
2 changed files with 171 additions and 43 deletions

View File

@ -10,7 +10,7 @@ add struct contracts for immutable structs?
(module contract mzscheme
;; no bytes in v206
;(define (bytes? x) #f)
(define (bytes? x) #f)
(provide (rename -contract contract)
->

View File

@ -504,6 +504,94 @@
'pos
'neg))
(test/spec-passed
'->r1
'((contract (->r () number?) (lambda () 1) 'pos 'neg)))
(test/spec-passed
'->r2
'((contract (->r ([x number?]) number?) (lambda (x) (+ x 1)) 'pos 'neg) 1))
(test/pos-blame
'->r3
'((contract (->r () number?) 1 'pos 'neg)))
(test/pos-blame
'->r4
'((contract (->r () number?) (lambda (x) x) 'pos 'neg)))
(test/neg-blame
'->r5
'((contract (->r ([x number?]) (<=/c x)) (lambda (x) (+ x 1)) 'pos 'neg) #f))
(test/pos-blame
'->r6
'((contract (->r ([x number?]) (<=/c x)) (lambda (x) (+ x 1)) 'pos 'neg) 1))
(test/spec-passed
'->r7
'((contract (->r ([x number?][y (<=/c x)]) (<=/c x)) (lambda (x y) (- x 1)) 'pos 'neg) 1 0))
(test/neg-blame
'->r8
'((contract (->r ([x number?][y (<=/c x)]) (<=/c x)) (lambda (x y) (+ x 1)) 'pos 'neg) 1 2))
(test/spec-passed
'->r9
'((contract (->r ([y (<=/c x)][x number?]) (<=/c x)) (lambda (y x) (- x 1)) 'pos 'neg) 1 2))
(test/neg-blame
'->r10
'((contract (->r ([y (<=/c x)][x number?]) (<=/c x)) (lambda (y x) (+ x 1)) 'pos 'neg) 1 0))
(test/spec-passed
'->r11
'((contract (->r () rest any? number?) (lambda x 1) 'pos 'neg)))
(test/spec-passed
'->r12
'((contract (->r ([x number?]) rest any? number?) (lambda (x . y) (+ x 1)) 'pos 'neg) 1))
(test/pos-blame
'->r13
'((contract (->r () rest any? number?) 1 'pos 'neg)))
(test/pos-blame
'->r14
'((contract (->r () rest any? number?) (lambda (x) x) 'pos 'neg)))
(test/neg-blame
'->r15
'((contract (->r ([x number?]) rest any? (<=/c x)) (lambda (x . y) (+ x 1)) 'pos 'neg) #f))
(test/pos-blame
'->r16
'((contract (->r ([x number?]) rest any? (<=/c x)) (lambda (x . y) (+ x 1)) 'pos 'neg) 1))
(test/spec-passed
'->r17
'((contract (->r ([x number?][y (<=/c x)]) rest any? (<=/c x)) (lambda (x y . z) (- x 1)) 'pos 'neg) 1 0))
(test/neg-blame
'->r18
'((contract (->r ([x number?][y (<=/c x)]) rest any? (<=/c x)) (lambda (x y . z) (+ x 1)) 'pos 'neg) 1 2))
(test/spec-passed
'->r19
'((contract (->r ([y (<=/c x)][x number?]) rest any? (<=/c x)) (lambda (y x . z) (- x 1)) 'pos 'neg) 1 2))
(test/neg-blame
'->r20
'((contract (->r ([y (<=/c x)][x number?]) rest any? (<=/c x)) (lambda (y x . z) (+ x 1)) 'pos 'neg) 1 0))
(test/spec-passed
'->r21
'((contract (->r () rst (listof number?) any?) (lambda w 1) 'pos 'neg) 1))
(test/neg-blame
'->r22
'((contract (->r () rst (listof number?) any?) (lambda w 1) 'pos 'neg) #f))
(test/pos-blame
'contract-case->1
'(contract (case-> (integer? integer? . -> . integer?) (integer? . -> . integer?))
@ -584,8 +672,23 @@
'pos
'neg)
1 2))
(test/spec-passed
'contract-case->9
'((contract (case-> (->r ([x number?]) (<=/c x)))
(lambda (x) (- x 1))
'pos
'neg)
1))
(test/pos-blame
'contract-case->10
'((contract (case-> (->r ([x number?]) (<=/c x)))
(lambda (x) (+ x 1))
'pos
'neg)
1))
(test/neg-blame
'contract-d-protect-shared-state
'(let ([x 1])
@ -597,46 +700,6 @@
'neg)
(lambda () (set! x 2)))))
(test/spec-passed
'->r1
'((contract (->r () number?) (lambda () 1) 'pos 'neg)))
(test/spec-passed
'->r2
'((contract (->r ([x number?]) number?) (lambda (x) (+ x 1)) 'pos 'neg) 1))
(test/pos-blame
'->r3
'((contract (->r () number?) 1 'pos 'neg)))
(test/pos-blame
'->r4
'((contract (->r () number?) (lambda (x) x) 'pos 'neg)))
(test/neg-blame
'->r5
'((contract (->r ([x number?]) (<=/c x)) (lambda (x) (+ x 1)) 'pos 'neg) #f))
(test/pos-blame
'->r6
'((contract (->r ([x number?]) (<=/c x)) (lambda (x) (+ x 1)) 'pos 'neg) 1))
(test/spec-passed
'->r7
'((contract (->r ([x number?][y (<=/c x)]) (<=/c x)) (lambda (x y) (- x 1)) 'pos 'neg) 1 0))
(test/neg-blame
'->r8
'((contract (->r ([x number?][y (<=/c x)]) (<=/c x)) (lambda (x y) (+ x 1)) 'pos 'neg) 1 2))
(test/spec-passed
'->r9
'((contract (->r ([y (<=/c x)][x number?]) (<=/c x)) (lambda (y x) (- x 1)) 'pos 'neg) 1 2))
(test/neg-blame
'->r10
'((contract (->r ([y (<=/c x)][x number?]) (<=/c x)) (lambda (y x) (+ x 1)) 'pos 'neg) 1 0))
#;
(test/neg-blame
'combo1
@ -1334,6 +1397,23 @@
'neg)
m 1))
(test/spec-passed
'object-contract->*9
'(send (contract (object-contract (m (->* () (listof number?) (boolean?))))
(new (class object% (define/public (m . z) #f) (super-new)))
'pos
'neg)
m 1 2 3))
(test/neg-blame
'object-contract->*10
'(send (contract (object-contract (m (->* () (listof number?) (boolean?))))
(new (class object% (define/public (m . z) #f) (super-new)))
'pos
'neg)
m
#t))
(test/spec-passed
'object-contract->d1
'(contract (object-contract (m (->d integer? (lambda (x) (lambda (y) (and (integer? y) (= y (+ x 1))))))))
@ -1490,7 +1570,44 @@
'pos
'neg)
m 1 #t 'x 'y))
(test/spec-passed
'object-contract-->r1
'(send (contract (object-contract (m (case-> (->r ([x number?]) (<=/c x)))))
(new (class object% (define/public m (lambda (x) (- x 1))) (super-new)))
'pos
'neg)
m
1))
(test/pos-blame
'object-contract-->r2
'(send (contract (object-contract (m (case-> (->r ([x number?]) (<=/c x)))))
(new (class object% (define/public m (lambda (x) (+ x 1))) (super-new)))
'pos
'neg)
m
1))
(test/spec-passed
'object-contract-->r3
'(send (contract (object-contract (m (->r () rst (listof number?) any?)))
(new (class object% (define/public m (lambda w 1)) (super-new)))
'pos
'neg)
m
1))
(test/neg-blame
'object-contract-->r4
'(send (contract (object-contract (m (->r () rst (listof number?) any?)))
(new (class object% (define/public m (lambda w 1)) (super-new)))
'pos
'neg)
m
#f))
(test/spec-passed/result
'object-contract-drop-method1
'(send (contract (object-contract (m (-> integer? integer?)))
@ -2039,9 +2156,14 @@
(test-name "(->d integer? boolean? ...)" (->d integer? boolean? (lambda (x y) char?)))
(test-name "(->d* (integer? boolean?) ...)" (->d* (integer? boolean?) (lambda (x y) char?)))
(test-name "(->d* (integer? boolean?) any? ...)" (->d* (integer? boolean?) any? (lambda (x y . z) char?)))
(test-name "(->r ((x ...)) ...)" (->r ((x number?)) number?))
(test-name "(->r ((x ...) (y ...) (z ...)) ...)" (->r ((x number?) (y boolean?) (z pair?)) number?))
(test-name "(->r ((x ...) (y ...) (z ...)) rest-x ... ...)"
(->r ((x number?) (y boolean?) (z pair?)) rest-x any? number?))
(test-name "(case-> (->r ((x ...)) ...))" (case-> (->r ((x number?)) number?)))
(test-name "(case-> (->r ((x ...) (y ...) (z ...)) ...))"
(case-> (->r ((x number?) (y boolean?) (z pair?)) number?)))
(test-name "(case-> (-> integer? integer?) (-> integer? integer? integer?))"
(case-> (-> integer? integer?) (-> integer? integer? integer?)))
@ -2156,5 +2278,11 @@
(-> integer? boolean? (values symbol? boolean?)))))")
(object-contract (m (opt->* (integer?) (boolean?) (symbol? boolean?)))))
(test-name "(object-contract (m (->r ((x ...)) ...)))" (object-contract (m (->r ((x number?)) number?))))
(test-name "(object-contract (m (->r ((x ...) (y ...) (z ...)) ...)))"
(object-contract (m (->r ((x number?) (y boolean?) (z pair?)) number?))))
(test-name "(object-contract (m (->r ((x ...) (y ...) (z ...)) rest-x ... ...)))"
(object-contract (m (->r ((x number?) (y boolean?) (z pair?)) rest-x any? number?))))
))
(report-errs)