sig
  module Only_in_test :
    sig
      type 'a t
      type 'a monad = 'a t
      val ( >>= ) : 'a monad -> ('-> 'b monad) -> 'b monad
      val ( >>| ) : 'a monad -> ('-> 'b) -> 'b monad
      module Monad_infix :
        sig
          type 'a monad = 'a monad
          val ( >>= ) : 'a monad -> ('-> 'b monad) -> 'b monad
          val ( >>| ) : 'a monad -> ('-> 'b) -> 'b monad
        end
      val bind : 'a monad -> ('-> 'b monad) -> 'b monad
      val return : '-> 'a monad
      val map : 'a monad -> f:('-> 'b) -> 'b monad
      val join : 'a monad monad -> 'a monad
      val ignore : 'a monad -> unit monad
      val of_thunk : (unit -> 'a) -> 'Utest.Only_in_test.t
      val all : 'Utest.Only_in_test.t list -> 'a list Utest.Only_in_test.t
    end
  module type S =
    sig
      val register :
        ?get_location:(unit -> unit) -> unit Utest.Only_in_test.t -> unit
      val register_thunk :
        ?get_location:(unit -> unit) -> (unit -> unit) -> unit
      val run_tests_and_exit : unit -> unit
      val run_tests : unit -> bool
    end
  module Make : functor (Dummy : sig  end-> S
  val debug_printf : ('a, unit, string, unit) Pervasives.format4 -> 'a
  module Debug_compare :
    functor
      (S : sig
             type t
             val sexp_of_t : Utest.Debug_compare.t -> Sexplib.Sexp.t
             val t_of_sexp : Sexplib.Sexp.t -> Utest.Debug_compare.t
             val compare :
               Utest.Debug_compare.t -> Utest.Debug_compare.t -> int
           end->
      sig
        val equal : S.t -> S.t -> bool
        val compare : S.t -> S.t -> int
        val ascending : S.t -> S.t -> int
        val descending : S.t -> S.t -> int
        val min : S.t -> S.t -> S.t
        val max : S.t -> S.t -> S.t
        val ( >= ) : S.t -> S.t -> bool
        val ( <= ) : S.t -> S.t -> bool
        val ( = ) : S.t -> S.t -> bool
        val ( > ) : S.t -> S.t -> bool
        val ( < ) : S.t -> S.t -> bool
        val ( <> ) : S.t -> S.t -> bool
      end
end