/collects/tests/racket/contract-mzlib-test.rktl
Racket | 5143 lines | 23 code | 4 blank | 5116 comment | 1 complexity | b8b4a756178be458bb715034b688ede6 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.1
Large files files are truncated, but you can click here to view the full file
- #|
- This file started out as a copy of contract-test.rktl.
- Its purpose is to try to ensure that the mzlib version
- of the contract library does not change over time.
- |#
- (load-relative "loadtest.rktl")
- (Section 'mzlib/contract)
- (parameterize ([error-print-width 200])
- (let ()
-
- (define contract-namespace
- (let ([n ((dynamic-require 'mzscheme 'make-namespace))])
- (parameterize ([current-namespace n])
- (namespace-require 'mzlib/contract)
- (namespace-require 'mzlib/class)
- (namespace-require 'mzlib/etc)
- (namespace-require '(only mzscheme force delay)))
- n))
-
- (define (contract-eval x)
- (parameterize ([current-namespace contract-namespace])
- (eval x)))
-
- (define-syntax (ctest stx)
- (syntax-case stx ()
- [(_ a ...)
- (syntax (contract-eval `(,test a ...)))]))
- (define (contract-error-test exp exn-ok?)
- (test #t
- 'contract-error-test
- (contract-eval `(with-handlers ((exn? (λ (x) (and (,exn-ok? x) #t)))) ,exp))))
-
- ;; test/spec-passed : symbol sexp -> void
- ;; tests a passing specification
- (define (test/spec-passed name expression)
- (printf "testing: ~s\n" name)
- (contract-eval
- `(,test
- (void)
- (let ([for-each-eval (lambda (l) (for-each eval l))]) for-each-eval)
- (list ',expression '(void))))
- (let/ec k
- (contract-eval
- `(,test (void)
- (let ([for-each-eval (lambda (l) (for-each (λ (x) (eval x)) l))])
- for-each-eval)
- (list ',(rewrite expression k) '(void))))))
-
- (define (test/spec-passed/result name expression result)
- (printf "testing: ~s\n" name)
- (contract-eval `(,test ',result eval ',expression))
- (let/ec k
- (contract-eval
- `(,test
- ',result
- eval
- ',(rewrite expression k)))))
-
- ;; rewrites `contract' to use opt/c. If there is a module definition in there, we skip that test.
- (define (rewrite exp k)
- (let loop ([exp exp])
- (cond
- [(null? exp) null]
- [(list? exp)
- (case (car exp)
- [(contract) `(contract (opt/c ,(loop (cadr exp))) ,@(map loop (cddr exp)))]
- [(module) (k #f)]
- [else (map loop exp)])]
- [(pair? exp) (cons (loop (car exp))
- (loop (cdr exp)))]
- [else exp])))
-
- (define (test/spec-failed name expression blame)
- (let ()
- (define (has-proper-blame? msg)
- (define reg
- (case blame
- [(pos) #rx"^self-contract violation"]
- [(neg) #rx"blaming neg"]
- [else (error 'test/spec-failed "unknown blame name ~s" blame)]))
- (regexp-match? reg msg))
- (printf "testing: ~s\n" name)
- (contract-eval
- `(,thunk-error-test
- (lambda () ,expression)
- (datum->syntax-object #'here ',expression)
- (lambda (exn)
- (and (exn? exn)
- (,has-proper-blame? (exn-message exn))))))
- (let/ec k
- (let ([rewritten (rewrite expression k)])
- (contract-eval
- `(,thunk-error-test
- (lambda () ,rewritten)
- (datum->syntax-object #'here ',rewritten)
- (lambda (exn)
- (and (exn? exn)
- (,has-proper-blame? (exn-message exn))))))))))
-
- (define (test/pos-blame name expression) (test/spec-failed name expression "pos"))
- (define (test/neg-blame name expression) (test/spec-failed name expression "neg"))
-
- (define (test/well-formed stx)
- (contract-eval
- `(,test (void)
- (let ([expand/ret-void (lambda (x) (expand x) (void))]) expand/ret-void)
- ,stx)))
-
- (define (test/no-error sexp)
- (contract-eval
- `(,test (void)
- eval
- '(begin ,sexp (void)))))
-
- (define (test-flat-contract contract pass fail)
- (define (run-three-tests contract)
- (let ([name (if (pair? contract)
- (car contract)
- contract)])
- (contract-eval `(,test #t flat-contract? ,contract))
- (test/spec-failed (format "~a fail" name)
- `(contract ,contract ',fail 'pos 'neg)
- "pos")
- (test/spec-passed/result
- (format "~a pass" name)
- `(contract ,contract ',pass 'pos 'neg)
- pass)))
- (run-three-tests contract)
- (let/ec k (run-three-tests (rewrite contract k))))
- (define-syntax (test-name stx)
- (syntax-case stx ()
- [(_ name contract)
- #'(do-name-test 'name 'contract)]))
-
- (define (do-name-test name contract-exp)
- (printf "~s\n" (list 'do-name-test name contract-exp))
- (contract-eval `(,test ,name contract-name ,contract-exp))
- (contract-eval `(,test ,name contract-name (opt/c ,contract-exp))))
-
- (test/spec-passed
- 'contract-flat1
- '(contract not #f 'pos 'neg))
-
- (test/pos-blame
- 'contract-flat2
- '(contract not #t 'pos 'neg))
-
- (test/no-error '(-> integer? integer?))
- (test/no-error '(-> (flat-contract integer?) (flat-contract integer?)))
- (test/no-error '(-> integer? any))
- (test/no-error '(-> (flat-contract integer?) any))
-
- (test/no-error '(->* (integer?) (integer?)))
- (test/no-error '(->* (integer?) integer? (integer?)))
- (test/no-error '(->* (integer?) integer? any))
- (test/no-error '(->* ((flat-contract integer?)) ((flat-contract integer?))))
- (test/no-error '(->* ((flat-contract integer?)) (flat-contract integer?) ((flat-contract integer?))))
- (test/no-error '(->* ((flat-contract integer?)) (flat-contract integer?) any))
-
- (test/no-error '(->d integer? (lambda (x) integer?)))
- (test/no-error '(->d (flat-contract integer?) (lambda (x) (flat-contract integer?))))
- (test/no-error '(->d* (integer?) (lambda (x) integer?)))
- (test/no-error '(->d* ((flat-contract integer?)) (lambda (x) (flat-contract integer?))))
- (test/no-error '(->d* (integer?) integer? (lambda (x . y) integer?)))
- (test/no-error '(->d* ((flat-contract integer?)) (flat-contract integer?) (lambda (x . y) (flat-contract integer?))))
-
- (test/no-error '(opt-> (integer?) (integer?) integer?))
- (test/no-error '(opt-> ((flat-contract integer?)) ((flat-contract integer?)) (flat-contract integer?)))
- (test/no-error '(opt-> ((flat-contract integer?)) ((flat-contract integer?)) any))
- (test/no-error '(opt->* (integer?) (integer?) (integer?)))
- (test/no-error '(opt->* ((flat-contract integer?)) ((flat-contract integer?)) ((flat-contract integer?))))
- (test/no-error '(opt->* (integer?) (integer?) any))
- (test/no-error '(opt->* ((flat-contract integer?)) ((flat-contract integer?)) any))
-
- (test/no-error '(unconstrained-domain-> number?))
- (test/no-error '(unconstrained-domain-> (flat-contract number?)))
-
- (test/no-error '(listof any/c))
- (test/no-error '(listof (lambda (x) #t)))
-
- (test/spec-passed/result 'any/c '(contract any/c 1 'pos 'neg) 1)
- (test/pos-blame 'none/c '(contract none/c 1 'pos 'neg))
-
- (test/spec-passed
- 'contract-arrow-star0a
- '(contract (->* (integer?) (integer?))
- (lambda (x) x)
- 'pos
- 'neg))
-
- (test/neg-blame
- 'contract-arrow-star0b
- '((contract (->* (integer?) (integer?))
- (lambda (x) x)
- 'pos
- 'neg)
- #f))
-
- (test/pos-blame
- 'contract-arrow-star0c
- '((contract (->* (integer?) (integer?))
- (lambda (x) #f)
- 'pos
- 'neg)
- 1))
-
- (test/spec-passed
- 'contract-arrow-star1
- '(let-values ([(a b) ((contract (->* (integer?) (integer? integer?))
- (lambda (x) (values x x))
- 'pos
- 'neg)
- 2)])
- 1))
-
- (test/neg-blame
- 'contract-arrow-star2
- '((contract (->* (integer?) (integer? integer?))
- (lambda (x) (values x x))
- 'pos
- 'neg)
- #f))
-
- (test/pos-blame
- 'contract-arrow-star3
- '((contract (->* (integer?) (integer? integer?))
- (lambda (x) (values 1 #t))
- 'pos
- 'neg)
- 1))
-
- (test/pos-blame
- 'contract-arrow-star4
- '((contract (->* (integer?) (integer? integer?))
- (lambda (x) (values #t 1))
- 'pos
- 'neg)
- 1))
-
-
- (test/spec-passed
- 'contract-arrow-star5
- '(let-values ([(a b) ((contract (->* (integer?)
- (listof integer?)
- (integer? integer?))
- (lambda (x . y) (values x x))
- 'pos
- 'neg)
- 2)])
- 1))
-
- (test/neg-blame
- 'contract-arrow-star6
- '((contract (->* (integer?) (listof integer?) (integer? integer?))
- (lambda (x . y) (values x x))
- 'pos
- 'neg)
- #f))
-
- (test/pos-blame
- 'contract-arrow-star7
- '((contract (->* (integer?) (listof integer?) (integer? integer?))
- (lambda (x . y) (values 1 #t))
- 'pos
- 'neg)
- 1))
-
- (test/pos-blame
- 'contract-arrow-star8
- '((contract (->* (integer?) (listof integer?) (integer? integer?))
- (lambda (x) (values #t 1))
- 'pos
- 'neg)
- 1))
-
- (test/spec-passed
- 'contract-arrow-star9
- '((contract (->* (integer?) (listof integer?) (integer?))
- (lambda (x . y) 1)
- 'pos
- 'neg)
- 1 2))
-
- (test/neg-blame
- 'contract-arrow-star10
- '((contract (->* (integer?) (listof integer?) (integer?))
- (lambda (x . y) 1)
- 'pos
- 'neg)
- 1 2 'bad))
-
- (test/spec-passed
- 'contract-arrow-star11
- '(let-values ([(a b) ((contract (->* (integer?)
- (listof integer?)
- any)
- (lambda (x . y) (values x x))
- 'pos
- 'neg)
- 2)])
- 1))
-
- (test/pos-blame
- 'contract-arrow-star11b
- '(let-values ([(a b) ((contract (->* (integer?)
- (listof integer?)
- any)
- (lambda (x) (values x x))
- 'pos
- 'neg)
- 2)])
- 1))
-
- (test/neg-blame
- 'contract-arrow-star12
- '((contract (->* (integer?) (listof integer?) any)
- (lambda (x . y) (values x x))
- 'pos
- 'neg)
- #f))
-
- (test/spec-passed
- 'contract-arrow-star13
- '((contract (->* (integer?) (listof integer?) any)
- (lambda (x . y) 1)
- 'pos
- 'neg)
- 1 2))
-
- (test/neg-blame
- 'contract-arrow-star14
- '((contract (->* (integer?) (listof integer?) any)
- (lambda (x . y) 1)
- 'pos
- 'neg)
- 1 2 'bad))
-
- (test/spec-passed
- 'contract-arrow-star15
- '(let-values ([(a b) ((contract (->* (integer?) any)
- (lambda (x) (values x x))
- 'pos
- 'neg)
- 2)])
- 1))
-
- (test/spec-passed
- 'contract-arrow-star16
- '((contract (->* (integer?) any)
- (lambda (x) x)
- 'pos
- 'neg)
- 2))
-
- (test/neg-blame
- 'contract-arrow-star17
- '((contract (->* (integer?) any)
- (lambda (x) (values x x))
- 'pos
- 'neg)
- #f))
- (test/pos-blame
- 'contract-arrow-star-arity-check1
- '(contract (->* (integer?) (listof integer?) (integer? integer?))
- (lambda (x) (values 1 #t))
- 'pos
- 'neg))
-
- (test/pos-blame
- 'contract-arrow-star-arity-check2
- '(contract (->* (integer?) (listof integer?) (integer? integer?))
- (lambda (x y) (values 1 #t))
- 'pos
- 'neg))
-
- (test/pos-blame
- 'contract-arrow-star-arity-check3
- '(contract (->* (integer?) (listof integer?) (integer? integer?))
- (case-lambda [(x y) #f] [(x y . z) #t])
- 'pos
- 'neg))
-
- (test/spec-passed
- 'contract-arrow-star-arity-check4
- '(contract (->* (integer?) (listof integer?) (integer? integer?))
- (case-lambda [(x y) #f] [(x y . z) #t] [(x) #f])
- 'pos
- 'neg))
-
- (test/spec-passed
- 'contract-arrow-values1
- '(let-values ([(a b) ((contract (-> integer? (values integer? integer?))
- (lambda (x) (values x x))
- 'pos
- 'neg)
- 2)])
- 1))
-
- (test/neg-blame
- 'contract-arrow-values2
- '((contract (-> integer? (values integer? integer?))
- (lambda (x) (values x x))
- 'pos
- 'neg)
- #f))
-
- (test/pos-blame
- 'contract-arrow-values3
- '((contract (-> integer? (values integer? integer?))
- (lambda (x) (values 1 #t))
- 'pos
- 'neg)
- 1))
-
- (test/pos-blame
- 'contract-arrow-values4
- '((contract (-> integer? (values integer? integer?))
- (lambda (x) (values #t 1))
- 'pos
- 'neg)
- 1))
- (test/pos-blame
- 'contract-d1
- '(contract (integer? . ->d . (lambda (x) (lambda (y) (= x y))))
- 1
- 'pos
- 'neg))
-
- (test/spec-passed
- 'contract-d2
- '(contract (integer? . ->d . (lambda (x) (lambda (y) (= x y))))
- (lambda (x) x)
- 'pos
- 'neg))
-
- (test/pos-blame
- 'contract-d2
- '((contract (integer? . ->d . (lambda (x) (lambda (y) (= x y))))
- (lambda (x) (+ x 1))
- 'pos
- 'neg)
- 2))
- (test/neg-blame
- 'contract-d3
- '((contract (integer? . ->d . (lambda (x) (let ([z (+ x 1)]) (lambda (y) (= z y)))))
- (lambda (x) (+ x 1))
- 'pos
- 'neg)
- "bad input"))
-
- (test/neg-blame
- 'contract-d4
- '((contract (integer? . ->d . (lambda (x) (lambda (y) (= (+ x 1) y))))
- (lambda (x) (+ x 1))
- 'pos
- 'neg)
- "bad input"))
-
- (test/spec-passed
- 'contract-arrow1
- '(contract (integer? . -> . integer?) (lambda (x) x) 'pos 'neg))
-
- ;; make sure we skip the optimizations
- (test/spec-passed
- 'contract-arrow1b
- '(contract (integer? integer? integer? integer? integer? integer? integer? integer? integer? integer? . -> . integer?)
- (lambda (x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) x1) 'pos 'neg))
-
- (test/pos-blame
- 'contract-arrow2
- '(contract (integer? . -> . integer?) (lambda (x y) x) 'pos 'neg))
-
- (test/neg-blame
- 'contract-arrow3
- '((contract (integer? . -> . integer?) (lambda (x) #f) 'pos 'neg) #t))
-
- (test/pos-blame
- 'contract-arrow4
- '((contract (integer? . -> . integer?) (lambda (x) #f) 'pos 'neg) 1))
- (test/spec-passed
- 'contract-arrow-any1
- '(contract (integer? . -> . any) (lambda (x) x) 'pos 'neg))
-
- (test/pos-blame
- 'contract-arrow-any2
- '(contract (integer? . -> . any) (lambda (x y) x) 'pos 'neg))
-
- (test/neg-blame
- 'contract-arrow-any3
- '((contract (integer? . -> . any) (lambda (x) #f) 'pos 'neg) #t))
- (test/spec-passed
- 'contract-arrow-star-d1
- '((contract (->d* (integer?) (lambda (arg) (lambda (res) (= arg res))))
- (lambda (x) x)
- 'pos
- 'neg)
- 1))
-
- (test/spec-passed
- 'contract-arrow-star-d2
- '(let-values ([(a b)
- ((contract (->d* (integer?) (lambda (arg)
- (values (lambda (res) (= arg res))
- (lambda (res) (= arg res)))))
- (lambda (x) (values x x))
- 'pos
- 'neg)
- 1)])
- 1))
-
- (test/pos-blame
- 'contract-arrow-star-d3
- '((contract (->d* (integer?) (lambda (arg)
- (values (lambda (res) (= arg res))
- (lambda (res) (= arg res)))))
- (lambda (x) (values 1 2))
- 'pos
- 'neg)
- 2))
-
- (test/pos-blame
- 'contract-arrow-star-d4
- '((contract (->d* (integer?) (lambda (arg)
- (values (lambda (res) (= arg res))
- (lambda (res) (= arg res)))))
- (lambda (x) (values 2 1))
- 'pos
- 'neg)
- 2))
-
- (test/spec-passed
- 'contract-arrow-star-d5
- '((contract (->d* ()
- (listof integer?)
- (lambda args (lambda (res) (= (car args) res))))
- (lambda x (car x))
- 'pos
- 'neg)
- 1))
-
- (test/spec-passed
- 'contract-arrow-star-d6
- '((contract (->d* ()
- (listof integer?)
- (lambda args
- (values (lambda (res) (= (car args) res))
- (lambda (res) (= (car args) res)))))
- (lambda x (values (car x) (car x)))
- 'pos
- 'neg)
- 1))
-
- (test/pos-blame
- 'contract-arrow-star-d7
- '((contract (->d* ()
- (listof integer?)
- (lambda args
- (values (lambda (res) (= (car args) res))
- (lambda (res) (= (car args) res)))))
- (lambda x (values 1 2))
- 'pos
- 'neg)
- 2))
-
- (test/pos-blame
- 'contract-arrow-star-d8
- '((contract (->d* ()
- (listof integer?)
- (lambda args
- (values (lambda (res) (= (car args) res))
- (lambda (res) (= (car args) res)))))
- (lambda x (values 2 1))
- 'pos
- 'neg)
- 2))
-
- (test/pos-blame
- 'contract-arrow-star-d8
- '(contract (->d* ()
- (listof integer?)
- (lambda arg
- (values (lambda (res) (= (car arg) res))
- (lambda (res) (= (car arg) res)))))
- (lambda (x) (values 2 1))
- 'pos
- 'neg))
-
- (test/spec-passed
- 'and/c1
- '((contract (and/c (-> (<=/c 100) (<=/c 100))
- (-> (>=/c -100) (>=/c -100)))
- (λ (x) x)
- 'pos
- 'neg)
- 1))
-
- (test/neg-blame
- 'and/c2
- '((contract (and/c (-> (<=/c 100) (<=/c 100))
- (-> (>=/c -100) (>=/c -100)))
- (λ (x) x)
- 'pos
- 'neg)
- 200))
-
- (test/pos-blame
- 'and/c3
- '((contract (and/c (-> (<=/c 100) (<=/c 100))
- (-> (>=/c -100) (>=/c -100)))
- (λ (x) 200)
- 'pos
- 'neg)
- 1))
-
- (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?]) any) (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/c number?) (lambda x 1) 'pos 'neg)))
-
- (test/spec-passed
- '->r12
- '((contract (->r ([x number?]) rest any/c number?) (lambda (x . y) (+ x 1)) 'pos 'neg) 1))
- (test/pos-blame
- '->r13
- '((contract (->r () rest any/c number?) 1 'pos 'neg)))
-
- (test/pos-blame
- '->r14
- '((contract (->r () rest any/c number?) (lambda (x) x) 'pos 'neg)))
-
- (test/neg-blame
- '->r15
- '((contract (->r ([x number?]) rest any/c any) (lambda (x . y) (+ x 1)) 'pos 'neg) #f))
-
- (test/pos-blame
- '->r16
- '((contract (->r ([x number?]) rest any/c (<=/c x)) (lambda (x . y) (+ x 1)) 'pos 'neg) 1))
-
- (test/spec-passed
- '->r17
- '((contract (->r ([x number?] [y (<=/c x)]) rest any/c (<=/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 (<=/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 (<=/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 (<=/c x)) (lambda (y x . z) (+ x 1)) 'pos 'neg) 1 0))
- (test/spec-passed
- '->r21
- '((contract (->r () rst (listof number?) any/c) (lambda w 1) 'pos 'neg) 1))
-
- (test/neg-blame
- '->r22
- '((contract (->r () rst (listof number?) any/c) (lambda w 1) 'pos 'neg) #f))
-
- (test/spec-passed
- '->r-any1
- '((contract (->r () any) (lambda () 1) 'pos 'neg)))
-
- (test/spec-passed
- '->r-any2
- '((contract (->r ([x number?]) any) (lambda (x) (+ x 1)) 'pos 'neg) 1))
- (test/pos-blame
- '->r-any3
- '((contract (->r () any) 1 'pos 'neg)))
-
- (test/pos-blame
- '->r-any4
- '((contract (->r () any) (lambda (x) x) 'pos 'neg)))
-
- (test/neg-blame
- '->r-any5
- '((contract (->r ([x number?]) any) (lambda (x) (+ x 1)) 'pos 'neg) #f))
-
- (test/spec-passed
- '->r-any6
- '((contract (->r ([x number?] [y (<=/c x)]) any) (lambda (x y) (- x 1)) 'pos 'neg) 1 0))
-
- (test/neg-blame
- '->r-any7
- '((contract (->r ([x number?] [y (<=/c x)]) any) (lambda (x y) (+ x 1)) 'pos 'neg) 1 2))
-
- (test/spec-passed
- '->r-any8
- '((contract (->r ([y (<=/c x)] [x number?]) any) (lambda (y x) (- x 1)) 'pos 'neg) 1 2))
-
- (test/neg-blame
- '->r-any9
- '((contract (->r ([y (<=/c x)] [x number?]) any) (lambda (y x) (+ x 1)) 'pos 'neg) 1 0))
-
- (test/spec-passed
- '->r-any10
- '((contract (->r () rest any/c any) (lambda x 1) 'pos 'neg)))
-
- (test/spec-passed
- '->r-any11
- '((contract (->r ([x number?]) rest any/c any) (lambda (x . y) (+ x 1)) 'pos 'neg) 1))
- (test/pos-blame
- '->r-any12
- '((contract (->r () rest any/c any) 1 'pos 'neg)))
-
- (test/pos-blame
- '->r-any13
- '((contract (->r () rest any/c any) (lambda (x) x) 'pos 'neg)))
-
- (test/neg-blame
- '->r-any14
- '((contract (->r ([x number?]) rest any/c any) (lambda (x . y) (+ x 1)) 'pos 'neg) #f))
-
- (test/spec-passed
- '->r-any15
- '((contract (->r ([x number?] [y (<=/c x)]) rest any/c any) (lambda (x y . z) (- x 1)) 'pos 'neg) 1 0))
-
- (test/neg-blame
- '->r-any16
- '((contract (->r ([x number?] [y (<=/c x)]) rest any/c any) (lambda (x y . z) (+ x 1)) 'pos 'neg) 1 2))
-
- (test/spec-passed
- '->r-any17
- '((contract (->r ([y (<=/c x)] [x number?]) rest any/c any) (lambda (y x . z) (- x 1)) 'pos 'neg) 1 2))
-
- (test/neg-blame
- '->r-any18
- '((contract (->r ([y (<=/c x)] [x number?]) rest any/c any) (lambda (y x . z) (+ x 1)) 'pos 'neg) 1 0))
- (test/spec-passed
- '->r-any19
- '((contract (->r () rst (listof number?) any) (lambda w 1) 'pos 'neg) 1))
-
- (test/neg-blame
- '->r-any20
- '((contract (->r () rst (listof number?) any) (lambda w 1) 'pos 'neg) #f))
-
- (test/spec-passed
- '->r-values1
- '((contract (->r () (values [x boolean?] [y number?])) (lambda () (values #t 1)) 'pos 'neg)))
-
- (test/spec-passed
- '->r-values2
- '((contract (->r ([x number?]) (values [x boolean?] [y number?])) (lambda (x) (values #t (+ x 1))) 'pos 'neg) 1))
- (test/pos-blame
- '->r-values3
- '((contract (->r () (values [x boolean?] [y number?])) 1 'pos 'neg)))
-
- (test/pos-blame
- '->r-values4
- '((contract (->r () (values [x boolean?] [y number?])) (lambda (x) x) 'pos 'neg)))
-
- (test/neg-blame
- '->r-values5
- '((contract (->r ([x number?]) (values [y boolean?] [z (<=/c x)])) (lambda (x) (+ x 1)) 'pos 'neg) #f))
-
- (test/pos-blame
- '->r-values6
- '((contract (->r ([x number?]) (values [y boolean?] [z (<=/c x)])) (lambda (x) (values #t (+ x 1))) 'pos 'neg) 1))
-
- (test/spec-passed
- '->r-values7
- '((contract (->r ([x number?] [y (<=/c x)]) (values [z boolean?] [w (<=/c x)]))
- (lambda (x y) (values #t (- x 1)))
- 'pos
- 'neg)
- 1
- 0))
-
- (test/neg-blame
- '->r-values8
- '((contract (->r ([x number?] [y (<=/c x)]) (values [z boolean?] [w (<=/c x)]))
- (lambda (x y) (values #f (+ x 1)))
- 'pos
- 'neg)
- 1
- 2))
-
- (test/spec-passed
- '->r-values9
- '((contract (->r ([y (<=/c x)] [x number?]) (values [z boolean?] [w (<=/c x)]))
- (lambda (y x) (values #f (- x 1)))
- 'pos
- 'neg)
- 1
- 2))
-
- (test/neg-blame
- '->r-values10
- '((contract (->r ([y (<=/c x)] [x number?]) (values [z boolean?] [w (<=/c x)]))
- (lambda (y x) (values #f (+ x 1))) 'pos 'neg)
- 1 0))
-
- (test/spec-passed
- '->r-values11
- '((contract (->r () rest any/c (values [z boolean?] [w number?])) (lambda x (values #f 1)) 'pos 'neg)))
-
- (test/spec-passed
- '->r-values12
- '((contract (->r ([x number?]) rest any/c (values [z boolean?] [w number?]))
- (lambda (x . y) (values #f (+ x 1)))
- 'pos
- 'neg)
- 1))
- (test/pos-blame
- '->r-values13
- '((contract (->r () rest any/c (values [z boolean?] [w number?])) 1 'pos 'neg)))
-
- (test/pos-blame
- '->r-values14
- '((contract (->r () rest any/c (values [z boolean?] [w number?])) (lambda (x) x) 'pos 'neg)))
-
- (test/neg-blame
- '->r-values15
- '((contract (->r ([x number?]) rest any/c (values [z boolean?] [w (<=/c x)]))
- (lambda (x . y) (+ x 1)) 'pos 'neg)
- #f))
-
- (test/pos-blame
- '->r-values16
- '((contract (->r ([x number?]) rest any/c (values [z boolean?] [w (<=/c x)]))
- (lambda (x . y) (values #f (+ x 1))) 'pos 'neg)
- 1))
-
- (test/spec-passed
- '->r-values17
- '((contract (->r ([x number?] [y (<=/c x)]) rest any/c (values [z boolean?] [w (<=/c x)]))
- (lambda (x y . z) (values #f (- x 1))) 'pos 'neg)
- 1 0))
-
- (test/neg-blame
- '->r-values18
- '((contract (->r ([x number?] [y (<=/c x)]) rest any/c (values [z boolean?] [w (<=/c x)]))
- (lambda (x y . z) (values #f (+ x 1))) 'pos 'neg)
- 1 2))
-
- (test/spec-passed
- '->r-values19
- '((contract (->r ([y (<=/c x)] [x number?]) rest any/c (values [z boolean?] [w (<=/c x)]))
- (lambda (y x . z) (values #f (- x 1))) 'pos 'neg)
- 1 2))
-
- (test/neg-blame
- '->r-values20
- '((contract (->r ([y (<=/c x)] [x number?]) rest any/c (values [z boolean?] [w (<=/c x)]))
- (lambda (y x . z) (values #f (+ x 1))) 'pos 'neg)
- 1 0))
- (test/spec-passed
- '->r-values21
- '((contract (->r () rst (listof number?) (values [z boolean?] [w any/c])) (lambda w (values #f 1)) 'pos 'neg) 1))
-
- (test/neg-blame
- '->r-values22
- '((contract (->r () rst (listof number?) (values [z boolean?] [w any/c])) (lambda w (values #f 1)) 'pos 'neg) #f))
- (test/spec-passed
- '->r-values23
- '((contract (->r () (values [x number?] [y (>=/c x)])) (lambda () (values 1 2)) 'pos 'neg)))
-
- (test/pos-blame
- '->r-values24
- '((contract (->r () (values [x number?] [y (>=/c x)])) (lambda () (values 2 1)) 'pos 'neg)))
- (test/spec-passed
- '->r-values25
- '((contract (->r ([x number?]) (values [z number?] [y (>=/c x)])) (lambda (x) (values 1 2)) 'pos 'neg) 1))
-
- (test/pos-blame
- '->r-values26
- '((contract (->r ([x number?]) (values [z number?] [y (>=/c x)])) (lambda (x) (values 2 1)) 'pos 'neg) 4))
-
- (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?]) any) (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/c number?) (lambda x 1) 'pos 'neg)))
-
- (test/spec-passed
- '->r12
- '((contract (->r ([x number?]) rest any/c number?) (lambda (x . y) (+ x 1)) 'pos 'neg) 1))
- (test/pos-blame
- '->r13
- '((contract (->r () rest any/c number?) 1 'pos 'neg)))
-
- (test/pos-blame
- '->r14
- '((contract (->r () rest any/c number?) (lambda (x) x) 'pos 'neg)))
-
- (test/neg-blame
- '->r15
- '((contract (->r ([x number?]) rest any/c any) (lambda (x . y) (+ x 1)) 'pos 'neg) #f))
-
- (test/pos-blame
- '->r16
- '((contract (->r ([x number?]) rest any/c (<=/c x)) (lambda (x . y) (+ x 1)) 'pos 'neg) 1))
-
- (test/spec-passed
- '->r17
- '((contract (->r ([x number?] [y (<=/c x)]) rest any/c (<=/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 (<=/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 (<=/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 (<=/c x)) (lambda (y x . z) (+ x 1)) 'pos 'neg) 1 0))
- (test/spec-passed
- '->r21
- '((contract (->r () rst (listof number?) any/c) (lambda w 1) 'pos 'neg) 1))
-
- (test/neg-blame
- '->r22
- '((contract (->r () rst (listof number?) any/c) (lambda w 1) 'pos 'neg) #f))
-
- (test/spec-passed/result
- '->r23
- '((contract (->r ((i number?) (j (and/c number? (>=/c i)))) number?)
- (λ (i j) 1)
- 'pos
- 'neg)
- 1
- 2)
- 1)
- (test/spec-passed/result
- '->r24
- '((contract (->r ((i number?) (j (and/c number? (>=/c i)))) any)
- (λ (i j) 1)
- 'pos
- 'neg)
- 1
- 2)
- 1)
- (test/spec-passed/result
- '->r25
- '(call-with-values
- (λ ()
- ((contract (->r ((i number?) (j (and/c number? (>=/c i)))) (values [x number?] [y number?]))
- (λ (i j) (values 1 2))
- 'pos
- 'neg)
- 1
- 2))
- list)
- '(1 2))
- (test/spec-passed/result
- '->r26
- '((contract (->r ((i number?) (j (and/c number? (>=/c i)))) rest-args any/c number?)
- (λ (i j . z) 1)
- 'pos
- 'neg)
- 1
- 2)
- 1)
- (test/spec-passed/result
- '->r27
- '((contract (->r ((i number?) (j (and/c number? (>=/c i)))) rest-args any/c any)
- (λ (i j . z) 1)
- 'pos
- 'neg)
- 1
- 2)
- 1)
- (test/spec-passed/result
- '->r28
- '(call-with-values
- (λ ()
- ((contract (->r ((i number?) (j (and/c number? (>=/c i)))) rest-args any/c (values [x number?] [y number?]))
- (λ (i j . z) (values 1 2))
- 'pos
- 'neg)
- 1
- 2))
- list)
- '(1 2))
-
- (test/pos-blame
- '->pp1
- '((contract (->pp ([x number?]) (= x 1) number? result (= x 2))
- (λ (x) x)
- 'pos
- 'neg)
- 1))
-
- (test/neg-blame
- '->pp2
- '((contract (->pp ([x number?]) (= x 1) number? result (= x 2))
- (λ (x) x)
- 'pos
- 'neg)
- 2))
-
- (test/pos-blame
- '->pp3
- '((contract (->pp ([x number?]) (= x 1) number? result (= result 2))
- (λ (x) x)
- 'pos
- 'neg)
- 1))
-
- (test/spec-passed
- '->pp3.5
- '((contract (->pp ([x number?]) (= x 1) number? result (= result 2))
- (λ (x) 2)
- 'pos
- 'neg)
- 1))
-
- (test/neg-blame
- '->pp4
- '((contract (->pp ([x number?]) (= x 1) any)
- (λ (x) x)
- 'pos
- 'neg)
- 2))
-
- (test/neg-blame
- '->pp5
- '((contract (->pp ([x number?]) (= x 1) (values [x number?] [y number?]) (= x y 3))
- (λ (x) (values 4 5))
- 'pos
- 'neg)
- 2))
-
- (test/pos-blame
- '->pp6
- '((contract (->pp ([x number?]) (= x 1) (values [x number?] [y number?]) (= x y 3))
- (λ (x) (values 4 5))
- 'pos
- 'neg)
- 1))
- (test/pos-blame
- '->pp-r1
- '((contract (->pp-rest ([x number?]) rst any/c (= x 1) number? result (= x 2))
- (λ (x . rst) x)
- 'pos
- 'neg)
- 1))
-
- (test/neg-blame
- '->pp-r2
- '((contract (->pp-rest ([x number?]) rst any/c (= x 1) number? result (= x 2))
- (λ (x . rst) x)
- 'pos
- 'neg)
- 2))
-
- (test/pos-blame
- '->pp-r3
- '((contract (->pp-rest ([x number?]) rst any/c (= x 1) number? result (= result 2))
- (λ (x . rst) x)
- 'pos
- 'neg)
- 1))
-
- (test/spec-passed
- '->pp-r3.5
- '((contract (->pp-rest ([x number?]) rst any/c (= x 1) number? result (= result 2))
- (λ (x . rst) 2)
- 'pos
- 'neg)
- 1))
-
- (test/neg-blame
- '->pp-r4
- '((contract (->pp-rest ([x number?]) rst any/c (= x 1) any)
- (λ (x . rst) x)
- 'pos
- 'neg)
- 2))
-
- (test/neg-blame
- '->pp-r5
- '((contract (->pp-rest ([x number?]) rst any/c (= x 1) (values [x number?] [y number?]) (= x y 3))
- (λ (x . rst) (values 4 5))
- 'pos
- 'neg)
- 2))
-
- (test/pos-blame
- '->pp-r6
- '((contract (->pp-rest ([x number?]) rst any/c (= x 1) (values [x number?] [y number?]) (= x y 3))
- (λ (x . rst) (values 4 5))
- 'pos
- 'neg)
- 1))
-
- (test/pos-blame
- 'contract-case->0a
- '(contract (case->)
- (lambda (x) x)
- 'pos
- 'neg))
-
- (test/pos-blame
- 'contract-case->0b
- '(contract (case->)
- (lambda () 1)
- 'pos
- 'neg))
-
- (test/pos-blame
- 'contract-case->0c
- '(contract (case->)
- 1
- 'pos
- 'neg))
-
- (test/spec-passed
- 'contract-case->0d
- '(contract (case->)
- (case-lambda)
- 'pos
- 'neg))
-
- (test/pos-blame
- 'contract-case->1
- '(contract (case-> (integer? integer? . -> . integer?) (integer? . -> . integer?))
- (lambda (x) x)
- 'pos
- 'neg))
-
- (test/pos-blame
- 'contract-case->2
- '((contract (case-> (integer? integer? . -> . integer?) (integer? . -> . integer?))
- (case-lambda
- [(x y) 'case1]
- [(x) 'case2])
- 'pos
- 'neg)
- 1 2))
-
- (test/pos-blame
- 'contract-case->3
- '((contract (case-> (integer? integer? . -> . integer?) (integer? . -> . integer?))
- (case-lambda
- [(x y) 'case1]
- [(x) 'case2])
- 'pos
- 'neg)
- 1))
-
- (test/neg-blame
- 'contract-case->4
- '((contract (case-> (integer? integer? . -> . integer?) (integer? . -> . integer?))
- (case-lambda
- [(x y) 'case1]
- [(x) 'case2])
- 'pos
- 'neg)
- 'a 2))
-
- (test/neg-blame
- 'contract-case->5
- '((contract (case-> (integer? integer? . -> . integer?) (integer? . -> . integer?))
- (case-lambda
- [(x y) 'case1]
- [(x) 'case2])
- 'pos
- 'neg)
- 2 'a))
-
- (test/neg-blame
- 'contract-case->6
- '((contract (case-> (integer? integer? . -> . integer?) (integer? . -> . integer?))
- (case-lambda
- [(x y) 'case1]
- [(x) 'case2])
- 'pos
- 'neg)
- #t))
-
- (test/pos-blame
- 'contract-case->7
- '((contract (case-> (integer? integer? . -> . integer?) (->* (integer?) any/c (boolean?)))
- (lambda x #\a)
- 'pos
- 'neg)
- 1 2))
-
- (test/pos-blame
- 'contract-case->8
- '((contract (case-> (integer? integer? . -> . integer?) (->* (integer?) any/c (boolean?)))
- (lambda x #t)
- 'pos
- 'neg)
- 1 2))
-
- (test/spec-passed
- 'contract-case->8
- '((contract (case-> (integer? integer? . -> . integer?) (->* (integer?) any/c (boolean?)))
- (lambda x 1)
- '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/spec-passed
- 'contract-case->9b
- '((contract (case-> (->r ([x number?]) (<=/c x)) (-> integer? integer? integer?))
- (case-lambda
- [(x) (- x 1)]
- [(x y) x])
- 'pos
- 'neg)
- 1))
-
- (test/pos-blame
- 'contract-case->10
- '((contract (case-> (->r ([x number?]) (<=/c x)))
- (lambda (x) (+ x 1))
- 'pos
- 'neg)
- 1))
-
- (test/pos-blame
- 'contract-case->10b
- '((contract (case-> (->r ([x number?]) (<=/c x)) (-> number? number? number?))
- (case-lambda
- [(x) (+ x 1)]
- [(x y) x])
- 'pos
- 'neg)
- 1))
-
- (test/spec-passed/result
- 'contract-case->11
- '(let ([f
- (contract (case-> (-> char?) (-> integer? boolean?) (-> symbol? input-port? string?))
- (case-lambda
- [() #\a]
- [(x) (= x 0)]
- [(sym port)
- (string-append
- (symbol->string sym)
- (read port))])
- 'pos
- 'neg)])
- (list (f)
- (f 1)
- (f 'x (open-input-string (format "~s" "string")))))
- (list #\a #f "xstring"))
-
- (test/neg-blame
- 'contract-d-protect-shared-state
- '(let ([x 1])
- ((contract ((->d (lambda () (let ([pre-x x]) (lambda (res) (= x pre-x)))))
- . -> .
- (lambda (x) #t))
- (lambda (thnk) (thnk))
- 'pos
- 'neg)
- (lambda () (set! x 2)))))
-
- #;
- (test/neg-blame
- 'combo1
- '(let ([cf (contract (case->
- ((class? . ->d . (lambda (%) (lambda (x) #f))) . -> . void?)
- ((class? . ->d . (lambda (%) (lambda (x) #f))) boolean? . -> . void?))
- (letrec ([c% (class object% (super-instantiate ()))]
- [f
- (case-lambda
- [(class-maker) (f class-maker #t)]
- [(class-maker b)
- (class-maker c%)
- (void)])])
- f)
- 'pos
- 'neg)])
- (cf (lambda (x%) 'going-to-be-bad))))
- (test/spec-passed
- 'unconstrained-domain->1
- '(contract (unconstrained-domain-> number?) (λ (x) x) 'pos 'neg))
- (test/pos-blame
- 'unconstrained-domain->2
- '(contract (unconstrained-domain-> number?) 1 'pos 'neg))
- (test/spec-passed
- 'unconstrained-domain->3
- '((contract (unconstrained-domain-> number?) (λ (x) x) 'pos 'neg) 1))
- (test/pos-blame
- 'unconstrained-domain->4
- '((contract (unconstrained-domain-> number?) (λ (x) x) 'pos 'neg) #f))
-
- (test/spec-passed/result
- 'unconstrained-domain->4
- '((contract (->r ([size natural-number/c]
- [proc (and/c (unconstrained-domain-> number?)
- (λ (p) (procedure-arity-includes? p size)))])
- number?)
- (λ (i f) (apply f (build-list i add1)))
- 'pos
- 'neg)
- 10 +)
- 55)
-
- (test/pos-blame
- 'or/c1
- '(contract (or/c false/c) #t 'pos 'neg))
- (test/spec-passed
- 'or/c2
- '(contract (or/c false/c) #f 'pos 'neg))
- (test/spec-passed
- 'or/c3
- '((contract (or/c (-> integer? integer?)) (lambda (x) x) 'pos 'neg) 1))
-
- (test/neg-blame
- 'or/c4
- '((contract (or/c (-> integer? integer?)) (lambda (x) x) 'pos 'neg) #f))
-
- (test/pos-blame
- 'or/c5
- '((contract (or/c (-> integer? integer?)) (lambda (x) #f) 'pos 'neg) 1))
-
- (test/spec-passed
- 'or/c6
- '(contract (or/c false/c (-> integer? integer?)) #f 'pos 'neg))
-
- (test/spec-passed
- 'or/c7
- '((contract (or/c false/c (-> integer? integer?)) (lambda (x) x) 'pos 'neg) 1))
-
- (test/spec-passed/result
- 'or/c8
- '((contract ((or/c false/c (-> string?)) . -> . any)
- (λ (y) y)
- 'pos
- 'neg)
- #f)
- #f)
- (test/spec-passed/result
- 'or/c9
- '((contract (or/c (-> string?) (-> integer? integer?))
- (λ () "x")
- 'pos
- 'neg))
- "x")
-
- (test/spec-passed/result
- 'or/c10
- '((contract (or/c (-> string?) (-> integer? integer?))
- (λ (x) x)
- 'pos
- 'neg)
- 1)
- 1)
-
- (test/pos-blame
- 'or/c11
- '(contract (or/c (-> string?) (-> integer? integer?))
- 1
- 'pos
- 'neg))
-
- (test/pos-blame
- 'or/c12
- '((contract (or/c (-> string?) (-> integer? integer?))
- 1
- 'pos
- 'neg)
- 'x))
-
- (test/pos-blame
- 'or/c13
- '(contract (or/c not) #t 'pos 'neg))
-
- (test/spec-passed
- 'or/c14
- '(contract (or/c not) #f 'pos 'neg))
-
- (test/spec-passed/result
- 'or/c-not-error-early
- '(begin (or/c (-> integer? integer?) (-> boolean? boolean?))
- 1)
- 1)
-
- (contract-error-test
- #'(contract (or/c (-> integer? integer?) (-> boolean? boolean?))
- (λ (x) x)
- 'pos
- 'neg)
- exn:fail?)
-
- (test/spec-passed/result
- 'or/c-ordering
- '(let ([x '()])
- (contract (or/c (lambda (y) (set! x (cons 2 x)) #f) (lambda (y) (set! x (cons 1 x)) #t))
- 'anything
- 'pos
- 'neg)
- x)
- '(1 2))
-
- (test/spec-passed/result
- 'or/c-ordering2
- '(let ([x '()])
- (contract (or/c (lambda (y) (set! x (cons 2 x)) #t) (lambda (y) (set! x (cons 1 x)) #t))
- 'anything
- 'pos
- 'neg)
- x)
- '(2))
-
- (test/spec-passed/result
- 'and/c-ordering
- '(let ([x '()])
- (contract (and/c (lambda (y) (set! x (cons 2 x)) #t) (lambda (y) (set! x (cons 1 x)) #t))
- 'anything
- 'pos
- 'neg)
- x)
- '(1 2))
-
- (test/spec-passed/result
- 'ho-and/c-ordering
- '(let ([x '()])
- ((contract (and/c (-> (lambda (y) (set! x (cons 1 x)) #t)
- (lambda (y) (set! x (cons 2 x)) #t))
- (-> (lambda (y) (set! x (cons 3 x)) #t)
- (lambda (y) (set! x (cons 4 x)) #t)))
- (λ (x) x)
- 'pos
- 'neg)
- 1)
- (reverse x))
- '(3 1 2 4))
- (test/neg-blame
- 'parameter/c1
- '((contract (parameter/c integer?)
- (make-parameter 1)
- 'pos 'neg)
- #f))
-
- (test/pos-blame
- 'parameter/c1
- '((contract (parameter/c integer?)
- (make-parameter 'not-an-int)
- 'pos 'neg)))
-
- (test/spec-passed
- 'define/contract1
- '(let ()
- (define/contract i integer? 1)
- i))
-
- (test/spec-failed
- 'define/contract2
- '(let ()
- (define/contract i integer? #t)
- i)
- "i")
-
- (test/spec-failed
- 'define/contract3
- '(let ()
- (define/contract i (-> integer? integer?) (lambda (x) #t))
- (i 1))
- "i")
-
- (test/spec-failed
- 'define/contract4
- '(let ()
- (define/contract i (-> integer? integer?) (lambda (x) 1))
- (i #f))
- "<<unknown>>")
-
- (test/spec-failed
- 'define/contract5
- '(let ()
- (define/contract i (-> integer? integer?) (lambda (x) (i #t)))
- (i 1))
- "<<unknown>>")
-
- (test/spec-passed
- 'define/contract6
- '(let ()
- (define/contract contracted-func
- (string? string? . -> . string?)
- (lambda (label t)
- t))
- (contracted-func
- "I'm a string constant with side effects"
- "ans")))
- (test/spec-passed
- 'define/contract7
- '(let ()
- (eval '(module contract-test-suite-define1 mzscheme
- (require mzlib/contract)
- (define/contract x string? "a")
- x))
- (eval '(require 'contract-test-suite-define1))))
-
-
- ;
- ;
- ;
- ; ; ;
- ; ;
- ; ; ; ; ;
- ; ;;; ; ;; ; ;;; ;;; ;;;; ;;; ;;; ; ;; ;;;; ; ; ;;; ;;; ;;;;
- ; ; ; ;; ; ; ; ; ; ; ; ; ; ; ; ;; ; ; ;; ; ; ; ; ;
- ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
- ; ; ; ; ; ; ;;;;;; ; ; ;;;;;; ; ; ; ; ; ; ; ;;;; ; ;
- ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
- ; ; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
- ; ;;; ; ;; ; ;;;; ;;; ;; ;;; ;;; ; ; ;; ; ;;;;; ;;; ;;
- ; ;
- ; ;
- ; ;;
-
- (test/spec-passed
- 'object-contract0
- '(contract (object-contract)
- (new object%)
- 'pos
- 'neg))
- (test/pos-blame
- 'object-contract/field1
- '(contract (object-contract (field x integer?))
- (new object%)
- 'pos
- 'neg))
-
- (test/pos-blame
- 'object-contract/field2
- '(get-field
- x
- (contract (object-contract (field x integer?))
- (new (class object% (field [x #t]) (super-new)))
- 'pos
- 'neg)))
-
- (test/spec-passed/result
- 'object-contract/field3
- '(get-field
- x
- (contract (object-contract (field x integer?))
- (new (class object% (field [x 12]) (super-new)))
- 'pos
- 'neg))
- 12)
-
- (test/pos-blame
- 'object-contract/field4
- '(get-field
- y
- (contract (object-contract (field x boolean?) (field y boolean?))
- (new (class object% (field [x #t] [y 'x]) (super-new)))
- 'pos
- 'neg)))
-
- (test/pos-blame
- 'object-contract/field5
- '(get-field
- x
- (contract (object-contract (field x symbol?) (field y symbol?))
- (new (class object% (field [x #t] [y 'x]) (super-new)))
- 'pos
- 'neg)))
-
- (test/spec-passed/result
- 'object-contract/field6
- '(let ([o (contract (object-contract [m (integer? . -> . integer?)])
- (new (class object% (field [x 1]) (define/public (m y) x) (super-new)))
- 'pos
- 'neg)])
- (list (send o m 2)
- (send/apply o m '(2))
- (let ([x '(2)]) (send o m . x))
- (with-method ([mm (o m)])
- (mm 2))
- (send* o (m 3) (m 4))))
- (list 1 1 1 1 1))
-
- (test/spec-passed/result
- 'object-contract/field7
- '(let ([o (contract (object-contract)
- (new (class object% (field [x 1]) (define/public (m y) x) (super-new)))
- 'pos
- 'neg)])
- (list (send o m 2)
- (send/apply o m '(2))
- (let ([x '(2)]) (send o m . x))
- (with-method ([mm (o m)])
- (mm 2))
- (send* o (m 3) (m 4))))
- (list 1 1 1 1 1))
-
- (tes…
Large files files are truncated, but you can click here to view the full file