That's how I avoid a lot of pain in testing `math/flonum'.

First, though: Michael, really good work on this. I'm looking forward to using it!

To randomly test the functions in isolation, you need:

 * A function that measures error in ulps (an extfl version of
   `flulp-error') and a way to distinguish +0.0 from -0.0

 * A solid set of deterministic test inputs (extfl versions of +0.0,
   -0.0, +inf.0, -inf.0, +min.0, +max.0, -min.0, -max.0, logs, square
   roots, and exponents of these, etc.)

 * A *good* way to generate random 80-bit floats (maybe using an extfl
   version of `ordinal->flonum')

 * `math/bigfloat' and conversion to and from extfls, to perfectly
    simulate 80-bit floating-point ops regardless of hardware

You're probably thinking of randomized boxing/unboxing/optimization tests, though. I think this is a very good idea, not just for extfls, but for flonums as well. It should be pretty easy to create a Redex model of finite programs that includes a few kernel forms, and use it to generate random programs.

Run each program as it is, with JIT optimizations. Run each without JIT optimizations. Transform each to use bigfloat-implemented operations, whose results are always correct and can't be unboxed. If the result of running all three is different, fail.

I'll bet we'd catch a few weird, overlooked cases, and maybe a few that are already affecting programs.

I'd be happy to help with the flonummy and bigfloaty stuff.

Neil ⊥

On 01/28/2013 06:45 PM, Robby Findler wrote:
Would random testing help avoid some of the pain of writing a good
initial set of tests?

Robby


On Mon, Jan 28, 2013 at 7:18 PM, Matthew Flatt <mfl...@cs.utah.edu
<mailto:mfl...@cs.utah.edu>> wrote:

    At Sat, 29 Dec 2012 14:05:08 +0300, Michael Filonenko wrote:
     > I have prepared a new version of the patch (attached).

    Thanks!

    I've merged your patch into the git repo, with some changes:

      * Abstracted more to both reduce code duplication and make the
        "product line" variation easier to read and write.

      * Renamed a few operations to consistently use "extfl", and added
        `extfl->inexact' and `extfl-available?'.

      * Changed the module organization, so that the extflonum bindings are
        always available, and operations raise `exn:fail:unsupported' when
        they are not supported. The operations `extflonum?', `extflvector?',
        and `extflonum-available?' always work.

      * Adjusted the reader to more completely isolate extflonums (e.g., no
        complex numbers with an extflonum part).

      * Changed "sconfig.h" and "scheme.h" to infer when extflonums can be
        supported (see also the new note in "src/README"), and added
        `--disable-extflonum' to `configure'.

      * Reorganized and expanded the documentation.

    I ran out of steam before trying a MinGW compile, so that's almost
    certainly broken. Meanwhile, I have some thoughts on making an MSVC
    build work with a MinGW-compiled support DLL (more later).

    Unboxing of locally-bound extflonums is still not implemented, but I
    think it's probably not too far away. If you want to give that a try, I
    recommend continuing in the direction of threading an `extfl' flag
    through the JIT, instead of duplicating functions.

    Finally, I think the test suite probably needs a lot more tests to
    cover the extflonum operations. Most of the flonum tests are in
    "optimize.rktl", and I think it would make sense to add similar tests
    there for extflonum operations --- guarded by `(when
    (extflonum-available?) ...)'.

    _________________________
       Racket Developers list:
    http://lists.racket-lang.org/dev




_________________________
   Racket Developers list:
   http://lists.racket-lang.org/dev


_________________________
 Racket Developers list:
 http://lists.racket-lang.org/dev

Reply via email to