QCheck.ShrinkThe Shrink module contains combinators to build up composite shrinkers for user-defined types
type 'a t = 'a -> 'a Iter.tGiven a counter-example, return an iterator on smaller versions of the counter-example.
val nil : 'a tNo shrink
val unit : unit tval bool : bool tval char : char tShrinks towards 'a'.
val char_numeral : char tShrinks towards '0'.
val char_printable : char tShrinks towards 'a' like !char. The output is also a printable character.
val int : int tval int32 : int32 tval int64 : int64 tfilter 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 tShrink integers by trying all smaller integers (can take a lot of time!)
val list_spine : 'a list tTry to shrink lists by removing one or more elements.
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.
tup2 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.
Similar to tup2
val tup7 :
'a t ->
'b t ->
'c t ->
'd t ->
'e t ->
'f t ->
'g t ->
('a * 'b * 'c * 'd * 'e * 'f * 'g) tSimilar to tup2