Module QCheck.Shrink

module Shrink: sig .. end

Shrink Values

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 QCheck.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
Since 0.6
val char : char t
Since 0.6
val int : int t
val option : 'a t -> 'a option t
val string : string t
val list : ?shrink:'a t -> 'a list t
Try to shrink lists by removing elements one by one.
shrink : if provided, will be used to also try to reduce the elements of the list themselves (e.g. in an int list one can try to decrease the integers).
val array : ?shrink:'a t -> 'a array t
Shrink an array.
shrink : see QCheck.Shrink.list
val pair : 'a t -> 'b t -> ('a * 'b) t
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.
val triple : 'a t ->
'b t -> 'c t -> ('a * 'b * 'c) t
Similar to QCheck.Shrink.pair
val quad : 'a t ->
'b t ->
'c t ->
'd t -> ('a * 'b * 'c * 'd) t
Similar to QCheck.Shrink.pair