From 16a18d76485a88d62832c0f04682836739c434f9 Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Thu, 5 Nov 2015 14:15:10 -0600 Subject: [PATCH] Fix type of flexpt. Found using random testing. Found 9 times. --- typed-racket-lib/typed-racket/base-env/base-env-numeric.rkt | 3 ++- typed-racket-test/unit-tests/typecheck-tests.rkt | 1 + 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 26f6326d..b0ce0485 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 @@ -568,7 +568,8 @@ (fl-type-lambda (from-cases (-FlZero -PosFl . -> . -FlZero) ; (flexpt -0.0 0.1) -> 0.0 ; not sign preserving ((Un -PosFl -NegFl) -FlZero . -> . -PosFl) ; always returns 1.0 - (-NonNegFl -Fl . -> . -NonNegFl) ; can underflow + ;; can underflow, and -0.0 breaks sign, so 1st arg can't be non-neg + (-Pos -Fl . -> . -NonNegFl) (-Fl -Fl . -> . -Fl)))) (define fx->fl-type diff --git a/typed-racket-test/unit-tests/typecheck-tests.rkt b/typed-racket-test/unit-tests/typecheck-tests.rkt index 55f224a4..fc9f7fa3 100644 --- a/typed-racket-test/unit-tests/typecheck-tests.rkt +++ b/typed-racket-test/unit-tests/typecheck-tests.rkt @@ -455,6 +455,7 @@ (tc-e (exact->inexact (ann 3 Number)) (t:Un -InexactReal -InexactComplex)) (tc-e (/ (round (exact-round -2.7393196f0)) (real->double-flonum (inexact->exact (real->single-flonum -0.0)))) -Real) (tc-e (bitwise-and (exact-round 1.7976931348623157e+308) (exact-round -29)) -Int) + (tc-e (flexpt -0.0 -1.0) -Flonum) (tc-e (exact->inexact 3) -PosFlonum) (tc-e (exact->inexact -3) -NegFlonum) (tc-e (real->double-flonum 0.0) -FlonumPosZero)