sig
  type failure = {
    expected_value : string;
    actual_value : string;
    message : string;
  }
  exception Failed of Assertion.failure
  val fail : string -> string -> string -> 'a
  val fail_msg : string -> 'a
  val default_printer : 'a -> string
  val equal :
    ?eq:('a -> 'a -> bool) ->
    ?prn:('a -> string) -> ?msg:string -> 'a -> 'a -> unit
  val not_equal :
    ?eq:('a -> 'a -> bool) ->
    ?prn:('a -> string) -> ?msg:string -> 'a -> 'a -> unit
  val same : ?prn:('a -> string) -> ?msg:string -> 'a -> 'a -> unit
  val not_same : ?prn:('a -> string) -> ?msg:string -> 'a -> 'a -> unit
  val make_equal :
    ('a -> 'a -> bool) -> ('a -> string) -> ?msg:string -> 'a -> 'a -> unit
  val make_not_equal :
    ('a -> 'a -> bool) -> ('a -> string) -> ?msg:string -> 'a -> 'a -> unit
  val make_equal_array :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a array -> 'a array -> unit
  val make_not_equal_array :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a array -> 'a array -> unit
  val make_equal_list :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a list -> 'a list -> unit
  val make_not_equal_list :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a list -> 'a list -> unit
  val make_equal_hashtbl :
    ('b -> 'b -> bool) ->
    ('a -> string) ->
    ('b -> string) ->
    ?msg:string -> ('a, 'b) Hashtbl.t -> ('a, 'b) Hashtbl.t -> unit
  val make_not_equal_hashtbl :
    ('b -> 'b -> bool) ->
    ('a -> string) ->
    ('b -> string) ->
    ?msg:string -> ('a, 'b) Hashtbl.t -> ('a, 'b) Hashtbl.t -> unit
  module type Printer =
    sig type t val to_string : Assertion.Printer.t -> string end
  module Map :
    functor (M : Map.S) ->
      functor (P : sig type t = M.key val to_string : t -> string end) ->
        sig
          val make_equal :
            ('a -> 'a -> bool) ->
            ('a -> string) -> ?msg:string -> 'a M.t -> 'a M.t -> unit
          val make_not_equal :
            ('a -> 'a -> bool) ->
            ('a -> string) -> ?msg:string -> 'a M.t -> 'a M.t -> unit
        end
  module Set :
    functor (S : Set.S) ->
      functor (P : sig type t = S.elt val to_string : t -> string end) ->
        sig
          val equal : ?msg:string -> S.t -> S.t -> unit
          val not_equal : ?msg:string -> S.t -> S.t -> unit
        end
  val make_equal_queue :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a Queue.t -> 'a Queue.t -> unit
  val make_not_equal_queue :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a Queue.t -> 'a Queue.t -> unit
  val make_equal_stack :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a Stack.t -> 'a Stack.t -> unit
  val make_not_equal_stack :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a Stack.t -> 'a Stack.t -> unit
  val make_equal_weak :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a Weak.t -> 'a Weak.t -> unit
  val make_not_equal_weak :
    ('a -> 'a -> bool) ->
    ('a -> string) -> ?msg:string -> 'a Weak.t -> 'a Weak.t -> unit
  val equal_bool : ?msg:string -> bool -> bool -> unit
  val not_equal_bool : ?msg:string -> bool -> bool -> unit
  val equal_int : ?msg:string -> int -> int -> unit
  val not_equal_int : ?msg:string -> int -> int -> unit
  val equal_int32 : ?msg:string -> int32 -> int32 -> unit
  val not_equal_int32 : ?msg:string -> int32 -> int32 -> unit
  val equal_int64 : ?msg:string -> int64 -> int64 -> unit
  val not_equal_int64 : ?msg:string -> int64 -> int64 -> unit
  val equal_nativeint : ?msg:string -> nativeint -> nativeint -> unit
  val not_equal_nativeint : ?msg:string -> nativeint -> nativeint -> unit
  val equal_char : ?msg:string -> char -> char -> unit
  val not_equal_char : ?msg:string -> char -> char -> unit
  val equal_string : ?msg:string -> string -> string -> unit
  val not_equal_string : ?msg:string -> string -> string -> unit
  val equal_float : ?eps:float -> ?msg:string -> float -> float -> unit
  val not_equal_float : ?eps:float -> ?msg:string -> float -> float -> unit
  val equal_complex :
    ?eps:float -> ?msg:string -> Complex.t -> Complex.t -> unit
  val not_equal_complex :
    ?eps:float -> ?msg:string -> Complex.t -> Complex.t -> unit
  val is_true : ?msg:string -> bool -> unit
  val is_false : ?msg:string -> bool -> unit
  val is_some : ?msg:string -> 'a option -> unit
  val is_none : ?msg:string -> 'a option -> unit
  val raises : ?msg:string -> (unit -> 'a) -> unit
  val no_raise : ?msg:string -> (unit -> 'a) -> unit
  val make_raises :
    (exn -> bool) -> (exn -> string) -> ?msg:string -> (unit -> 'a) -> unit
end