mte/unikernel/duniverse/base/test/test_option.ml
2025-11-11 02:07:51 +01:00

50 lines
1.1 KiB
OCaml

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 {| () |}]
;;