sig
  type result =
    Test.result =
      Passed
    | Failed of Assertion.failure
    | Uncaught of exn * string
    | Report of int * int * int * string list * (string * int) list
    | Exit_code of int
  type 'a classifier = 'Test.classifier
  type t = Test.t
  type output_mode =
    Test.output_mode =
      Text_output of Pervasives.out_channel
    | Html_output of Pervasives.out_channel
    | Xml_output of Pervasives.out_channel
    | Xml_junit_output of Pervasives.out_channel
    | Csv_output of Pervasives.out_channel * string
  val return : '-> unit -> 'a
  val make_assert_test :
    ?title:string -> (unit -> 'a) -> ('-> 'b) -> ('-> unit) -> Test.t
  val make_simple_test : ?title:string -> (unit -> unit) -> Test.t
  val add_assert_test :
    ?title:string -> (unit -> 'a) -> ('-> 'b) -> ('-> unit) -> unit
  val add_simple_test : ?title:string -> (unit -> unit) -> unit
  val default_classifier : 'Test.classifier
  val default_reducer : 'Reducer.t
  val make_random_test :
    ?title:string ->
    ?nb_runs:int ->
    ?nb_tries:int ->
    ?classifier:'Test.classifier ->
    ?reducer:'Reducer.t ->
    ?reduce_depth:int ->
    ?reduce_smaller:('-> '-> bool) ->
    ?random_src:Generator.random ->
    'Generator.t -> ('-> 'b) -> ('a, 'b) Specification.t list -> Test.t
  val add_random_test :
    ?title:string ->
    ?nb_runs:int ->
    ?nb_tries:int ->
    ?classifier:'Test.classifier ->
    ?reducer:'Reducer.t ->
    ?reduce_depth:int ->
    ?reduce_smaller:('-> '-> bool) ->
    ?random_src:Generator.random ->
    'Generator.t -> ('-> 'b) -> ('a, 'b) Specification.t list -> unit
  val make_partial_random_test :
    ?title:string ->
    ?nb_runs:int ->
    ?nb_tries:int ->
    ?classifier:'Test.classifier ->
    ?reducer:'Reducer.t ->
    ?reduce_depth:int ->
    ?reduce_smaller:('-> '-> bool) ->
    ?random_src:Generator.random ->
    'Generator.t ->
    ('-> 'b) ->
    ('a, 'Specification.outcome) Specification.t list -> Test.t
  val add_partial_random_test :
    ?title:string ->
    ?nb_runs:int ->
    ?nb_tries:int ->
    ?classifier:'Test.classifier ->
    ?reducer:'Reducer.t ->
    ?reduce_depth:int ->
    ?reduce_smaller:('-> '-> bool) ->
    ?random_src:Generator.random ->
    'Generator.t ->
    ('-> 'b) -> ('a, 'Specification.outcome) Specification.t list -> unit
  val make_enum_test :
    ?title:string ->
    'Enumerator.t -> ('-> 'b) -> ('a, 'b) Specification.t list -> Test.t
  val add_enum_test :
    ?title:string ->
    'Enumerator.t -> ('-> 'b) -> ('a, 'b) Specification.t list -> unit
  val make_partial_enum_test :
    ?title:string ->
    'Enumerator.t ->
    ('-> 'b) ->
    ('a, 'Specification.outcome) Specification.t list -> Test.t
  val add_partial_enum_test :
    ?title:string ->
    'Enumerator.t ->
    ('-> 'b) -> ('a, 'Specification.outcome) Specification.t list -> unit
  val make_shell_test :
    ?title:string ->
    ([< `Input | `No_input ], [< `No_output | `Output ],
     [< `Error | `No_error ])
    Shell.command list -> Test.t
  val add_shell_test :
    ?title:string ->
    ([< `Input | `No_input ], [< `No_output | `Output ],
     [< `Error | `No_error ])
    Shell.command list -> unit
  val exec_test : Test.t -> Test.result
  val exec_tests : Test.t list -> Test.result list
  val run_test : ?output:Test.output_mode -> Test.t -> unit
  val run_tests : ?output:Test.output_mode -> Test.t list -> unit
  val launch_tests : ?output:Test.output_mode -> ?clear:bool -> unit -> unit
  val get_tests : unit -> Test.t list
  val check :
    ?title:string ->
    ?nb_runs:int ->
    ?nb_tries:int ->
    ?classifier:'Test.classifier ->
    ?random_src:Generator.random ->
    'Generator.t -> ('-> 'b) -> ('a, 'b) Specification.t list -> unit
  val check_partial :
    ?title:string ->
    ?nb_runs:int ->
    ?nb_tries:int ->
    ?classifier:'Test.classifier ->
    ?random_src:Generator.random ->
    'Generator.t ->
    ('-> 'b) -> ('a, 'Specification.outcome) Specification.t list -> unit
end