Hi all,

Here's a small extension to RubyUnit I've found useful:

www.ce.chalmers.se/~feldt/ruby/extensions/autotest

It lets you assert that properties/laws on your methods holds by testing
them on randomly generated data. Probably overlaps somewhat (alot?) with  
Design-by-Contract but they may complement each other and since Andy's DbC
stuff hasn't been released yet...

Documentation is sparse but there's some in the header. A concrete
example:

Instead of writing

    # Some ad hoc test cases...
    assert_equals(0xffffffff, invert_32bit(0))
    assert_equals(0xfffffffa, invert_32bit(0x05))
    assert_equals(0xf00f0ff0, invert_32bit(0x0ff0f00f))
    ...

I can now

    assert_property(Uint32Gen, "Symmetry property") {|d| 
      d + invert_32bit(d) == (2**32-1)
    }

and the Uint32Gen test data generator will test both limiting cases (close
to zero and to the 32-bit limit) and a large number of randomly chosen
test cases. (Maybe this example is not very illustrative but I hope it
gives you a feeling of what can be done...) There are some combinator
generators that you can use to produce complex generators from simpler
ones.

Regards,

Robert

Ps. I haven't submitted to RAA since this is a hack. I might do so in the
future when I've cleaned it up. Consider it pre-pre-alpha and
highly-probable-to-change until then... ;-)