sig
  module Test :
    sig
      type t = Bench.Test.t
      val create : ?name:string -> ?size:int -> (unit -> unit) -> t
      val name : t -> string option
      val size : t -> int option
    end
  module Result :
    sig
      module Stat :
        sig
          type t =
            Bench.Result.Stat.t = {
            run_time : Core.Std.Int63.t;
            gc_time : Core.Std.Int63.t;
            sample_size : int;
            compactions : int;
            allocated : int;
          }
          val empty : t
        end
      type t = string option * int option * Stat.t array
      val mean : Stat.t array -> Stat.t
      val min : Stat.t array -> Stat.t
      val max : Stat.t array -> Stat.t
      val stdev : Stat.t array -> float option
      val compactions_occurred : Stat.t array -> bool
      val sample_size : Stat.t array -> int
    end
  type 'a with_benchmark_flags =
      ?verbosity:[ `High | `Low | `Mid ] ->
      ?gc_prefs:Core.Std.Gc.Control.t ->
      ?no_compactions:bool -> ?fast:bool -> ?clock:[ `Cpu | `Wall ] -> 'a
  type 'a with_print_flags =
      ?time_format:[ `Auto | `Ms | `Ns | `S | `Us ] -> 'a
  val bench :
    (Test.t list -> unit) with_benchmark_flags with_print_flags
    Core.Std.Or_error.t
  val bench_raw :
    (Test.t list -> Result.t list) with_benchmark_flags Core.Std.Or_error.t
  val print : (Result.t list -> unit) with_print_flags
  val ounit_tests : unit -> OUnit.test
end