Alcotest provides pleasant test output vs. the dune default, not being silent in success and being much more verbose and useful in failure.
(* test/test_russian.ml: no-framework testing *)
open Flash
let () =
let open Russian.Emphasis in
let emph = "компью́тер" in
assert ("компьютер" = strip_emphasis emph);
assert (emph = quote_to_emphasis "компью'тер")
In failure:
$ dune test
File "test/dune", line 2, characters 19-31:
2 | (names test_flash test_russian)
^^^^^^^^^^^^
Fatal error: exception File "test/test_russian.ml", line 6, characters 2-8: Assertion failed
vs. alcotest:
let utf8_string = Alcotest.testable (Fmt.quote Fmt.string) String.equal
(** required to avoid output like
Expected: `"\208\186\208\190\208\188\208\191\209\140\209\142'\209\130\208\181\209\128"'
*)
let emph = "компью́тер"
let test_strip_emphasis () =
Alcotest.(check utf8_string)
"same string" "компьютер"
(Flash.Russian.Emphasis.strip_emphasis emph)
let test_quote_to_emphasis () =
Alcotest.(check utf8_string)
"same string" emph
(Flash.Russian.Emphasis.quote_to_emphasis "компью'тер")
let () =
let open Alcotest in
run "Flash"
[
( "Russian",
[
test_case "strip_emphasis" `Quick test_strip_emphasis;
test_case "quote_to_emphasis" `Quick test_quote_to_emphasis;
] );
]
and failure:
$ dune test
File "test/dune", line 2, characters 8-18:
2 | (names test_flash test_russian)
^^^^^^^^^^
Testing `Flash'.
This run has ID `YSOX49CY'.
[OK] Russian 0 strip_emphasis.
> [FAIL] Russian 1 quote_to_emphasis.
┌───────────────────────────────────────────────────────────────────────────────────────────┐
│ [FAIL] Russian 1 quote_to_emphasis. │
└───────────────────────────────────────────────────────────────────────────────────────────┘
ASSERT same string
FAIL same string
Expected: `"компью'тер"'
Received: `"компью́тер"'
Raised at Alcotest_engine__Test.check in file "src/alcotest-engine/test.ml", lines 216-226, characters 4-19
Called from Alcotest_engine__Core.Make.protect_test.(fun) in file "src/alcotest-engine/core.ml", line 186, characters 17-23
Called from Alcotest_engine__Monad.Identity.catch in file "src/alcotest-engine/monad.ml", line 24, characters 31-35
Logs saved to `~/ocaml/flash/_build/default/test/_build/_tests/Flash/Russian.001.output'.
───────────────────────────────────────────────────────────────────────────────────────────
Full test results in `~/ocaml/flash/_build/default/test/_build/_tests/Flash'.
1 failure! in 0.000s. 4 tests run.