File: test_option.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 (50 lines) | stat: -rw-r--r-- 1,157 bytes parent folder | download | duplicates (2)
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
open! Import
open! Option

let f = ( + )
let%test _ = [%compare.equal: int t] (merge None None ~f) None
let%test _ = [%compare.equal: int t] (merge (Some 3) None ~f) (Some 3)
let%test _ = [%compare.equal: int t] (merge None (Some 3) ~f) (Some 3)
let%test _ = [%compare.equal: int t] (merge (Some 1) (Some 3) ~f) (Some 4)

let%expect_test "[value_or_thunk]" =
  let default () =
    print_endline "THUNK!";
    0
  in
  let value_or_thunk = value_or_thunk ~default in
  let test t = print_s [%sexp (value_or_thunk t : int)] in
  (* trigger the thunk *)
  test None;
  [%expect {|
    THUNK!
    0
    |}];
  (* same value, no trigger *)
  test (Some 0);
  [%expect {| 0 |}];
  (* different value *)
  test (Some 1);
  [%expect {| 1 |}];
  (* trigger the thunk again: no memoization *)
  test None;
  [%expect {|
    THUNK!
    0
    |}]
;;

let%expect_test "map2" =
  let m t1 t2 =
    let result = Option.map2 ~f:(fun x y -> x + y) t1 t2 in
    print_s [%sexp (result : int Option.t)]
  in
  m None None;
  [%expect {| () |}];
  m (Some 1) (Some 2);
  [%expect {| (3) |}];
  m None (Some 1);
  [%expect {| () |}];
  m (Some 1) None;
  [%expect {| () |}]
;;