From 6bef6e6ca8c1ede261fa9f1a02e6a6ca9b8dbdd4 Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Tue, 16 Jun 2015 11:18:46 -0500 Subject: [PATCH] Make type of `abs` and `magnitude` more precise. Fixes a failing test. --- typed-racket-lib/typed-racket/base-env/base-env-numeric.rkt | 2 ++ typed-racket-test/unit-tests/typecheck-tests.rkt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) 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 616a7579..bf5817c3 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 @@ -654,6 +654,8 @@ (list ;; abs is not the identity on negative zeros. ((Un -Zero -PosReal) . -> . (Un -Zero -PosReal) : -true-filter : (-arg-path 0)) + ;; but we know that we at least get *some* zero, and that it preserves exactness + (map unop (list -FlonumZero -SingleFlonumZero -RealZero)) ;; abs may not be closed on fixnums. (abs min-fixnum) is not a fixnum ((Un -PosInt -NegInt) . -> . -PosInt) (-Int . -> . -Nat) diff --git a/typed-racket-test/unit-tests/typecheck-tests.rkt b/typed-racket-test/unit-tests/typecheck-tests.rkt index ae223a87..f93577bf 100644 --- a/typed-racket-test/unit-tests/typecheck-tests.rkt +++ b/typed-racket-test/unit-tests/typecheck-tests.rkt @@ -3638,7 +3638,7 @@ [tc-e/t ((inst values Any) "a") -String] [tc-e ((inst second Any Any Any) (list "a" "b")) -String] [tc-e/t (abs 4) -PosByte] - [tc-e (abs -0.0) -NonNegFlonum] + [tc-e (abs -0.0) -FlonumZero] ;; PR 125: Tests for flonum predicate typechecking [tc-e/t