1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
open! Base
open! Import
let%test_module "Result.Error" =
(module struct
open Result.Error.Let_syntax
module Int_or_string = struct
type t = (int, string) Result.t [@@deriving equal, sexp_of]
end
let%expect_test "return" =
require_equal [%here] (module Int_or_string) (return "error") (Error "error");
[%expect {| |}]
;;
let%expect_test "bind Error" =
let result =
let%bind e1 = Error "e1" in
let%bind e2 = Error "e2" in
let%bind e3 = Error "e3" in
return (String.concat ~sep:"," [ e1; e2; e3 ])
in
require_equal [%here] (module Int_or_string) result (Error "e1,e2,e3");
[%expect {| |}]
;;
let%expect_test "bind Ok" =
let result =
let%bind e1 = Error "e1" in
let%bind e2 = Ok 1 in
let%bind e3 = Error "e3" in
return (String.concat ~sep:"," [ e1; e2; e3 ])
in
require_equal [%here] (module Int_or_string) result (Ok 1);
[%expect {| |}]
;;
let%expect_test "map Error" =
let result =
let%map e1 = Error "e1" in
e1 ^ "!"
in
require_equal [%here] (module Int_or_string) result (Error "e1!");
[%expect {| |}]
;;
let%expect_test "map Ok" =
let result =
let%map e1 = Ok 1 in
e1 ^ "!"
in
require_equal [%here] (module Int_or_string) result (Ok 1);
[%expect {| |}]
;;
(* The rest of the Monad functions are derived using the Monad.Make functor, which is
well-tested. *)
end)
;;
|