QuickCheck is able to generate random values for each input argument at run time, provided that there is a default/custom generator for that type. The master seed for randomness is the current time.
QuickCheck generates values via the following steps:
1 | The master generator is called with 7 arguments:
|
||||||||||||||
2a | QuickCheck searches through the list of custom generators, if there is a custum generator for the current term, then call the custom generator with Arg1, 2, 3, 4, 6, 7. The master generator will return what ever is returned by the custom generator. | ||||||||||||||
2b | If QuickCheck fails to locate a custom generator, then it will classify the current term as of type int, char, float, string, discriminated union, and other. | ||||||||||||||
3b1 | If it's type int, call rand_int/2 with Arg6 and Arg7 | ||||||||||||||
3b2 | If it's type char, call rand_char/2 with Arg6 and Arg7 | ||||||||||||||
3b3 | If it's type float, call rand_float/2 with Arg6 and Arg7 | ||||||||||||||
3b4 | If it's type string, call rand_string/2 with Arg6 and Arg8 | ||||||||||||||
3b5 | If it's type discriminated union, call rand_union/6 with Arg1, Arg2, Arg3, Arg4, Arg6, Arg7. | ||||||||||||||
3b6 | If it's classified as other, then call rand_function with Arg1, Arg6 and Arg7. Quickcheck will generates the appropriate value if Arg1 is of a function with arity 0 to 10. Otherwise an error will be thrown: "no default generator for this type". |