..
original commit: 0e9ff6840c15084a7f262a474d011b9010790974
This commit is contained in:
parent
934b4700da
commit
c88f87161c
|
@ -591,9 +591,7 @@
|
||||||
pos-blame
|
pos-blame
|
||||||
a-contract-raw
|
a-contract-raw
|
||||||
name))
|
name))
|
||||||
;((a-contract pos-blame neg-blame src-info) name)
|
(((contract-proc a-contract) pos-blame neg-blame src-info) name))))])))
|
||||||
(((contract-proc a-contract) pos-blame neg-blame src-info) name)
|
|
||||||
)))])))
|
|
||||||
|
|
||||||
;; raise-contract-error : (union syntax #f) symbol symbol string args ... -> alpha
|
;; raise-contract-error : (union syntax #f) symbol symbol string args ... -> alpha
|
||||||
;; doesn't return
|
;; doesn't return
|
||||||
|
@ -1570,7 +1568,7 @@
|
||||||
[else (cons (- n i)
|
[else (cons (- n i)
|
||||||
(loop (- i 1)))]))))))
|
(loop (- i 1)))]))))))
|
||||||
|
|
||||||
;; coerce/select-contract : (union contract? procedure-arity-1) -> contract-proc
|
;; coerce/select-contract : id (union contract? procedure-arity-1) -> contract-proc
|
||||||
;; contract-proc = sym sym stx -> alpha -> alpha
|
;; contract-proc = sym sym stx -> alpha -> alpha
|
||||||
;; returns the procedure for the contract after extracting it from the
|
;; returns the procedure for the contract after extracting it from the
|
||||||
;; struct. Coerces the argument to a flat contract if it is procedure, but first.
|
;; struct. Coerces the argument to a flat contract if it is procedure, but first.
|
||||||
|
@ -1653,8 +1651,10 @@
|
||||||
printable?
|
printable?
|
||||||
symbols
|
symbols
|
||||||
is-a?/c subclass?/c implementation?/c
|
is-a?/c subclass?/c implementation?/c
|
||||||
listof vectorof
|
listof list-immutableof
|
||||||
vector/p cons/p list/p box/p
|
vectorof vector-immutableof vector/p vector-immutable/c
|
||||||
|
cons-immutable/c cons/p list-immutable/c list/p
|
||||||
|
box-immutable/c box/p
|
||||||
mixin-contract make-mixin-contract)
|
mixin-contract make-mixin-contract)
|
||||||
|
|
||||||
(define (union . args)
|
(define (union . args)
|
||||||
|
@ -1877,6 +1877,53 @@
|
||||||
(andmap (lambda (ele) (test-flat-contract p ele))
|
(andmap (lambda (ele) (test-flat-contract p ele))
|
||||||
v)))))
|
v)))))
|
||||||
|
|
||||||
|
(define-syntax (*-immutableof stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(_ predicate? fill type-name name)
|
||||||
|
(syntax
|
||||||
|
(let ([predicate?-name predicate?]
|
||||||
|
[fill-name fill])
|
||||||
|
(lambda (_p)
|
||||||
|
(let ([p (coerce/select-contract name _p)])
|
||||||
|
(make-contract
|
||||||
|
(lambda (pos neg src-info)
|
||||||
|
(let ([p-app (p pos neg src-info)])
|
||||||
|
(lambda (val)
|
||||||
|
(unless (predicate?-name val)
|
||||||
|
(raise-contract-error
|
||||||
|
src-info
|
||||||
|
pos
|
||||||
|
neg
|
||||||
|
"expected <~a>, given: ~e"
|
||||||
|
'type-name
|
||||||
|
val))
|
||||||
|
(fill-name p-app val)))))))))]))
|
||||||
|
|
||||||
|
(define (map-immutable f lst)
|
||||||
|
(let loop ([lst lst])
|
||||||
|
(cond
|
||||||
|
[(pair? lst)
|
||||||
|
(cons-immutable (f (car lst))
|
||||||
|
(loop (cdr lst)))]
|
||||||
|
[(null? lst) null])))
|
||||||
|
|
||||||
|
(define (immutable-list? lst)
|
||||||
|
(cond
|
||||||
|
[(and (pair? lst)
|
||||||
|
(immutable? lst))
|
||||||
|
(immutable-list? (cdr lst))]
|
||||||
|
[(null? lst) #t]
|
||||||
|
[else #f]))
|
||||||
|
|
||||||
|
(define list-immutableof
|
||||||
|
(*-immutableof immutable-list? map-immutable immutable-list list-immutableof))
|
||||||
|
|
||||||
|
(define vector-immutableof
|
||||||
|
(*-immutableof (lambda (x) (and (vector? x) (immutable? x)))
|
||||||
|
(lambda (f v) (vector->immutable-vector (list->vector (map f (vector->list v)))))
|
||||||
|
immutable-vector
|
||||||
|
vector-immutableof))
|
||||||
|
|
||||||
(define (vectorof p)
|
(define (vectorof p)
|
||||||
(unless (flat-contract/predicate? p)
|
(unless (flat-contract/predicate? p)
|
||||||
(error 'vectorof "expected a flat contract or procedure of arity 1 as argument, got: ~e" p))
|
(error 'vectorof "expected a flat contract or procedure of arity 1 as argument, got: ~e" p))
|
||||||
|
@ -1919,7 +1966,7 @@
|
||||||
(define (cons/p hdp tlp)
|
(define (cons/p hdp tlp)
|
||||||
(unless (and (flat-contract/predicate? hdp)
|
(unless (and (flat-contract/predicate? hdp)
|
||||||
(flat-contract/predicate? tlp))
|
(flat-contract/predicate? tlp))
|
||||||
(error 'cons/p "expected two flat contracts, got: ~e and ~e" hdp tlp))
|
(error 'cons/p "expected two flat contracts or procedures of arity 1, got: ~e and ~e" hdp tlp))
|
||||||
(flat-named-contract
|
(flat-named-contract
|
||||||
(build-compound-type-name "cons/p" hdp tlp)
|
(build-compound-type-name "cons/p" hdp tlp)
|
||||||
(lambda (x)
|
(lambda (x)
|
||||||
|
@ -1927,6 +1974,75 @@
|
||||||
(test-flat-contract hdp (car x))
|
(test-flat-contract hdp (car x))
|
||||||
(test-flat-contract tlp (cdr x))))))
|
(test-flat-contract tlp (cdr x))))))
|
||||||
|
|
||||||
|
(define-syntax (*-immutable/c stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(_ predicate? constructor (arb? selectors ...) type-name name)
|
||||||
|
(eq? #f (syntax-object->datum (syntax arb?)))
|
||||||
|
(with-syntax ([(params ...) (generate-temporaries (syntax (selectors ...)))]
|
||||||
|
[(p-apps ...) (generate-temporaries (syntax (selectors ...)))]
|
||||||
|
[(procs ...) (generate-temporaries (syntax (selectors ...)))]
|
||||||
|
[(selector-names ...) (generate-temporaries (syntax (selectors ...)))])
|
||||||
|
(syntax
|
||||||
|
(let ([predicate?-name predicate?]
|
||||||
|
[constructor-name constructor]
|
||||||
|
[selector-names selectors] ...)
|
||||||
|
(lambda (params ...)
|
||||||
|
(let ([procs (coerce/select-contract name params)] ...)
|
||||||
|
(make-contract
|
||||||
|
(lambda (pos neg src-info)
|
||||||
|
(let ([p-apps (procs pos neg src-info)] ...)
|
||||||
|
(lambda (v)
|
||||||
|
(if (and (immutable? v)
|
||||||
|
(predicate?-name v))
|
||||||
|
(constructor-name (p-apps (selector-names v)) ...)
|
||||||
|
(raise-contract-error
|
||||||
|
src-info
|
||||||
|
pos
|
||||||
|
neg
|
||||||
|
"expected <~a>, given: ~e"
|
||||||
|
'type-name
|
||||||
|
v)))))))))))]
|
||||||
|
[(_ predicate? constructor (arb? selector) correct-size type-name name)
|
||||||
|
(eq? #t (syntax-object->datum (syntax arb?)))
|
||||||
|
(syntax
|
||||||
|
(let ([predicate?-name predicate?]
|
||||||
|
[constructor-name constructor]
|
||||||
|
[selector-name selector])
|
||||||
|
(lambda params
|
||||||
|
(let ([procs (map (lambda (param) (coerce/select-contract name param)) params)])
|
||||||
|
(make-contract
|
||||||
|
(lambda (pos neg src-info)
|
||||||
|
(let ([p-apps (map (lambda (proc) (proc pos neg src-info)) procs)]
|
||||||
|
[count (length params)])
|
||||||
|
(lambda (v)
|
||||||
|
(if (and (immutable? v)
|
||||||
|
(predicate?-name v)
|
||||||
|
(correct-size count v))
|
||||||
|
(apply constructor-name
|
||||||
|
(let loop ([p-apps p-apps]
|
||||||
|
[i 0])
|
||||||
|
(cond
|
||||||
|
[(null? p-apps) null]
|
||||||
|
[else (let ([p-app (car p-apps)])
|
||||||
|
(cons (p-app (selector-name v i))
|
||||||
|
(loop (cdr p-apps) (+ i 1))))])))
|
||||||
|
(raise-contract-error
|
||||||
|
src-info
|
||||||
|
pos
|
||||||
|
neg
|
||||||
|
"expected <~a>, given: ~e"
|
||||||
|
'type-name
|
||||||
|
v))))))))))]))
|
||||||
|
|
||||||
|
(define cons-immutable/c (*-immutable/c pair? cons (#f car cdr) immutable-cons cons-immutable/c))
|
||||||
|
(define box-immutable/c (*-immutable/c box? box (#f unbox) immutable-box box-immutable/c))
|
||||||
|
(define vector-immutable/c (*-immutable/c vector?
|
||||||
|
vector
|
||||||
|
(#t (lambda (v i) (vector-ref v i)))
|
||||||
|
(lambda (n v) (= n (vector-length v)))
|
||||||
|
immutable-vector
|
||||||
|
vector-immutable/c))
|
||||||
|
|
||||||
(define (list/p . args)
|
(define (list/p . args)
|
||||||
(unless (andmap flat-contract/predicate? args)
|
(unless (andmap flat-contract/predicate? args)
|
||||||
(error 'list/p "expected flat contracts, got: ~a"
|
(error 'list/p "expected flat contracts, got: ~a"
|
||||||
|
@ -1939,9 +2055,27 @@
|
||||||
(loop (cdr args)))]))))
|
(loop (cdr args)))]))))
|
||||||
(let loop ([args args])
|
(let loop ([args args])
|
||||||
(cond
|
(cond
|
||||||
[(null? args) null?]
|
[(null? args) (flat-contract null?)]
|
||||||
[else (cons/p (car args) (loop (cdr args)))])))
|
[else (cons/p (car args) (loop (cdr args)))])))
|
||||||
|
|
||||||
|
(define (list-immutable/c . args)
|
||||||
|
(unless (andmap (lambda (x) (or (contract? x)
|
||||||
|
(and (procedure? x)
|
||||||
|
(procedure-arity-includes? x 1))))
|
||||||
|
args)
|
||||||
|
(error 'list/p "expected flat contracts or procedures of arity 1, got: ~a"
|
||||||
|
(let loop ([args args])
|
||||||
|
(cond
|
||||||
|
[(null? args) ""]
|
||||||
|
[(null? (cdr args)) (format "~e" (car args))]
|
||||||
|
[else (string-append
|
||||||
|
(format "~e " (car args))
|
||||||
|
(loop (cdr args)))]))))
|
||||||
|
(let loop ([args args])
|
||||||
|
(cond
|
||||||
|
[(null? args) (flat-contract null?)]
|
||||||
|
[else (cons-immutable/c (car args) (loop (cdr args)))])))
|
||||||
|
|
||||||
(define (syntax/p c)
|
(define (syntax/p c)
|
||||||
(unless (flat-contract/predicate? c)
|
(unless (flat-contract/predicate? c)
|
||||||
(error 'syntax/p "expected argument of type <flat-contract> or procedure of arity 1, got ~e" c))
|
(error 'syntax/p "expected argument of type <flat-contract> or procedure of arity 1, got ~e" c))
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
;; test/spec-failed : symbol sexp string -> void
|
;; test/spec-failed : symbol sexp string -> void
|
||||||
;; tests a failing specification with blame assigned to `blame'
|
;; tests a failing specification with blame assigned to `blame'
|
||||||
|
#;
|
||||||
(define (test/spec-failed name expression blame)
|
(define (test/spec-failed name expression blame)
|
||||||
(define (ensure-contract-failed x)
|
(define (ensure-contract-failed x)
|
||||||
(let ([result (with-handlers ([(lambda (x) (and (not-break-exn? x) (exn? x)))
|
(let ([result (with-handlers ([(lambda (x) (and (not-break-exn? x) (exn? x)))
|
||||||
|
@ -39,6 +40,22 @@
|
||||||
ensure-contract-failed
|
ensure-contract-failed
|
||||||
expression))
|
expression))
|
||||||
|
|
||||||
|
(define (test/spec-failed name expression blame)
|
||||||
|
(define (has-proper-blame? msg)
|
||||||
|
(equal?
|
||||||
|
blame
|
||||||
|
(cond
|
||||||
|
[(regexp-match ": ([^ ]*) broke" msg) => cadr]
|
||||||
|
[(regexp-match "([^ ]+): .* does not imply" msg) => cadr]
|
||||||
|
[else (format "no blame in error message: \"~a\"" msg)])))
|
||||||
|
(printf "testing: ~s\n" name)
|
||||||
|
(thunk-error-test
|
||||||
|
(lambda () (eval expression))
|
||||||
|
(datum->syntax-object #'here expression)
|
||||||
|
(lambda (exn)
|
||||||
|
(and (exn? exn)
|
||||||
|
(has-good-blame? (exn-message exn))))))
|
||||||
|
|
||||||
(define (test/well-formed stx)
|
(define (test/well-formed stx)
|
||||||
(test (void)
|
(test (void)
|
||||||
(let ([expand/ret-void (lambda (x) (expand x) (void))]) expand/ret-void)
|
(let ([expand/ret-void (lambda (x) (expand x) (void))]) expand/ret-void)
|
||||||
|
@ -96,6 +113,7 @@
|
||||||
(test/no-error '(opt->* ((flat-contract integer?)) ((flat-contract integer?)) ((flat-contract integer?))))
|
(test/no-error '(opt->* ((flat-contract integer?)) ((flat-contract integer?)) ((flat-contract integer?))))
|
||||||
|
|
||||||
(test/no-error '(listof any?))
|
(test/no-error '(listof any?))
|
||||||
|
(test/no-error '(listof (lambda (x) #t)))
|
||||||
|
|
||||||
(test/spec-passed
|
(test/spec-passed
|
||||||
'contract-arrow-star0a
|
'contract-arrow-star0a
|
||||||
|
@ -873,6 +891,309 @@
|
||||||
"c-neg")
|
"c-neg")
|
||||||
|#
|
|#
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable1
|
||||||
|
'(let ([ct (contract (list-immutableof (boolean? . -> . boolean?))
|
||||||
|
#f
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((car ct) 1))
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable2
|
||||||
|
'(let ([ct (contract (list-immutableof (boolean? . -> . boolean?))
|
||||||
|
(list (lambda (x) x))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((car ct) 1))
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable3
|
||||||
|
'(let ([ct (contract (list-immutableof (number? . -> . boolean?))
|
||||||
|
(list-immutable (lambda (x) 1))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((car ct) #f))
|
||||||
|
"neg")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable4
|
||||||
|
'(let ([ct (contract (list-immutableof (number? . -> . boolean?))
|
||||||
|
(list-immutable (lambda (x) 1))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((car ct) 1))
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'immutable5
|
||||||
|
'(let ([ct (contract (list-immutableof (number? . -> . boolean?))
|
||||||
|
(list-immutable (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((car ct) 1)))
|
||||||
|
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable6
|
||||||
|
'(contract (cons-immutable/c (boolean? . -> . boolean?) (boolean? . -> . boolean?))
|
||||||
|
#f
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable7
|
||||||
|
'(contract (cons-immutable/c (boolean? . -> . boolean?) (boolean? . -> . boolean?))
|
||||||
|
(cons (lambda (x) x) (lambda (x) x))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable8
|
||||||
|
'(let ([ct (contract (cons-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(cons-immutable (lambda (x) 1) (lambda (x) 1))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((car ct) #f))
|
||||||
|
"neg")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable9
|
||||||
|
'(let ([ct (contract (cons-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(cons-immutable (lambda (x) 1) (lambda (x) 1))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((cdr ct) #f))
|
||||||
|
"neg")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable10
|
||||||
|
'(let ([ct (contract (cons-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(cons-immutable (lambda (x) 1) (lambda (x) 1))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((car ct) 1))
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable11
|
||||||
|
'(let ([ct (contract (cons-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(cons-immutable (lambda (x) 1) (lambda (x) 1))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((cdr ct) 1))
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'immutable12
|
||||||
|
'(let ([ct (contract (cons-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(cons-immutable (lambda (x) #t) (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((car ct) 1)))
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'immutable13
|
||||||
|
'(let ([ct (contract (cons-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(cons-immutable (lambda (x) #t) (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((cdr ct) 1)))
|
||||||
|
|
||||||
|
(test/spec-passed/result
|
||||||
|
'immutable14
|
||||||
|
'(contract (cons-immutable/c number? boolean?)
|
||||||
|
(cons-immutable 1 #t)
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
(cons-immutable 1 #t))
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable15
|
||||||
|
'(contract (list-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
#f
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable16
|
||||||
|
'(contract (list-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(list (lambda (x) #t) (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable17
|
||||||
|
'(contract (list-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(list-immutable (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'immutable18
|
||||||
|
'(contract (list-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(list-immutable (lambda (x) #t) (lambda (x) #t) (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'immutable19
|
||||||
|
'(let ([ctc (contract (list-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(list-immutable (lambda (x) #t) (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
(for-each (lambda (x) (x 1)) ctc)))
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'vector-immutable1
|
||||||
|
'(contract (vector-immutableof (boolean? . -> . boolean?))
|
||||||
|
#f
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'vector-immutable2
|
||||||
|
'(contract (vector-immutableof (boolean? . -> . boolean?))
|
||||||
|
(vector (lambda (x) x))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'vector-immutable3
|
||||||
|
'(let ([ct (contract (vector-immutableof (number? . -> . boolean?))
|
||||||
|
(vector->immutable-vector (vector (lambda (x) 1)))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((vector-ref ct 0) #f))
|
||||||
|
"neg")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'vector-immutable4
|
||||||
|
'(let ([ct (contract (vector-immutableof (number? . -> . boolean?))
|
||||||
|
(vector->immutable-vector (vector (lambda (x) 1)))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((vector-ref ct 0) 1))
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'vector-immutable5
|
||||||
|
'(let ([ct (contract (vector-immutableof (number? . -> . boolean?))
|
||||||
|
(vector->immutable-vector (vector (lambda (x) #t)))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((vector-ref ct 0) 1)))
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'vector-immutable6
|
||||||
|
'(contract (vector-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
#f
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'vector-immutable7
|
||||||
|
'(contract (vector-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(vector (lambda (x) #t) (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'vector-immutable8
|
||||||
|
'(contract (vector-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(vector->immutable-vector (vector (lambda (x) #t)))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'vector-immutable9
|
||||||
|
'(contract (vector-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(vector->immutable-vector (vector (lambda (x) #t) (lambda (x) #t) (lambda (x) #t)))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'vector-immutable10
|
||||||
|
'(let ([ctc (contract (vector-immutable/c (number? . -> . boolean?) (number? . -> . boolean?))
|
||||||
|
(vector->immutable-vector (vector (lambda (x) #t) (lambda (x) #t)))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((vector-ref ctc 0) 1)
|
||||||
|
((vector-ref ctc 1) 1)))
|
||||||
|
|
||||||
|
(test/spec-passed/result
|
||||||
|
'vector-immutable11
|
||||||
|
'(contract (vector-immutable/c number? boolean?)
|
||||||
|
(vector->immutable-vector (vector 1 #t))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
(vector->immutable-vector (vector 1 #t)))
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'box-immutable1
|
||||||
|
'(contract (box-immutable/c (number? . -> . boolean?))
|
||||||
|
#f
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'box-immutable2
|
||||||
|
'(contract (box-immutable/c (number? . -> . boolean?))
|
||||||
|
(box (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'box-immutable3
|
||||||
|
'(let ([ctc (contract (box-immutable/c (number? . -> . boolean?))
|
||||||
|
(box-immutable (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((unbox ctc) #f))
|
||||||
|
"neg")
|
||||||
|
|
||||||
|
(test/spec-failed
|
||||||
|
'box-immutable4
|
||||||
|
'(let ([ctc (contract (box-immutable/c (number? . -> . boolean?))
|
||||||
|
(box-immutable (lambda (x) 1))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((unbox ctc) 1))
|
||||||
|
"pos")
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'box-immutable5
|
||||||
|
'(let ([ctc (contract (box-immutable/c (number? . -> . boolean?))
|
||||||
|
(box-immutable (lambda (x) #t))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
((unbox ctc) 1)))
|
||||||
|
|
||||||
|
(test/spec-passed/result
|
||||||
|
'vector-immutable6
|
||||||
|
'(contract (box-immutable/c boolean?)
|
||||||
|
(box-immutable #t)
|
||||||
|
'pos
|
||||||
|
'neg)
|
||||||
|
(box-immutable #t))
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; Flat Contract Tests ;;
|
;; Flat Contract Tests ;;
|
||||||
|
@ -922,15 +1243,32 @@
|
||||||
|
|
||||||
(test-flat-contract '(listof boolean?) (list #t #f) (list #f 3 #t))
|
(test-flat-contract '(listof boolean?) (list #t #f) (list #f 3 #t))
|
||||||
(test-flat-contract '(listof any?) (list #t #f) 3)
|
(test-flat-contract '(listof any?) (list #t #f) 3)
|
||||||
|
;(test-flat-contract '(list-immutableof boolean?) (list-immutable #t #f) (list-immutable #f 3 #t))
|
||||||
|
;(test-flat-contract '(list-immutableof any?) (list-immutable #t #f) 3)
|
||||||
|
;(test-flat-contract '(list-immutableof boolean?) (list-immutable) (list))
|
||||||
|
;(test-flat-contract '(list-immutableof (-> boolean? boolean?)) (list-immutable (lambda (x) x)) (list (lambda (x) x)))
|
||||||
|
|
||||||
(test-flat-contract '(vectorof boolean?) (vector #t #f) (vector #f 3 #t))
|
(test-flat-contract '(vectorof boolean?) (vector #t #f) (vector #f 3 #t))
|
||||||
(test-flat-contract '(vectorof any?) (vector #t #f) 3)
|
(test-flat-contract '(vectorof any?) (vector #t #f) 3)
|
||||||
|
|
||||||
(test-flat-contract '(vector/p boolean? (flat-contract integer?)) (vector #t 1) (vector 1 #f))
|
(test-flat-contract '(vector/p boolean? (flat-contract integer?)) (vector #t 1) (vector 1 #f))
|
||||||
(test-flat-contract '(vector/p boolean? (flat-contract integer?)) (vector #t 1) #f)
|
(test-flat-contract '(vector/p boolean? (flat-contract integer?)) (vector #t 1) #f)
|
||||||
|
|
||||||
(test-flat-contract '(cons/p boolean? (flat-contract integer?)) (cons #t 1) (cons 1 #f))
|
(test-flat-contract '(cons/p boolean? (flat-contract integer?)) (cons #t 1) (cons 1 #f))
|
||||||
(test-flat-contract '(cons/p boolean? (flat-contract integer?)) (cons #t 1) #f)
|
(test-flat-contract '(cons/p boolean? (flat-contract integer?)) (cons #t 1) #f)
|
||||||
(test-flat-contract '(list/p boolean? (flat-contract integer?)) (list #t 1) (list 1 #f))
|
(test-flat-contract '(list/p boolean? (flat-contract integer?)) (list #t 1) (list 1 #f))
|
||||||
(test-flat-contract '(list/p boolean? (flat-contract integer?)) (list #t 1) #f)
|
(test-flat-contract '(list/p boolean? (flat-contract integer?)) (list #t 1) #f)
|
||||||
|
|
||||||
|
;(test-flat-contract '(cons-immutable/c boolean? (flat-contract integer?)) (cons-immutable #t 1) (cons-immutable 1 #f))
|
||||||
|
;(test-flat-contract '(cons-immutable/c boolean? (flat-contract integer?)) (cons-immutable #t 1) #f)
|
||||||
|
;(test-flat-contract '(cons-immutable/c boolean? (flat-contract integer?)) (cons-immutable #t 1) (cons #t 1))
|
||||||
|
;(test-flat-contract '(cons-immutable/c (-> boolean? boolean?) integer?) (cons-immutable (lambda (x) x) 1) #f)
|
||||||
|
|
||||||
|
;(test-flat-contract '(list-immutable/c boolean? (flat-contract integer?)) (list-immutable #t 1) (list-immutable 1 #f))
|
||||||
|
;(test-flat-contract '(list-immutable/c boolean? (flat-contract integer?)) (list-immutable #t 1) #f)
|
||||||
|
;(test-flat-contract '(list-immutable/c boolean? (flat-contract integer?)) (list-immutable #t 1) (list #t 1))
|
||||||
|
;(test-flat-contract '(list-immutable/c (-> boolean? boolean?) integer?) (list-immutable (lambda (x) x) 1) #f)
|
||||||
|
|
||||||
(test-flat-contract '(box/p boolean?) (box #f) (box 1))
|
(test-flat-contract '(box/p boolean?) (box #f) (box 1))
|
||||||
(test-flat-contract '(box/p (flat-contract boolean?)) (box #t) #f)
|
(test-flat-contract '(box/p (flat-contract boolean?)) (box #t) #f)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user