sig
  type expected_test_outcome =
      ExpectPass
    | ExpectFail
    | ExpectException of exn
  type test_outcome = Pass | Fail | UPass | XFail | Unresolved of string
  type test =
      TestCase of string * Utest.expected_test_outcome * (unit -> bool)
  type test_results = {
    total : int;
    passed : int;
    failed : int;
    upassed : int;
    xfailed : int;
    unresolved : int;
  }
  val testcase :
    string -> Utest.expected_test_outcome -> (unit -> bool) -> Utest.test
  val expect_pass : string -> (unit -> bool) -> Utest.test
  val expect_fail : string -> (unit -> bool) -> Utest.test
  val expect_exception : string -> exn -> (unit -> bool) -> Utest.test
  exception InconsistentFixture
  val eval_with_imperative_fixture :
    (unit -> 'fix) ->
    ('fix -> Utest.test) -> ('fix -> unit) -> unit -> Utest.test
  val eval_with_functional_fixture :
    (unit -> 'fix) -> ('fix -> Utest.test) -> unit -> Utest.test
  type verbosity =
      PrintNothing
    | PrintFailedTests
    | PrintTestTotals
    | PrintAllTests
  val run_tests :
    Utest.verbosity -> (unit -> Utest.test) list -> Utest.test_results
end