converted the contract test suite to use scheme/base and fixed bugs along the way
svn: r8032 original commit: 116241eee537922a4fc01ddbad0d100b40e4ebb0
This commit is contained in:
parent
f0aa868ce8
commit
34c28b9080
|
@ -51,12 +51,17 @@
|
|||
(define (check->* f arity-count)
|
||||
(unless (procedure? f)
|
||||
(error 'object-contract "expected last argument of ->d* to be a procedure, got ~e" f))
|
||||
(unless (procedure-arity-includes? f arity-count)
|
||||
(unless (and (procedure-arity-includes? f arity-count)
|
||||
(no-mandatory-keywords? f))
|
||||
(error 'object-contract
|
||||
"expected last argument of ->d* to be a procedure that accepts ~a arguments, got ~e"
|
||||
arity-count
|
||||
f)))
|
||||
|
||||
(define (no-mandatory-keywords? f)
|
||||
(let-values ([(mandatory optional) (procedure-keywords f)])
|
||||
(null? mandatory)))
|
||||
|
||||
(define (check->*/more f arity-count)
|
||||
(unless (procedure? f)
|
||||
(error 'object-contract "expected last argument of ->d* to be a procedure, got ~e" f))
|
||||
|
@ -86,19 +91,21 @@
|
|||
|
||||
(define (check-procedure val dom-length src-info blame orig-str)
|
||||
(unless (and (procedure? val)
|
||||
(procedure-arity-includes? val dom-length))
|
||||
(and (procedure-arity-includes? val dom-length)
|
||||
(no-mandatory-keywords? val)))
|
||||
(raise-contract-error
|
||||
val
|
||||
src-info
|
||||
blame
|
||||
orig-str
|
||||
"expected a procedure that accepts ~a arguments, given: ~e"
|
||||
"expected a procedure that accepts ~a arguments without any keywords, given: ~e"
|
||||
dom-length
|
||||
val)))
|
||||
|
||||
(define ((check-procedure? arity) val)
|
||||
(and (procedure? val)
|
||||
(procedure-arity-includes? val arity)))
|
||||
(procedure-arity-includes? val arity)
|
||||
(no-mandatory-keywords? val)))
|
||||
|
||||
(define ((check-procedure/more? arity) val)
|
||||
(and (procedure? val)
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
#lang scheme/base
|
||||
(require (lib "etc.ss")
|
||||
"contract-guts.ss"
|
||||
|
||||
#|
|
||||
|
||||
add mandatory keywords to ->, ->* ->d ->d*
|
||||
|
||||
Add both optional and mandatory keywords to opt-> and friends.
|
||||
(Update opt-> so that it doesn't use case-lambda anymore.)
|
||||
|
||||
|#
|
||||
|
||||
(require "contract-guts.ss"
|
||||
"contract-arr-checks.ss"
|
||||
"contract-opt.ss")
|
||||
(require (for-syntax scheme/base)
|
||||
|
@ -90,7 +99,8 @@
|
|||
(procedure-accepts-and-more? x l)))
|
||||
(λ (x)
|
||||
(and (procedure? x)
|
||||
(procedure-arity-includes? x l)))))))
|
||||
(procedure-arity-includes? x l)
|
||||
(no-mandatory-keywords? x)))))))
|
||||
(stronger-prop
|
||||
(λ (this that)
|
||||
(and (->? that)
|
||||
|
@ -124,43 +134,7 @@
|
|||
[else (apply build-compound-type-name 'values rngs)])])
|
||||
(apply build-compound-type-name '-> (append doms/c (list rng-name))))]))
|
||||
|
||||
(define-syntax-set (-> ->*)
|
||||
(define (->/proc stx)
|
||||
(let-values ([(stx _1 _2) (->/proc/main stx)])
|
||||
stx))
|
||||
|
||||
;; ->/proc/main : syntax -> (values syntax[contract-record] syntax[args/lambda-body] syntax[names])
|
||||
(define (->/proc/main stx)
|
||||
(let-values ([(dom-names rng-names dom-ctcs rng-ctcs inner-args/body use-any?) (->-helper stx)])
|
||||
(with-syntax ([(args body) inner-args/body])
|
||||
(with-syntax ([(dom-names ...) dom-names]
|
||||
[(rng-names ...) rng-names]
|
||||
[(dom-ctcs ...) dom-ctcs]
|
||||
[(rng-ctcs ...) rng-ctcs]
|
||||
[inner-lambda
|
||||
(add-name-prop
|
||||
(syntax-local-infer-name stx)
|
||||
(syntax (lambda args body)))]
|
||||
[use-any? use-any?])
|
||||
(with-syntax ([outer-lambda
|
||||
(let* ([lst (syntax->list #'args)]
|
||||
[len (and lst (length lst))])
|
||||
(syntax
|
||||
(lambda (chk dom-names ... rng-names ...)
|
||||
(lambda (val)
|
||||
(chk val)
|
||||
inner-lambda))))])
|
||||
(values
|
||||
(syntax (build--> '->
|
||||
(list dom-ctcs ...)
|
||||
#f
|
||||
(list rng-ctcs ...)
|
||||
use-any?
|
||||
outer-lambda))
|
||||
inner-args/body
|
||||
(syntax (dom-names ... rng-names ...))))))))
|
||||
|
||||
(define (->-helper stx)
|
||||
(define-for-syntax (->-helper stx)
|
||||
(syntax-case* stx (-> any values) module-or-top-identifier=?
|
||||
[(-> doms ... any)
|
||||
(with-syntax ([(args ...) (generate-temporaries (syntax (doms ...)))]
|
||||
|
@ -196,12 +170,43 @@
|
|||
(syntax ((args ...) (rng-ctc (val (dom-ctc args) ...))))
|
||||
#f))]))
|
||||
|
||||
(define (->*/proc stx)
|
||||
(let-values ([(stx _1 _2) (->*/proc/main stx)])
|
||||
;; ->/proc/main : syntax -> (values syntax[contract-record] syntax[args/lambda-body] syntax[names])
|
||||
(define-for-syntax (->/proc/main stx)
|
||||
(let-values ([(dom-names rng-names dom-ctcs rng-ctcs inner-args/body use-any?) (->-helper stx)])
|
||||
(with-syntax ([(args body) inner-args/body])
|
||||
(with-syntax ([(dom-names ...) dom-names]
|
||||
[(rng-names ...) rng-names]
|
||||
[(dom-ctcs ...) dom-ctcs]
|
||||
[(rng-ctcs ...) rng-ctcs]
|
||||
[inner-lambda
|
||||
(add-name-prop
|
||||
(syntax-local-infer-name stx)
|
||||
(syntax (lambda args body)))]
|
||||
[use-any? use-any?])
|
||||
(with-syntax ([outer-lambda
|
||||
(let* ([lst (syntax->list #'args)]
|
||||
[len (and lst (length lst))])
|
||||
(syntax
|
||||
(lambda (chk dom-names ... rng-names ...)
|
||||
(lambda (val)
|
||||
(chk val)
|
||||
inner-lambda))))])
|
||||
(values
|
||||
(syntax (build--> '->
|
||||
(list dom-ctcs ...)
|
||||
#f
|
||||
(list rng-ctcs ...)
|
||||
use-any?
|
||||
outer-lambda))
|
||||
inner-args/body
|
||||
(syntax (dom-names ... rng-names ...))))))))
|
||||
|
||||
(define-syntax (-> stx)
|
||||
(let-values ([(stx _1 _2) (->/proc/main stx)])
|
||||
stx))
|
||||
|
||||
;; ->/proc/main : syntax -> (values syntax[contract-record] syntax[args/lambda-body] syntax[names])
|
||||
(define (->*/proc/main stx)
|
||||
;; ->/proc/main : syntax -> (values syntax[contract-record] syntax[args/lambda-body] syntax[names])
|
||||
(define-for-syntax (->*/proc/main stx)
|
||||
(syntax-case* stx (->* any) module-or-top-identifier=?
|
||||
[(->* (doms ...) any)
|
||||
(->/proc/main (syntax (-> doms ... any)))]
|
||||
|
@ -261,7 +266,11 @@
|
|||
#t
|
||||
outer-lambda))
|
||||
inner-args/body
|
||||
(syntax (dom-x ... rst-x)))))))])))
|
||||
(syntax (dom-x ... rst-x)))))))]))
|
||||
|
||||
(define-syntax (->* stx)
|
||||
(let-values ([(stx _1 _2) (->*/proc/main stx)])
|
||||
stx))
|
||||
|
||||
(define-for-syntax (select/h stx err-name ctxt-stx)
|
||||
(syntax-case stx (-> ->* ->d ->d* ->r ->pp ->pp-rest)
|
||||
|
|
|
@ -427,6 +427,13 @@
|
|||
'neg)
|
||||
1))
|
||||
|
||||
(test/pos-blame
|
||||
'contract-arrow-keyword
|
||||
'(contract (-> integer? integer?)
|
||||
(λ (x #:y y) x)
|
||||
'pos
|
||||
'neg))
|
||||
|
||||
(test/pos-blame
|
||||
'contract-d1
|
||||
'(contract (integer? . ->d . (lambda (x) (lambda (y) (= x y))))
|
||||
|
@ -1611,7 +1618,7 @@
|
|||
(test/spec-passed
|
||||
'define/contract7
|
||||
'(let ()
|
||||
(eval '(module contract-test-suite-define1 mzscheme
|
||||
(eval '(module contract-test-suite-define1 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define/contract x string? "a")
|
||||
x))
|
||||
|
@ -3218,7 +3225,7 @@
|
|||
(test/spec-passed
|
||||
'd-c-s-match1
|
||||
'(begin
|
||||
(eval '(module d-c-s-match1 mzscheme
|
||||
(eval '(module d-c-s-match1 scheme/base
|
||||
(require (lib "contract.ss")
|
||||
(lib "match.ss"))
|
||||
|
||||
|
@ -3232,7 +3239,7 @@
|
|||
(test/spec-passed/result
|
||||
'd-c-s-match2
|
||||
'(begin
|
||||
(eval '(module d-c-s-match2 mzscheme
|
||||
(eval '(module d-c-s-match2 scheme/base
|
||||
(require (lib "contract.ss")
|
||||
(lib "match.ss"))
|
||||
|
||||
|
@ -3251,7 +3258,7 @@
|
|||
|
||||
(test/pos-blame 'd-c-s1
|
||||
'(begin
|
||||
(eval '(module d-c-s1 mzscheme
|
||||
(eval '(module d-c-s1 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-contract-struct couple (hd tl))
|
||||
(contract (couple/c any/c any/c) 1 'pos 'neg)))
|
||||
|
@ -4033,7 +4040,7 @@ so that propagation occurs.
|
|||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(contract-eval
|
||||
'(module contract-test-suite-inferred-name1 mzscheme
|
||||
'(module contract-test-suite-inferred-name1 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define contract-inferred-name-test-contract (-> integer? any))
|
||||
(define (contract-inferred-name-test x) #t)
|
||||
|
@ -4616,7 +4623,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract1
|
||||
'(let ()
|
||||
(eval '(module contract-test-suite1 mzscheme
|
||||
(eval '(module contract-test-suite1 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define x 1)
|
||||
(provide/contract (x integer?))))
|
||||
|
@ -4626,7 +4633,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract2
|
||||
'(let ()
|
||||
(eval '(module contract-test-suite2 mzscheme
|
||||
(eval '(module contract-test-suite2 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(provide/contract)))
|
||||
(eval '(require 'contract-test-suite2))))
|
||||
|
@ -4634,7 +4641,7 @@ so that propagation occurs.
|
|||
(test/spec-failed
|
||||
'provide/contract3
|
||||
'(let ()
|
||||
(eval '(module contract-test-suite3 mzscheme
|
||||
(eval '(module contract-test-suite3 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define x #f)
|
||||
(provide/contract (x integer?))))
|
||||
|
@ -4645,9 +4652,9 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract4
|
||||
'(begin
|
||||
(eval '(module contract-test-suite4 mzscheme
|
||||
(eval '(module contract-test-suite4 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s (a))
|
||||
(define-struct s (a) #:mutable)
|
||||
(provide/contract (struct s ((a any/c))))))
|
||||
(eval '(require 'contract-test-suite4))
|
||||
(eval '(list (make-s 1)
|
||||
|
@ -4655,14 +4662,26 @@ so that propagation occurs.
|
|||
(s? (make-s 1))
|
||||
(set-s-a! (make-s 1) 2)))))
|
||||
|
||||
(test/spec-passed/result
|
||||
(test/spec-passed
|
||||
'provide/contract4-b
|
||||
'(begin
|
||||
(eval '(module contract-test-suite4-b mzscheme
|
||||
(eval '(module contract-test-suite4-b scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s (a b))
|
||||
(provide/contract (struct s ((a any/c) (b any/c))))))
|
||||
(define-struct s (a))
|
||||
(provide/contract (struct s ((a any/c))))))
|
||||
(eval '(require 'contract-test-suite4-b))
|
||||
(eval '(list (make-s 1)
|
||||
(s-a (make-s 1))
|
||||
(s? (make-s 1))))))
|
||||
|
||||
(test/spec-passed/result
|
||||
'provide/contract4-c
|
||||
'(begin
|
||||
(eval '(module contract-test-suite4-c scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s (a b) #:mutable)
|
||||
(provide/contract (struct s ((a any/c) (b any/c))))))
|
||||
(eval '(require 'contract-test-suite4-c))
|
||||
(eval '(let ([an-s (make-s 1 2)])
|
||||
(list (s-a an-s)
|
||||
(s-b an-s)
|
||||
|
@ -4676,7 +4695,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract5
|
||||
'(begin
|
||||
(eval '(module contract-test-suite5 mzscheme
|
||||
(eval '(module contract-test-suite5 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s (a))
|
||||
(define-struct t (a))
|
||||
|
@ -4686,16 +4705,14 @@ so that propagation occurs.
|
|||
(eval '(list (make-s 1)
|
||||
(s-a (make-s 1))
|
||||
(s? (make-s 1))
|
||||
(set-s-a! (make-s 1) 2)
|
||||
(make-t 1)
|
||||
(t-a (make-t 1))
|
||||
(t? (make-t 1))
|
||||
(set-t-a! (make-t 1) 2)))))
|
||||
(t? (make-t 1))))))
|
||||
|
||||
(test/spec-passed
|
||||
'provide/contract6
|
||||
'(begin
|
||||
(eval '(module contract-test-suite6 mzscheme
|
||||
(eval '(module contract-test-suite6 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s (a))
|
||||
(provide/contract (struct s ((a any/c))))))
|
||||
|
@ -4705,12 +4722,12 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract6b
|
||||
'(begin
|
||||
(eval '(module contract-test-suite6b mzscheme
|
||||
(eval '(module contract-test-suite6b scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s_ (a))
|
||||
(provide/contract (struct s_ ((a any/c))))))
|
||||
(eval '(require 'contract-test-suite6b))
|
||||
(eval '(module contract-test-suite6b2 mzscheme
|
||||
(eval '(module contract-test-suite6b2 scheme/base
|
||||
(require 'contract-test-suite6b)
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct (t_ s_) (b))
|
||||
|
@ -4723,7 +4740,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract7
|
||||
'(begin
|
||||
(eval '(module contract-test-suite7 mzscheme
|
||||
(eval '(module contract-test-suite7 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s (a b))
|
||||
(define-struct (t s) (c d))
|
||||
|
@ -4741,7 +4758,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract8
|
||||
'(begin
|
||||
(eval '(module contract-test-suite8 mzscheme
|
||||
(eval '(module contract-test-suite8 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct i-s (contents))
|
||||
(define (w-f-s? x) #t)
|
||||
|
@ -4753,7 +4770,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract9
|
||||
'(begin
|
||||
(eval '(module contract-test-suite9 mzscheme
|
||||
(eval '(module contract-test-suite9 scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define the-internal-name 1)
|
||||
(provide/contract (rename the-internal-name the-external-name integer?))
|
||||
|
@ -4764,11 +4781,11 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract10
|
||||
'(begin
|
||||
(eval '(module pc10-m mzscheme
|
||||
(eval '(module pc10-m scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s (a b) (make-inspector))
|
||||
(define-struct s (a b) #:inspector (make-inspector))
|
||||
(provide/contract (struct s ((a number?) (b number?))))))
|
||||
(eval '(module pc10-n mzscheme
|
||||
(eval '(module pc10-n scheme/base
|
||||
(require (lib "struct.ss")
|
||||
'pc10-m)
|
||||
(print-struct #t)
|
||||
|
@ -4780,12 +4797,12 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract11
|
||||
'(begin
|
||||
(eval '(module pc11-m mzscheme
|
||||
(eval '(module pc11-m scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define x 1)
|
||||
(provide/contract [rename x y integer?]
|
||||
[rename x z integer?])))
|
||||
(eval '(module pc11-n mzscheme
|
||||
(eval '(module pc11-n scheme/base
|
||||
(require 'pc11-m)
|
||||
(+ y z)))
|
||||
(eval '(require 'pc11-n))))
|
||||
|
@ -4795,11 +4812,11 @@ so that propagation occurs.
|
|||
(test/spec-failed
|
||||
'provide/contract11b
|
||||
'(parameterize ([current-namespace (make-namespace)])
|
||||
(eval '(module pc11b-m mzscheme
|
||||
(eval '(module pc11b-m scheme/base
|
||||
(require (lib "contract.ss"))
|
||||
(define-struct s (a b) (make-inspector))
|
||||
(define-struct s (a b) #:inspector (make-inspector))
|
||||
(provide/contract (struct s ((a number?) (b number?))))))
|
||||
(eval '(module pc11b-n mzscheme
|
||||
(eval '(module pc11b-n scheme/base
|
||||
(require (lib "struct.ss")
|
||||
m)
|
||||
(print-struct #t)
|
||||
|
@ -4813,7 +4830,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract12
|
||||
'(begin
|
||||
(eval '(module pc12-m mzscheme
|
||||
(eval '(module pc12-m scheme/base
|
||||
(require scheme/contract)
|
||||
(define-struct (exn2 exn) ())
|
||||
(provide/contract (struct (exn2 exn) ((message any/c) (continuation-marks any/c))))))
|
||||
|
@ -4822,9 +4839,9 @@ so that propagation occurs.
|
|||
(test/spec-passed/result
|
||||
'provide/contract13
|
||||
'(begin
|
||||
(eval '(module pc13-common-msg-structs mzscheme
|
||||
(eval '(module pc13-common-msg-structs scheme/base
|
||||
(require scheme/contract)
|
||||
(define-struct register (name type) (make-inspector))
|
||||
(define-struct register (name type) #:inspector (make-inspector))
|
||||
(provide/contract (struct register ([name any/c] [type any/c])))))
|
||||
|
||||
(eval '(require 'pc13-common-msg-structs))
|
||||
|
@ -4837,7 +4854,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract14
|
||||
'(begin
|
||||
(eval '(module pc14-test1 mzscheme
|
||||
(eval '(module pc14-test1 scheme/base
|
||||
(require scheme/contract)
|
||||
|
||||
(define-struct type (flags))
|
||||
|
@ -4850,7 +4867,7 @@ so that propagation occurs.
|
|||
(struct (type:ptr type)
|
||||
([flags (listof string?)] [type type?])))))
|
||||
|
||||
(eval '(module pc14-test2 mzscheme
|
||||
(eval '(module pc14-test2 scheme/base
|
||||
(require (lib "plt-match.ss"))
|
||||
(require 'pc14-test1)
|
||||
(match (make-type:ptr '() (make-type '()))
|
||||
|
@ -4860,7 +4877,7 @@ so that propagation occurs.
|
|||
;; make sure unbound identifier exception is raised.
|
||||
(contract-error-test
|
||||
#'(begin
|
||||
(eval '(module pos mzscheme
|
||||
(eval '(module pos scheme/base
|
||||
(require scheme/contract)
|
||||
(provide/contract [i any/c]))))
|
||||
exn:fail:syntax?)
|
||||
|
@ -4870,7 +4887,7 @@ so that propagation occurs.
|
|||
(test/spec-failed
|
||||
'provide/contract15
|
||||
'(begin
|
||||
(eval '(module pos mzscheme
|
||||
(eval '(module pos scheme/base
|
||||
(require scheme/contract)
|
||||
(define i #f)
|
||||
(provide/contract [i integer?])))
|
||||
|
@ -4881,7 +4898,7 @@ so that propagation occurs.
|
|||
(test/spec-failed
|
||||
'provide/contract16
|
||||
'(begin
|
||||
(eval '(module neg mzscheme
|
||||
(eval '(module neg scheme/base
|
||||
(require scheme/contract)
|
||||
(define i #f)
|
||||
(provide/contract [i integer?])))
|
||||
|
@ -4894,11 +4911,11 @@ so that propagation occurs.
|
|||
(test/neg-blame
|
||||
'provide/contract17
|
||||
'(begin
|
||||
(eval '(module pos mzscheme
|
||||
(eval '(module pos scheme/base
|
||||
(require scheme/contract)
|
||||
(define-struct s (a))
|
||||
(provide/contract [struct s ((a integer?))])))
|
||||
(eval '(module neg mzscheme
|
||||
(eval '(module neg scheme/base
|
||||
(require 'pos)
|
||||
(define-struct (t s) ())
|
||||
(make-t #f)))
|
||||
|
@ -4907,7 +4924,7 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract18
|
||||
'(begin
|
||||
(eval '(module pc18-pos mzscheme
|
||||
(eval '(module pc18-pos scheme/base
|
||||
(require scheme/contract)
|
||||
(define-struct s ())
|
||||
(provide/contract [struct s ()])))
|
||||
|
@ -4917,25 +4934,25 @@ so that propagation occurs.
|
|||
(test/spec-passed/result
|
||||
'provide/contract19
|
||||
'(begin
|
||||
(eval '(module pc19-a mzscheme
|
||||
(eval '(module pc19-a scheme/base
|
||||
(require scheme/contract)
|
||||
(define-struct a (x))
|
||||
(provide/contract [struct a ([x number?])])))
|
||||
|
||||
(eval '(module pc19-b mzscheme
|
||||
(eval '(module pc19-b scheme/base
|
||||
(require 'pc19-a
|
||||
scheme/contract)
|
||||
(define-struct (b a) (y))
|
||||
(provide/contract [struct (b a) ([x number?] [y number?])])))
|
||||
|
||||
(eval '(module pc19-c mzscheme
|
||||
(eval '(module pc19-c scheme/base
|
||||
(require 'pc19-b
|
||||
scheme/contract)
|
||||
|
||||
(define-struct (c b) (z))
|
||||
(provide/contract [struct (c b) ([x number?] [y number?] [z number?])])))
|
||||
|
||||
(eval' (module pc19-d mzscheme
|
||||
(eval' (module pc19-d scheme/base
|
||||
(require 'pc19-a 'pc19-c)
|
||||
(define pc19-ans (a-x (make-c 1 2 3)))
|
||||
(provide pc19-ans)))
|
||||
|
@ -4947,7 +4964,7 @@ so that propagation occurs.
|
|||
;; test that unit & contract don't collide over the name `struct'
|
||||
(test/spec-passed
|
||||
'provide/contract20
|
||||
'(eval '(module tmp mzscheme
|
||||
'(eval '(module tmp scheme/base
|
||||
(require scheme/contract
|
||||
(lib "unit.ss"))
|
||||
|
||||
|
@ -4960,12 +4977,13 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract21
|
||||
'(begin
|
||||
(eval '(module provide/contract21a mzscheme
|
||||
(eval '(module provide/contract21a scheme/base
|
||||
(require scheme/contract)
|
||||
(provide/contract [f integer?])
|
||||
(define f 1)))
|
||||
(eval '(module provide/contract21b mzscheme
|
||||
(require-for-syntax 'provide/contract21a)
|
||||
(eval '(module provide/contract21b scheme/base
|
||||
(require (for-syntax 'provide/contract21a)
|
||||
(for-syntax scheme/base))
|
||||
(define-syntax (unit-body stx)
|
||||
f f
|
||||
#'1)))))
|
||||
|
@ -4973,12 +4991,13 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract22
|
||||
'(begin
|
||||
(eval '(module provide/contract22a mzscheme
|
||||
(eval '(module provide/contract22a scheme/base
|
||||
(require scheme/contract)
|
||||
(provide/contract [make-bound-identifier-mapping integer?])
|
||||
(define make-bound-identifier-mapping 1)))
|
||||
(eval '(module provide/contract22b mzscheme
|
||||
(require-for-syntax 'provide/contract22a)
|
||||
(eval '(module provide/contract22b scheme/base
|
||||
(require (for-syntax 'provide/contract22a)
|
||||
(for-syntax scheme/base))
|
||||
|
||||
(define-syntax (unit-body stx)
|
||||
make-bound-identifier-mapping)
|
||||
|
@ -4989,12 +5008,12 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract23
|
||||
'(begin
|
||||
(eval '(module provide/contract23a mzscheme
|
||||
(eval '(module provide/contract23a scheme/base
|
||||
(require scheme/contract)
|
||||
(provide/contract [f integer?])
|
||||
(define f 3)))
|
||||
|
||||
(eval '(module provide/contract23b mzscheme
|
||||
(eval '(module provide/contract23b scheme/base
|
||||
(require 'provide/contract23a)
|
||||
(#%expression f)
|
||||
f))
|
||||
|
@ -5004,21 +5023,21 @@ so that propagation occurs.
|
|||
(test/spec-passed
|
||||
'provide/contract24
|
||||
'(begin
|
||||
(eval '(module provide/contract24 mzscheme
|
||||
(require (prefix c: scheme/contract))
|
||||
(eval '(module provide/contract24 scheme/base
|
||||
(require (prefix-in c: scheme/contract))
|
||||
(c:case-> (c:-> integer? integer?)
|
||||
(c:-> integer? integer? integer?))))))
|
||||
|
||||
;; tests that contracts pick up the #%app from the context
|
||||
;; instead of always using the mzscheme #%app.
|
||||
;; instead of always using the scheme/base #%app.
|
||||
(test/spec-passed
|
||||
'provide/contract25
|
||||
'(begin
|
||||
(eval '(module provide/contract25a mzscheme
|
||||
(eval '(module provide/contract25a scheme/base
|
||||
(require scheme/contract)
|
||||
(provide/contract [seventeen integer?])
|
||||
(define seventeen 17)))
|
||||
(eval '(module provide/contract25b mzscheme
|
||||
(eval '(module provide/contract25b scheme/base
|
||||
(require 'provide/contract25a)
|
||||
(let-syntax ([#%app (syntax-rules ()
|
||||
[(#%app e ...) (list e ...)])])
|
||||
|
@ -5038,7 +5057,7 @@ so that propagation occurs.
|
|||
|
||||
(contract-error-test
|
||||
#'(begin
|
||||
(eval '(module pce1-bug mzscheme
|
||||
(eval '(module pce1-bug scheme/base
|
||||
(require scheme/contract)
|
||||
(define the-defined-variable1 'five)
|
||||
(provide/contract [the-defined-variable1 number?])))
|
||||
|
@ -5049,7 +5068,7 @@ so that propagation occurs.
|
|||
|
||||
(contract-error-test
|
||||
#'(begin
|
||||
(eval '(module pce2-bug mzscheme
|
||||
(eval '(module pce2-bug scheme/base
|
||||
(require scheme/contract)
|
||||
(define the-defined-variable2 values)
|
||||
(provide/contract [the-defined-variable2 (-> number? any)])))
|
||||
|
@ -5061,7 +5080,7 @@ so that propagation occurs.
|
|||
|
||||
(contract-error-test
|
||||
#'(begin
|
||||
(eval '(module pce3-bug mzscheme
|
||||
(eval '(module pce3-bug scheme/base
|
||||
(require scheme/contract)
|
||||
(define the-defined-variable3 (λ (x) #f))
|
||||
(provide/contract [the-defined-variable3 (-> any/c number?)])))
|
||||
|
@ -5073,7 +5092,7 @@ so that propagation occurs.
|
|||
|
||||
(contract-error-test
|
||||
#'(begin
|
||||
(eval '(module pce4-bug mzscheme
|
||||
(eval '(module pce4-bug scheme/base
|
||||
(require scheme/contract)
|
||||
(define the-defined-variable4 (λ (x) #f))
|
||||
(provide/contract [the-defined-variable4 (-> any/c number?)])))
|
||||
|
@ -5085,7 +5104,7 @@ so that propagation occurs.
|
|||
|
||||
(contract-error-test
|
||||
#'(begin
|
||||
(eval '(module pce5-bug mzscheme
|
||||
(eval '(module pce5-bug scheme/base
|
||||
(require scheme/contract)
|
||||
|
||||
(define-struct bad (a b))
|
||||
|
@ -5099,7 +5118,7 @@ so that propagation occurs.
|
|||
|
||||
(contract-error-test
|
||||
#'(begin
|
||||
(eval '(module pce6-bug mzscheme
|
||||
(eval '(module pce6-bug scheme/base
|
||||
(require scheme/contract)
|
||||
|
||||
(define-struct bad-parent (a))
|
||||
|
|
Loading…
Reference in New Issue
Block a user