[racket-dev] Single-flonum-ness not preserved in racket/math functions

From: Neil Toronto (neil.toronto at gmail.com)
Date: Wed Jun 6 00:05:26 EDT 2012

On 06/05/2012 03:57 PM, Vincent St-Amour wrote:
> At Tue, 05 Jun 2012 15:45:09 -0600,
> Neil Toronto wrote:
>> Vincent, is there a quick way for me to test whether the types I give
>> the new functions are sound?
>
> I recently added redex-based random testing for TR's float types. It's
> in collects/tests/typed-racket/tr-random-testing.rkt.
>
> Currently, it only tests flonum (i.e. double precision) operations and
> types, but it should be easy to expand to single-flonums.

Thanks! I've adapted it and will commit the changes with the ones to 
racket/math.

I've managed to make it always find a counterexample. But there are only 
a few single-flonum -> flonum issues. Most of them are because I've 
changed the random-flonum-generating code to sometimes generate *very* 
small random numbers. Here's the counterexample I found earlier today 
that motivated that change to the random testing:

#lang typed/racket

(require/typed
  unstable/flonum
  [+min.0  Positive-Float])  ; the smallest positive flonum

 > +min.0
- : Float [generalized from Positive-Float]
4.9406564584125e-324
 > (sqr +min.0)
- : Float [generalized from Positive-Float]
0.0


I'm not comfortable messing with those precise primitive types yet, so 
I'll let you handle that. When I push my commits tomorrow, 
tr-random-testing.rkt will fail. After you've fixed the erroneous types, 
I'll be able to use your fixes to figure out the right types for the 
functions I added to racket/math.

Neil ⊥

Posted on the dev mailing list.