diff --git a/collects/mzlib/private/contract-basic-opters.ss b/collects/mzlib/private/contract-basic-opters.ss index 0a8901af40..b81bd8ed6c 100644 --- a/collects/mzlib/private/contract-basic-opters.ss +++ b/collects/mzlib/private/contract-basic-opters.ss @@ -39,6 +39,9 @@ (define/opter (integer? opt/i pos neg stx) (syntax-case stx (integer?) [integer? (opt/pred pos #'integer?)])) + (define/opter (char? opt/i pos neg stx) + (syntax-case stx (char?) + [char? (opt/pred pos #'char?)])) (define/opter (number? opt/i pos neg stx) (syntax-case stx (number?) [number? (opt/pred pos #'number?)])) diff --git a/collects/mzlib/private/contract.ss b/collects/mzlib/private/contract.ss index 7c197ec64b..09b4852203 100644 --- a/collects/mzlib/private/contract.ss +++ b/collects/mzlib/private/contract.ss @@ -1202,10 +1202,10 @@ add struct contracts for immutable structs? high (cond [(eq? checker 'between/c) #'(check-between/c n m)] - [(eq? checker '>/c #'(check-unary-between/c '>/c n))] - [(eq? checker '>=/c #'(check-unary-between/c '>=/c n))] - [(eq? checker '/c) #'(check-unary-between/c '>/c n)] + [(eq? checker '>=/c) #'(check-unary-between/c '>=/c n)] + [(eq? checker '/c)])) + [(>/c low) (opt/between-ctc pos stx #'low #'+inf.0 #'< '>/c)])) (define/opter (>=/c opt/i pos neg stx) (syntax-case stx (>=/c) - [(>=/c low) (opt/between-ctc #'low #'+inf.0 #'<= '>=/c)])) + [(>=/c low) (opt/between-ctc pos stx #'low #'+inf.0 #'<= '>=/c)])) (define/opter ( name 1" + (check-name '(-> integer? integer?) (opt/c (-> integer? integer?)))) + + (test-case + "-> name 2" + (check-name '(-> integer? any) (opt/c (-> integer? any)))) + + (test-case + "-> name 3" + (check-name '(-> integer? (values boolean? char?)) (opt/c (-> integer? (values boolean? char?))))) + + (test-case + "or/c name 1" + (check-name '(or/c) (opt/c (or/c)))) + + (test-case + "or/c name 2" + (check-name '(or/c integer? gt0?) (opt/c (or/c integer? (let ([gt0? (lambda (x) (> x 0))]) gt0?))))) + + (test-case + "or/c name 3" + (check-name '(or/c integer? boolean?) + (opt/c (or/c (flat-contract integer?) + (flat-contract boolean?))))) + + (test-case + "or/c name 4" + (check-name '(or/c integer? boolean?) + (opt/c (or/c integer? boolean?)))) + + (test-case + "or/c name 5" + (check-name '(or/c (-> (>=/c 5) (>=/c 5)) boolean?) + (opt/c (or/c (-> (>=/c 5) (>=/c 5)) boolean?)))) + + (test-case + "or/c name 6" + (check-name '(or/c (-> (>=/c 5) (>=/c 5)) boolean?) + (opt/c (or/c boolean? (-> (>=/c 5) (>=/c 5)))))) + + (test-case + "or/c name 7" + (check-name '(or/c (-> (>=/c 5) (>=/c 5)) + (-> (<=/c 5) (<=/c 5) (<=/c 5))) + (opt/c (or/c (-> (>=/c 5) (>=/c 5)) + (-> (<=/c 5) (<=/c 5) (<=/c 5)))))) + + (test-case + "or/c name 8" + (check-name '(or/c boolean? + (-> (>=/c 5) (>=/c 5)) + (-> (<=/c 5) (<=/c 5) (<=/c 5))) + (opt/c (or/c boolean? + (-> (>=/c 5) (>=/c 5)) + (-> (<=/c 5) (<=/c 5) (<=/c 5)))))) + + (test-case + "=/c name 1" + (check-name '(=/c 5) (opt/c (=/c 5)))) + + (test-case + ">=/c name 1" + (check-name '(>=/c 5) (opt/c (>=/c 5)))) + + (test-case + "<=/c name 1" + (check-name '(<=/c 5) (opt/c (<=/c 5)))) + + (test-case + "/c name 1" + (check-name '(>/c 5) (opt/c (>/c 5)))) + + (test-case + "between/c name 1" + (check-name '(between/c 5 6) (opt/c (between/c 5 6)))) + + (test-case + "cons/c name 1" + (check-name '(cons/c boolean? integer?) + (opt/c (cons/c boolean? (flat-contract integer?))))) + + (test-case + "cons/c name 2" + (check-name '(cons/c boolean? integer?) + (opt/c (cons/c boolean? (flat-contract integer?))))) + + (test-case + "cons-immutable/c name 1" + (check-name '(cons-immutable/c boolean? integer?) + (opt/c (cons-immutable/c boolean? (flat-contract integer?))))) + + (test-case + "cons-immutable/c name 2" + (check-name '(cons-immutable/c boolean? integer?) + (opt/c (cons-immutable/c boolean? (flat-contract integer?))))) + + (test-case + "cons-immutable/c name 3" + (check-name '(cons-immutable/c boolean? integer?) + (opt/c (cons-immutable/c boolean? (flat-contract integer?))))) + + (test-case + "cons-immutable/c name 4" + (check-name '(cons-immutable/c (-> boolean? boolean?) integer?) + (opt/c (cons-immutable/c (-> boolean? boolean?) integer?)))) + )) (require (planet "text-ui.ss" ("schematics" "schemeunit.plt" 2 1)))