You can use Rant to generate random test data, and use its Test::Unit extension for property-based testing. Rant is basically a recursive descent interpreter, each of its method returns a random value ...