[Haskell-cafe] the purpose of QuickCheck's size parameter

Li-yao Xia lysxia at gmail.com
Thu Jun 14 22:22:21 UTC 2018

The purpose of the size parameter is not well-defined formally, but it 
is a very convenient knob to easily tune the test suite in various 
situations, that is definitely worth the negligible cost of having it 
around unconditionally.

Without a size parameter, a fixed distribution means that if we want the 
generator to cover all possible cases, we have to keep a small 
probability of generating humongous examples and thus go OOM. We can 
avoid that by making the size of generated values bounded by the size 
parameter (or a function thereof), which we can increase easily when 
more resources become available.

Furthermore, if we really want to generate very large examples, the only 
way with a fixed distribution is to wait longer. Instead, using a size 
parameter, we can make smaller values less likely to target further 
regions in the search space more accurately.

Some properties can take a while to test on larger examples (either 
because of the generators or the actual verification process) so we 
might like to keep the size small during development, and raise it again 
once we're done.

The Arbitrary class assigns a "default" generator for every type. While 
it is not always a good choice, having a parameter to tweak makes 
Arbitrary more generally useful.

As for your last point, small examples are faster to generate and check, 
so it seems like a decent strategy to start small by default.


More information about the Haskell-Cafe mailing list