From 7b762933c6eb247b0c8ed11fd59c8b7f18db6c5c Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Wed, 1 Apr 2015 21:36:01 -0700 Subject: [PATCH] Simplify the type of zero?. --- .../typed-racket/base-env/base-env-numeric.rkt | 8 ++------ typed-racket-test/unit-tests/typecheck-tests.rkt | 14 +++++++++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/typed-racket-lib/typed-racket/base-env/base-env-numeric.rkt b/typed-racket-lib/typed-racket/base-env/base-env-numeric.rkt index aa683f59..a93af1df 100644 --- a/typed-racket-lib/typed-racket/base-env/base-env-numeric.rkt +++ b/typed-racket-lib/typed-racket/base-env/base-env-numeric.rkt @@ -891,12 +891,8 @@ ;; There are 25 values that answer true to zero?. They are either reals, or inexact complexes. ;; Note -RealZero contains NaN and zero? returns #f on it [zero? - (cl->* - (-> -ExactNumber B : (-FS (-filter (-val 0) 0) (-not-filter (-val 0) 0))) - (-> -Real B : (-FS (-filter -RealZero 0) - (-not-filter (Un -Zero -InexactRealPosZero -InexactRealNegZero) 0))) - (-> N B : (-FS (-filter (Un -RealZero -InexactComplex -InexactImaginary) 0) - (-not-filter (Un -Zero -InexactRealPosZero -InexactRealNegZero) 0))))] + (-> N B : (-FS (-filter (Un -RealZero -InexactComplex -InexactImaginary) 0) + (-not-filter (Un -Zero -InexactRealPosZero -InexactRealNegZero) 0)))] [number? (make-pred-ty N)] [integer? (asym-pred Univ B (-FS (-filter (Un -Int -Flonum -SingleFlonum) 0) ; inexact-integers exist... diff --git a/typed-racket-test/unit-tests/typecheck-tests.rkt b/typed-racket-test/unit-tests/typecheck-tests.rkt index f28765bf..335969fb 100644 --- a/typed-racket-test/unit-tests/typecheck-tests.rkt +++ b/typed-racket-test/unit-tests/typecheck-tests.rkt @@ -2058,7 +2058,7 @@ (-lst -Symbol)] [tc-e (sequence-count zero? (inst empty-sequence Integer)) -Nat] - [tc-e (sequence-filter zero? (inst empty-sequence Integer)) + [tc-e ((inst sequence-filter Integer Zero) zero? (inst empty-sequence Integer)) (-seq (-val 0))] [tc-e (sequence-add-between (inst empty-sequence Integer) 'foo) (-seq (t:Un -Int (-val 'foo)))] @@ -3570,6 +3570,16 @@ [tc-e/t (lambda: ([x : Real-Zero]) (or (zero? x) x)) (t:-> -RealZero (t:Un (-val #t) -InexactRealNan) : -true-filter)] + [tc-e/t + (lambda: ([x : Positive-Integer]) (zero? x)) + (t:-> -PosInt -Boolean : -false-filter)] + [tc-e/t + (lambda: ([x : Natural]) (zero? x)) + (t:-> -Nat -Boolean : (-FS (-filter (-val 0) 0) (-not-filter (-val 0) 0)))] + [tc-e/t + (lambda: ([x : Real]) (zero? x)) + (t:-> -Real -Boolean : (-FS (-filter -RealZero 0) + (-not-filter (t:Un -Zero -InexactRealPosZero -InexactRealNegZero) 0)))] [tc-e/t (lambda: ([x : Byte]) (positive? x)) (t:-> -Byte -Boolean : (-FS (-filter -PosByte 0) (-filter -Zero 0)))] @@ -3586,6 +3596,8 @@ [tc-e/t (lambda: ([x : Flonum]) (or (>= +inf.f x) x)) (t:-> -Flonum (t:Un (-val #t) -FlonumNan) : -true-filter)] + + ) (test-suite