From: Robert Feldt Date: 2001-02-15T02:03:21+09:00 Subject: [ruby-talk:10855] ANN: AutoTest 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... ;-)