sig
  module Test :
    sig
      type t
      val create :
        ?name:string -> ?size:int -> (unit -> unit) -> Bench.Test.t
      val name : Bench.Test.t -> string option
      val size : Bench.Test.t -> int option
    end
  module Result :
    sig
      module Stat :
        sig
          type t = {
            run_time : Core.Std.Int63.t;
            run_cycles : int;
            gc_time : Core.Std.Int63.t;
            sample_size : int;
            compactions : int;
            minor_allocated : int;
            major_allocated : int;
            promoted : int;
          }
          val empty : Bench.Result.Stat.t
        end
      type t = string option * int option * Bench.Result.Stat.t array
      val mean : Bench.Result.Stat.t array -> Bench.Result.Stat.t
      val min : Bench.Result.Stat.t array -> Bench.Result.Stat.t
      val max : Bench.Result.Stat.t array -> Bench.Result.Stat.t
      val stdev : Bench.Result.Stat.t array -> float option
      val compactions_occurred : Bench.Result.Stat.t array -> bool
      val sample_size : Bench.Result.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 ] ->
      ?limit_width_to:int -> 'a
  val bench :
    (Bench.Test.t list -> unit) Bench.with_benchmark_flags
    Bench.with_print_flags
  val bench_raw :
    (Bench.Test.t list -> Bench.Result.t list) Bench.with_benchmark_flags
  val print : (Bench.Result.t list -> unit) Bench.with_print_flags
  val ounit_tests : unit -> OUnit.test
end