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... ;-)