From 4275e4970b21f17437e145e7f9759d5849f8e124 Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Tue, 15 Jan 2013 16:42:53 -0500 Subject: [PATCH] Fix filters on odd? and even? Closes PR 13233 original commit: e1b6e84089af1f01e097cec5c612e1b4ce309420 --- collects/tests/typed-racket/fail/pr13233-2.rkt | 15 +++++++++++++++ collects/tests/typed-racket/fail/pr13233-3.rkt | 15 +++++++++++++++ collects/tests/typed-racket/fail/pr13233-4.rkt | 15 +++++++++++++++ collects/tests/typed-racket/fail/pr13233.rkt | 17 +++++++++++++++++ .../typed-racket/base-env/base-env-numeric.rkt | 4 ++-- 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 collects/tests/typed-racket/fail/pr13233-2.rkt create mode 100644 collects/tests/typed-racket/fail/pr13233-3.rkt create mode 100644 collects/tests/typed-racket/fail/pr13233-4.rkt create mode 100644 collects/tests/typed-racket/fail/pr13233.rkt diff --git a/collects/tests/typed-racket/fail/pr13233-2.rkt b/collects/tests/typed-racket/fail/pr13233-2.rkt new file mode 100644 index 00000000..4b4e1216 --- /dev/null +++ b/collects/tests/typed-racket/fail/pr13233-2.rkt @@ -0,0 +1,15 @@ +#; +(exn:pred #rx"Expected Zero, but got (U Nonpositive-Integer Byte-Larger-Than-One Positive-Index-Not-Byte Positive-Fixnum-Not-Index Positive-Integer-Not-Fixnum)") +#lang typed/racket + +;; test odd? filter + +(: foo (Integer -> String)) +(define (foo n) + (if (odd? n) + "dummy" + (o n))) + +(: o (One -> String)) +(define (o x) "dummy") + diff --git a/collects/tests/typed-racket/fail/pr13233-3.rkt b/collects/tests/typed-racket/fail/pr13233-3.rkt new file mode 100644 index 00000000..da8d1380 --- /dev/null +++ b/collects/tests/typed-racket/fail/pr13233-3.rkt @@ -0,0 +1,15 @@ +#; +(exn:pred #rx"Expected Zero, but got (U Negative-Integer Positive-Integer)") +#lang typed/racket + +;; test even? filter + +(: foo (Integer -> String)) +(define (foo n) + (if (even? n) + "dummy" + (z n))) + +(: z (Zero -> String)) +(define (z x) "dummy") + diff --git a/collects/tests/typed-racket/fail/pr13233-4.rkt b/collects/tests/typed-racket/fail/pr13233-4.rkt new file mode 100644 index 00000000..e6eb235d --- /dev/null +++ b/collects/tests/typed-racket/fail/pr13233-4.rkt @@ -0,0 +1,15 @@ +#; +(exn:pred #rx"Expected One, but got (U Nonpositive-Integer Byte-Larger-Than-One Positive-Index-Not-Byte Positive-Fixnum-Not-Index Positive-Integer-Not-Fixnum)") +#lang typed/racket + +;; test even? filter + +(: foo (Integer -> String)) +(define (foo n) + (if (even? n) + (o n) + "dummy")) + +(: o (One -> String)) +(define (o x) "dummy") + diff --git a/collects/tests/typed-racket/fail/pr13233.rkt b/collects/tests/typed-racket/fail/pr13233.rkt new file mode 100644 index 00000000..0810ae6f --- /dev/null +++ b/collects/tests/typed-racket/fail/pr13233.rkt @@ -0,0 +1,17 @@ +#; +(exn-pred "Expected Zero, but got") +#lang typed/racket + +;; test odd? filter + +(: foo (Integer -> Zero)) +(define (foo n) + (if (odd? n) + 0 + n)) + +(: ZERO Zero) +(define ZERO (foo 2)) + +ZERO + diff --git a/collects/typed-racket/base-env/base-env-numeric.rkt b/collects/typed-racket/base-env/base-env-numeric.rkt index 0cf1f4ed..6d2b9db1 100644 --- a/collects/typed-racket/base-env/base-env-numeric.rkt +++ b/collects/typed-racket/base-env/base-env-numeric.rkt @@ -720,8 +720,8 @@ [exact-positive-integer? (make-pred-ty -Pos)] [exact-nonnegative-integer? (make-pred-ty -Nat)] -[odd? (-> -Int B : (-FS -top (-filter -Zero 0)))] -[even? (-> -Int B)] +[odd? (-> -Int B : (-FS (-not-filter -Zero 0) (-not-filter -One 0)))] +[even? (-> -Int B : (-FS (-not-filter -One 0) (-not-filter -Zero 0)))] [= (from-cases