Library
Module
Module type
Parameter
Class
Class type
Shrinking is used to reduce the size of a counter-example. It tries to make the counter-example smaller by decreasing it, or removing elements, until the property to test holds again; then it returns the smallest value that still made the test fail.
type 'a t = 'a -> 'a Iter.t
Given a counter-example, return an iterator on smaller versions of the counter-example.
val nil : 'a t
No shrink
val unit : unit t
val char : char t
val int : int t
val string : string t
filter f shrink
shrinks values the same as shrink
, but only keep smaller values that satisfy f
. This way it's easy to preserve invariants that are enforced by generators, when shrinking values
val int_aggressive : int t
Shrink integers by trying all smaller integers (can take a lot of time!)
pair a b
uses a
to shrink the first element of tuples, then tries to shrink the second element using b
. It is often better, when generating tuples, to put the "simplest" element first (atomic type rather than list, etc.) because it will be shrunk earlier. In particular, putting functions last might help.