sig
  module Tree :
    sig
      type 'a t
      val root : 'QCheck2.Tree.t -> 'a
      val children : 'QCheck2.Tree.t -> 'QCheck2.Tree.t Stdlib.Seq.t
      val pp :
        ?depth:int ->
        (Stdlib.Format.formatter -> '-> unit) ->
        Stdlib.Format.formatter -> 'QCheck2.Tree.t -> unit
    end
  module Gen :
    sig
      type 'a t
      type 'a sized = int -> 'QCheck2.Gen.t
      val unit : unit QCheck2.Gen.t
      val bool : bool QCheck2.Gen.t
      val int : int QCheck2.Gen.t
      val pint : ?origin:int -> int QCheck2.Gen.t
      val small_nat : int QCheck2.Gen.t
      val nat : int QCheck2.Gen.t
      val big_nat : int QCheck2.Gen.t
      val neg_int : int QCheck2.Gen.t
      val small_int : int QCheck2.Gen.t
      val small_signed_int : int QCheck2.Gen.t
      val small_int_corners : unit -> int QCheck2.Gen.t
      val int32 : int32 QCheck2.Gen.t
      val ui32 : int32 QCheck2.Gen.t
      val int64 : int64 QCheck2.Gen.t
      val ui64 : int64 QCheck2.Gen.t
      val float : float QCheck2.Gen.t
      val pfloat : float QCheck2.Gen.t
      val nfloat : float QCheck2.Gen.t
      val char : char QCheck2.Gen.t
      val printable : char QCheck2.Gen.t
      val numeral : char QCheck2.Gen.t
      val bytes_size :
        ?gen:char QCheck2.Gen.t -> int QCheck2.Gen.t -> bytes QCheck2.Gen.t
      val bytes : bytes QCheck2.Gen.t
      val bytes_of : char QCheck2.Gen.t -> bytes QCheck2.Gen.t
      val bytes_printable : bytes QCheck2.Gen.t
      val bytes_small : bytes QCheck2.Gen.t
      val bytes_small_of : char QCheck2.Gen.t -> bytes QCheck2.Gen.t
      val string_size :
        ?gen:char QCheck2.Gen.t -> int QCheck2.Gen.t -> string QCheck2.Gen.t
      val string : string QCheck2.Gen.t
      val string_of : char QCheck2.Gen.t -> string QCheck2.Gen.t
      val string_printable : string QCheck2.Gen.t
      val string_small : string QCheck2.Gen.t
      val string_small_of : char QCheck2.Gen.t -> string QCheck2.Gen.t
      val small_string : ?gen:char QCheck2.Gen.t -> string QCheck2.Gen.t
      val pure : '-> 'QCheck2.Gen.t
      val return : '-> 'QCheck2.Gen.t
      val make_primitive :
        gen:(Stdlib.Random.State.t -> 'a) ->
        shrink:('-> 'Stdlib.Seq.t) -> 'QCheck2.Gen.t
      val add_shrink_invariant :
        ('-> bool) -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val set_shrink :
        ('-> 'Stdlib.Seq.t) -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val no_shrink : 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val int_bound : int -> int QCheck2.Gen.t
      val int_range : ?origin:int -> int -> int -> int QCheck2.Gen.t
      val ( -- ) : int -> int -> int QCheck2.Gen.t
      val float_bound_inclusive :
        ?origin:float -> float -> float QCheck2.Gen.t
      val float_bound_exclusive :
        ?origin:float -> float -> float QCheck2.Gen.t
      val float_range :
        ?origin:float -> float -> float -> float QCheck2.Gen.t
      val ( --. ) : float -> float -> float QCheck2.Gen.t
      val char_range : ?origin:char -> char -> char -> char QCheck2.Gen.t
      val oneof : 'QCheck2.Gen.t list -> 'QCheck2.Gen.t
      val oneofl : 'a list -> 'QCheck2.Gen.t
      val oneofa : 'a array -> 'QCheck2.Gen.t
      val frequency : (int * 'QCheck2.Gen.t) list -> 'QCheck2.Gen.t
      val frequencyl : (int * 'a) list -> 'QCheck2.Gen.t
      val frequencya : (int * 'a) array -> 'QCheck2.Gen.t
      val shuffle_a : 'a array -> 'a array QCheck2.Gen.t
      val shuffle_l : 'a list -> 'a list QCheck2.Gen.t
      val shuffle_w_l : (int * 'a) list -> 'a list QCheck2.Gen.t
      val graft_corners :
        'QCheck2.Gen.t -> 'a list -> unit -> 'QCheck2.Gen.t
      val int_pos_corners : int list
      val int_corners : int list
      val list : 'QCheck2.Gen.t -> 'a list QCheck2.Gen.t
      val small_list : 'QCheck2.Gen.t -> 'a list QCheck2.Gen.t
      val list_size :
        int QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'a list QCheck2.Gen.t
      val list_repeat : int -> 'QCheck2.Gen.t -> 'a list QCheck2.Gen.t
      val array : 'QCheck2.Gen.t -> 'a array QCheck2.Gen.t
      val array_size :
        int QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'a array QCheck2.Gen.t
      val small_array : 'QCheck2.Gen.t -> 'a array QCheck2.Gen.t
      val array_repeat : int -> 'QCheck2.Gen.t -> 'a array QCheck2.Gen.t
      val option :
        ?ratio:float -> 'QCheck2.Gen.t -> 'a option QCheck2.Gen.t
      val opt : ?ratio:float -> 'QCheck2.Gen.t -> 'a option QCheck2.Gen.t
      val pair :
        'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b) QCheck2.Gen.t
      val triple :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b * 'c) QCheck2.Gen.t
      val quad :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t -> ('a * 'b * 'c * 'd) QCheck2.Gen.t
      val tup2 :
        'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b) QCheck2.Gen.t
      val tup3 :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b * 'c) QCheck2.Gen.t
      val tup4 :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t -> ('a * 'b * 'c * 'd) QCheck2.Gen.t
      val tup5 :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t -> ('a * 'b * 'c * 'd * 'e) QCheck2.Gen.t
      val tup6 :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t -> ('a * 'b * 'c * 'd * 'e * 'f) QCheck2.Gen.t
      val tup7 :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t -> ('a * 'b * 'c * 'd * 'e * 'f * 'g) QCheck2.Gen.t
      val tup8 :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        ('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h) QCheck2.Gen.t
      val tup9 :
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t ->
        ('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i) QCheck2.Gen.t
      val flatten_l : 'QCheck2.Gen.t list -> 'a list QCheck2.Gen.t
      val flatten_a : 'QCheck2.Gen.t array -> 'a array QCheck2.Gen.t
      val flatten_opt : 'QCheck2.Gen.t option -> 'a option QCheck2.Gen.t
      val flatten_res :
        ('QCheck2.Gen.t, 'e) Stdlib.result ->
        ('a, 'e) Stdlib.result QCheck2.Gen.t
      val join : 'QCheck2.Gen.t QCheck2.Gen.t -> 'QCheck2.Gen.t
      val sized : 'QCheck2.Gen.sized -> 'QCheck2.Gen.t
      val sized_size :
        int QCheck2.Gen.t -> 'QCheck2.Gen.sized -> 'QCheck2.Gen.t
      val fix :
        (('-> 'QCheck2.Gen.t) -> '-> 'QCheck2.Gen.t) ->
        '-> 'QCheck2.Gen.t
      val delay : (unit -> 'QCheck2.Gen.t) -> 'QCheck2.Gen.t
      val map : ('-> 'b) -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val ( >|= ) : 'QCheck2.Gen.t -> ('-> 'b) -> 'QCheck2.Gen.t
      val ( <$> ) : ('-> 'b) -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val map2 :
        ('-> '-> 'c) ->
        'QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val map3 :
        ('-> '-> '-> 'd) ->
        'QCheck2.Gen.t ->
        'QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val ap :
        ('-> 'b) QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val ( <*> ) :
        ('-> 'b) QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
      val bind :
        'QCheck2.Gen.t -> ('-> 'QCheck2.Gen.t) -> 'QCheck2.Gen.t
      val ( >>= ) :
        'QCheck2.Gen.t -> ('-> 'QCheck2.Gen.t) -> 'QCheck2.Gen.t
      val ( let+ ) : 'QCheck2.Gen.t -> ('-> 'b) -> 'QCheck2.Gen.t
      val ( and+ ) :
        'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b) QCheck2.Gen.t
      val ( let* ) :
        'QCheck2.Gen.t -> ('-> 'QCheck2.Gen.t) -> 'QCheck2.Gen.t
      val ( and* ) :
        'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b) QCheck2.Gen.t
      val generate :
        ?rand:Stdlib.Random.State.t -> n:int -> 'QCheck2.Gen.t -> 'a list
      val generate1 : ?rand:Stdlib.Random.State.t -> 'QCheck2.Gen.t -> 'a
      val generate_tree :
        ?rand:Stdlib.Random.State.t -> 'QCheck2.Gen.t -> 'QCheck2.Tree.t
    end
  module Print :
    sig
      type 'a t = '-> string
      val unit : unit QCheck2.Print.t
      val int : int QCheck2.Print.t
      val bool : bool QCheck2.Print.t
      val float : float QCheck2.Print.t
      val char : char QCheck2.Print.t
      val bytes : bytes QCheck2.Print.t
      val string : string QCheck2.Print.t
      val option : 'QCheck2.Print.t -> 'a option QCheck2.Print.t
      val pair :
        'QCheck2.Print.t -> 'QCheck2.Print.t -> ('a * 'b) QCheck2.Print.t
      val triple :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t -> ('a * 'b * 'c) QCheck2.Print.t
      val quad :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t -> ('a * 'b * 'c * 'd) QCheck2.Print.t
      val list : 'QCheck2.Print.t -> 'a list QCheck2.Print.t
      val array : 'QCheck2.Print.t -> 'a array QCheck2.Print.t
      val contramap : ('-> 'a) -> 'QCheck2.Print.t -> 'QCheck2.Print.t
      val comap : ('-> 'a) -> 'QCheck2.Print.t -> 'QCheck2.Print.t
      val tup2 :
        'QCheck2.Print.t -> 'QCheck2.Print.t -> ('a * 'b) QCheck2.Print.t
      val tup3 :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t -> ('a * 'b * 'c) QCheck2.Print.t
      val tup4 :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t -> ('a * 'b * 'c * 'd) QCheck2.Print.t
      val tup5 :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t -> ('a * 'b * 'c * 'd * 'e) QCheck2.Print.t
      val tup6 :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t -> ('a * 'b * 'c * 'd * 'e * 'f) QCheck2.Print.t
      val tup7 :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        ('a * 'b * 'c * 'd * 'e * 'f * 'g) QCheck2.Print.t
      val tup8 :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        ('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h) QCheck2.Print.t
      val tup9 :
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        'QCheck2.Print.t ->
        ('a * 'b * 'c * 'd * 'e * 'f * 'g * 'h * 'i) QCheck2.Print.t
    end
  module Shrink :
    sig
      module type Number =
        sig
          type t
          val equal :
            QCheck2.Shrink.Number.t -> QCheck2.Shrink.Number.t -> bool
          val div :
            QCheck2.Shrink.Number.t ->
            QCheck2.Shrink.Number.t -> QCheck2.Shrink.Number.t
          val add :
            QCheck2.Shrink.Number.t ->
            QCheck2.Shrink.Number.t -> QCheck2.Shrink.Number.t
          val sub :
            QCheck2.Shrink.Number.t ->
            QCheck2.Shrink.Number.t -> QCheck2.Shrink.Number.t
          val of_int : int -> QCheck2.Shrink.Number.t
        end
      val number_towards :
        (module QCheck2.Shrink.Number with type t = 'a) ->
        destination:'-> '-> 'Stdlib.Seq.t
      val int_towards : int -> int -> int Stdlib.Seq.t
      val int32_towards : int32 -> int32 -> int32 Stdlib.Seq.t
      val int64_towards : int64 -> int64 -> int64 Stdlib.Seq.t
      val float_towards : float -> float -> float Stdlib.Seq.t
      val int_aggressive_towards : int -> int -> int Stdlib.Seq.t
      val int_aggressive : int -> int Stdlib.Seq.t
    end
  module Observable :
    sig
      type -'a t
      val make :
        ?eq:('-> '-> bool) ->
        ?hash:('-> int) -> 'QCheck2.Print.t -> 'QCheck2.Observable.t
      val equal : 'QCheck2.Observable.t -> '-> '-> bool
      val hash : 'QCheck2.Observable.t -> '-> int
      val print : 'QCheck2.Observable.t -> 'QCheck2.Print.t
      val unit : unit QCheck2.Observable.t
      val bool : bool QCheck2.Observable.t
      val int : int QCheck2.Observable.t
      val float : float QCheck2.Observable.t
      val bytes : bytes QCheck2.Observable.t
      val string : string QCheck2.Observable.t
      val char : char QCheck2.Observable.t
      val contramap :
        ('-> 'a) -> 'QCheck2.Observable.t -> 'QCheck2.Observable.t
      val map :
        ('-> 'a) -> 'QCheck2.Observable.t -> 'QCheck2.Observable.t
      val option : 'QCheck2.Observable.t -> 'a option QCheck2.Observable.t
      val list : 'QCheck2.Observable.t -> 'a list QCheck2.Observable.t
      val array : 'QCheck2.Observable.t -> 'a array QCheck2.Observable.t
      val pair :
        'QCheck2.Observable.t ->
        'QCheck2.Observable.t -> ('a * 'b) QCheck2.Observable.t
      val triple :
        'QCheck2.Observable.t ->
        'QCheck2.Observable.t ->
        'QCheck2.Observable.t -> ('a * 'b * 'c) QCheck2.Observable.t
      val quad :
        'QCheck2.Observable.t ->
        'QCheck2.Observable.t ->
        'QCheck2.Observable.t ->
        'QCheck2.Observable.t -> ('a * 'b * 'c * 'd) QCheck2.Observable.t
    end
  module Tuple :
    sig
      type 'a t =
          Nil : unit QCheck2.Tuple.t
        | Cons : 'a * 'QCheck2.Tuple.t -> ('a * 'b) QCheck2.Tuple.t
      val nil : unit QCheck2.Tuple.t
      val cons : '-> 'QCheck2.Tuple.t -> ('a * 'b) QCheck2.Tuple.t
      type 'a obs
      val o_nil : unit QCheck2.Tuple.obs
      val o_cons :
        'QCheck2.Observable.t ->
        'QCheck2.Tuple.obs -> ('a * 'b) QCheck2.Tuple.obs
      val observable :
        'QCheck2.Tuple.obs -> 'QCheck2.Tuple.t QCheck2.Observable.t
      module Infix :
        sig
          val ( @:: ) : '-> 'QCheck2.Tuple.t -> ('a * 'b) QCheck2.Tuple.t
          val ( @-> ) :
            'QCheck2.Observable.t ->
            'QCheck2.Tuple.obs -> ('a * 'b) QCheck2.Tuple.obs
        end
      val ( @:: ) : '-> 'b t -> ('a * 'b) t
      val ( @-> ) : 'Observable.t -> 'b obs -> ('a * 'b) obs
    end
  type 'f fun_repr
  type 'f fun_ = Fun of 'QCheck2.fun_repr * 'f
  val fun1 :
    'QCheck2.Observable.t ->
    ?print:'QCheck2.Print.t ->
    'QCheck2.Gen.t -> ('-> 'b) QCheck2.fun_ QCheck2.Gen.t
  val fun2 :
    'QCheck2.Observable.t ->
    'QCheck2.Observable.t ->
    ?print:'QCheck2.Print.t ->
    'QCheck2.Gen.t -> ('-> '-> 'c) QCheck2.fun_ QCheck2.Gen.t
  val fun3 :
    'QCheck2.Observable.t ->
    'QCheck2.Observable.t ->
    'QCheck2.Observable.t ->
    ?print:'QCheck2.Print.t ->
    'QCheck2.Gen.t -> ('-> '-> '-> 'd) QCheck2.fun_ QCheck2.Gen.t
  val fun4 :
    'QCheck2.Observable.t ->
    'QCheck2.Observable.t ->
    'QCheck2.Observable.t ->
    'QCheck2.Observable.t ->
    ?print:'QCheck2.Print.t ->
    'QCheck2.Gen.t ->
    ('-> '-> '-> '-> 'e) QCheck2.fun_ QCheck2.Gen.t
  val fun_nary :
    'QCheck2.Tuple.obs ->
    ?print:'QCheck2.Print.t ->
    'QCheck2.Gen.t -> ('QCheck2.Tuple.t -> 'b) QCheck2.fun_ QCheck2.Gen.t
  module Fn :
    sig
      val print : 'QCheck2.fun_ QCheck2.Print.t
      val apply : 'QCheck2.fun_ -> 'f
    end
  val assume : bool -> unit
  val ( ==> ) : bool -> bool -> bool
  val assume_fail : unit -> 'a
  type 'a stat = string * ('-> int)
  module TestResult :
    sig
      type 'a counter_ex = {
        instance : 'a;
        shrink_steps : int;
        msg_l : string list;
      }
      type 'a state =
          Success
        | Failed of { instances : 'QCheck2.TestResult.counter_ex list; }
        | Failed_other of { msg : string; }
        | Error of { instance : 'QCheck2.TestResult.counter_ex; exn : exn;
            backtrace : string;
          }
      type 'a t
      val get_state : 'QCheck2.TestResult.t -> 'QCheck2.TestResult.state
      val get_count : 'QCheck2.TestResult.t -> int
      val get_count_gen : 'QCheck2.TestResult.t -> int
      val get_collect :
        'QCheck2.TestResult.t -> (string, int) Stdlib.Hashtbl.t option
      val get_stats :
        'QCheck2.TestResult.t ->
        ('QCheck2.stat * (int, int) Stdlib.Hashtbl.t) list
      val get_warnings : 'QCheck2.TestResult.t -> string list
      val get_instances : 'QCheck2.TestResult.t -> 'a list
      val is_success : 'QCheck2.TestResult.t -> bool
      val is_failed : 'QCheck2.TestResult.t -> bool
      val stats :
        'QCheck2.TestResult.t ->
        ('QCheck2.stat * (int, int) Stdlib.Hashtbl.t) list
      val warnings : 'QCheck2.TestResult.t -> string list
      val collect :
        'QCheck2.TestResult.t -> (string, int) Stdlib.Hashtbl.t option
    end
  module Test_exceptions :
    sig
      exception Test_fail of string * string list
      exception Test_error of string * string * exn * string
      exception Test_unexpected_success of string
    end
  module Test :
    sig
      type 'a cell
      val make_cell :
        ?if_assumptions_fail:[ `Fatal | `Warning ] * float ->
        ?count:int ->
        ?long_factor:int ->
        ?negative:bool ->
        ?max_gen:int ->
        ?max_fail:int ->
        ?retries:int ->
        ?name:string ->
        ?print:'QCheck2.Print.t ->
        ?collect:('-> string) ->
        ?stats:'QCheck2.stat list ->
        'QCheck2.Gen.t -> ('-> bool) -> 'QCheck2.Test.cell
      val make_cell_from_QCheck1 :
        ?if_assumptions_fail:[ `Fatal | `Warning ] * float ->
        ?count:int ->
        ?long_factor:int ->
        ?negative:bool ->
        ?max_gen:int ->
        ?max_fail:int ->
        ?retries:int ->
        ?name:string ->
        gen:(Stdlib.Random.State.t -> 'a) ->
        ?shrink:('-> ('-> unit) -> unit) ->
        ?print:('-> string) ->
        ?collect:('-> string) ->
        stats:'QCheck2.stat list -> ('-> bool) -> 'QCheck2.Test.cell
      val get_law : 'QCheck2.Test.cell -> '-> bool
      val get_name : 'QCheck2.Test.cell -> string
      val get_gen : 'QCheck2.Test.cell -> 'QCheck2.Gen.t
      val get_print_opt : 'QCheck2.Test.cell -> 'QCheck2.Print.t option
      val get_collect_opt : 'QCheck2.Test.cell -> ('-> string) option
      val get_stats : 'QCheck2.Test.cell -> 'QCheck2.stat list
      val set_name : 'QCheck2.Test.cell -> string -> unit
      val get_count : 'QCheck2.Test.cell -> int
      val get_long_factor : 'QCheck2.Test.cell -> int
      val get_positive : 'QCheck2.Test.cell -> bool
      type t = Test : 'QCheck2.Test.cell -> QCheck2.Test.t
      val make :
        ?if_assumptions_fail:[ `Fatal | `Warning ] * float ->
        ?count:int ->
        ?long_factor:int ->
        ?max_gen:int ->
        ?max_fail:int ->
        ?retries:int ->
        ?name:string ->
        ?print:'QCheck2.Print.t ->
        ?collect:('-> string) ->
        ?stats:'QCheck2.stat list ->
        'QCheck2.Gen.t -> ('-> bool) -> QCheck2.Test.t
      val make_neg :
        ?if_assumptions_fail:[ `Fatal | `Warning ] * float ->
        ?count:int ->
        ?long_factor:int ->
        ?max_gen:int ->
        ?max_fail:int ->
        ?retries:int ->
        ?name:string ->
        ?print:'QCheck2.Print.t ->
        ?collect:('-> string) ->
        ?stats:'QCheck2.stat list ->
        'QCheck2.Gen.t -> ('-> bool) -> QCheck2.Test.t
      val test_get_count : QCheck2.Test.t -> int
      val test_get_long_factor : QCheck2.Test.t -> int
      val fail_report : string -> 'a
      val fail_reportf :
        ('a, Stdlib.Format.formatter, unit, 'b) Stdlib.format4 -> 'a
      exception Test_fail of string * string list
      exception Test_error of string * string * exn * string
      exception Test_unexpected_success of string
      val print_instance : 'QCheck2.Test.cell -> '-> string
      val print_c_ex :
        'QCheck2.Test.cell -> 'QCheck2.TestResult.counter_ex -> string
      val print_fail :
        'QCheck2.Test.cell ->
        string -> 'QCheck2.TestResult.counter_ex list -> string
      val print_fail_other : string -> msg:string -> string
      val print_expected_failure :
        'QCheck2.Test.cell ->
        'QCheck2.TestResult.counter_ex list -> string
      val print_error :
        ?st:string ->
        'QCheck2.Test.cell ->
        string -> 'QCheck2.TestResult.counter_ex * exn -> string
      val print_test_fail : string -> string list -> string
      val print_test_error : string -> string -> exn -> string -> string
      val print_collect : (string, int) Stdlib.Hashtbl.t -> string
      val print_stat :
        'QCheck2.stat * (int, int) Stdlib.Hashtbl.t -> string
      val check_result :
        'QCheck2.Test.cell -> 'QCheck2.TestResult.t -> unit
      type res = Success | Failure | FalseAssumption | Error of exn * string
      type 'a event =
          Generating
        | Collecting of 'a
        | Testing of 'a
        | Shrunk of int * 'a
        | Shrinking of int * int * 'a
      type 'a handler =
          string -> 'QCheck2.Test.cell -> 'QCheck2.Test.event -> unit
      type 'a step =
          string -> 'QCheck2.Test.cell -> '-> QCheck2.Test.res -> unit
      type 'a callback =
          string -> 'QCheck2.Test.cell -> 'QCheck2.TestResult.t -> unit
      val check_cell :
        ?long:bool ->
        ?call:'QCheck2.Test.callback ->
        ?step:'QCheck2.Test.step ->
        ?handler:'QCheck2.Test.handler ->
        ?rand:Stdlib.Random.State.t ->
        'QCheck2.Test.cell -> 'QCheck2.TestResult.t
      val check_cell_exn :
        ?long:bool ->
        ?call:'QCheck2.Test.callback ->
        ?step:'QCheck2.Test.step ->
        ?handler:'QCheck2.Test.handler ->
        ?rand:Stdlib.Random.State.t -> 'QCheck2.Test.cell -> unit
      val check_exn :
        ?long:bool -> ?rand:Stdlib.Random.State.t -> QCheck2.Test.t -> unit
    end
  exception No_example_found of string
  val find_example :
    ?name:string ->
    ?count:int -> f:('-> bool) -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
  val find_example_gen :
    ?rand:Stdlib.Random.State.t ->
    ?name:string -> ?count:int -> f:('-> bool) -> 'QCheck2.Gen.t -> 'a
end