File: test_result.ml

package info (click to toggle)
janest-base 0.17.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,632 kB
  • sloc: ml: 48,653; ansic: 281; javascript: 126; makefile: 14
file content (60 lines) | stat: -rw-r--r-- 1,552 bytes parent folder | download | duplicates (3)
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)
;;