QCheck.ShrinkThe Shrink module contains combinators to build up composite shrinkers for user-defined types
⚠️ Warning: QCheck's shrinking phase may loop infinitely if
list permutation may lead to an infinite shrinking cycle).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 tunit shrinker. Does not produce any shrinking candidates.
val bool : bool tbool shrinker. Shrinks towards false.
val char : char tchar shrinker. Shrinks towards 'a'.
val char_numeral : char tchar digit shrinker. Shrinks towards '0'.
val char_printable : char tPrintable char shrinker. Shrinks towards 'a' like !char. The output is also a printable character.
val int : int tint shrinker. Shrinks towards 0.
val int32 : int32 tint32 shrinker. Shrinks towards 0l.
val int64 : int64 tint64 shrinker. Shrinks towards 0L.
val float : float tfloat shrinker. Shrinks floating point numbers towards 1.0 or -1.0 and prefers a shorter printed rendering.
val float_bound : float -> float tfloat shrinker for bounded floating point numbers. float_bound b shrinks floating point numbers towards 0. for both positive and negative bounds b, preferring a shorter printed rendering.
val float_range : float -> float -> float tfloat_range low high shrinks floating point numbers in the range low; high (inclusive). Shrinks towards low if low >= 0., towards high if high <= 0., and towards 0. if low < 0. and 0. <. high. It prefers a shorter printed rendering.
option shrinker. Shrinks towards None. option shk reduces Some v values using shk to reduce v.
result shrinker. result ashk eshk reduces Ok a values using ashk and Error e values using eshk.
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 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