diff --git a/collects/tests/typed-racket/succeed/pr13339.rkt b/collects/tests/typed-racket/succeed/pr13339.rkt new file mode 100644 index 00000000..28da2e3a --- /dev/null +++ b/collects/tests/typed-racket/succeed/pr13339.rkt @@ -0,0 +1,28 @@ +#lang typed/racket + +(require racket/flonum + typed/rackunit) + +(: neg (Real -> Real)) +(define (neg x) (- x)) + +(: flneg (Flonum -> Flonum)) +(define (flneg x) (fl* -1.0 x)) + +(check-eqv? (neg +inf.0) -inf.0) +(check-eqv? (neg -inf.0) +inf.0) +(check-eqv? (neg +nan.0) +nan.0) +(check-eqv? (neg -0.0) +0.0) +(check-eqv? (neg +0.0) -0.0) + +(check-eqv? (flneg +inf.0) (neg +inf.0)) +(check-eqv? (flneg -inf.0) (neg -inf.0)) +(check-eqv? (flneg +nan.0) (neg +nan.0)) +(check-eqv? (flneg -0.0) (neg -0.0)) +(check-eqv? (flneg +0.0) (neg +0.0)) + +(check-eqv? (- +inf.0) (neg +inf.0)) +(check-eqv? (- -inf.0) (neg -inf.0)) +(check-eqv? (- +nan.0) (neg +nan.0)) +(check-eqv? (- -0.0) (neg -0.0)) +(check-eqv? (- +0.0) (neg +0.0)) diff --git a/collects/typed-racket/optimizer/float.rkt b/collects/typed-racket/optimizer/float.rkt index 78efa0b2..4db200ee 100644 --- a/collects/typed-racket/optimizer/float.rkt +++ b/collects/typed-racket/optimizer/float.rkt @@ -180,7 +180,7 @@ #:with opt (begin (log-optimization "unary float" float-opt-msg this-syntax) (add-disappeared-use #'op) - #'(unsafe-fl- 0.0 f.opt))) + #'(unsafe-fl* -1.0 f.opt))) (pattern (#%plain-app (~and op (~literal /)) f:float-expr) #:with opt (begin (log-optimization "unary float" float-opt-msg this-syntax)