The test generator accepts as input a list of classes to
be tested, a set of filters and contracts (which are sanity
checks to be performed), and a timeout. Intuitively, the test
generation algorithm iteratively “grows” method sequences
from previously-generated shorter sequences. Suppose that the
test generator has already generated a set of method sequences
as valid test cases. During each iteration, the test generator
picks a method m(T1, . . ., Tn) at random from the list of
classes provided to it as input, and “extends” the existing
method sequences with a call to m (e.g., one way to “extend”
is to append m to the end of the sequence). If the parameters
of m are all of primitive type, then the test generator randomly
selects the values of these parameters from a pool of acceptable