Files

51 lines
1.9 KiB
OCaml

open Fieldglass
let sample : (string * bool, string) lens' =
lens ~view:fst ~set:(fun value (_, other) -> value, other)
let () = assert (view sample ("colour", true) = "colour")
let () =
let source = "colour", true in
assert (set sample "grey" source = ("grey", true));
assert (set sample (view sample source) source = source);
assert (set sample "blue" (set sample "grey" source) = set sample "blue" source);
let calls = ref 0 in
assert (over sample ~f:(fun text -> incr calls; text ^ "s") source = ("colours", true));
assert (!calls = 1)
let () =
let first = (fst, fun value (_, rest) -> value, rest) in
let second = (snd, fun value (rest, _) -> rest, value) in
let focus = compose first second in
assert (view focus ((true, "grey"), false) = "grey");
assert (set focus 9 ((true, "grey"), false) = ((true, 9), false))
let () =
assert (set _1 "grey" (1, true) = ("grey", true));
assert (over _2 ~f:string_of_int (false, 9) = (false, "9"));
assert (view (compose _1 _2) ((true, "grey"), ()) = "grey")
let () =
assert (set _id "grey" 9 = "grey");
assert (view (compose _id _1) (9, false) = view _1 (9, false));
assert (set (compose _2 _id) "grey" (true, 9) = set _2 "grey" (true, 9))
let () =
assert (view _hd [1; 2] = 1);
assert (view _tl [1] = []);
assert (set _hd 3 [1; 2] = [3; 2]);
assert (set _tl [3; 4] [1; 2] = [1; 3; 4]);
List.iter (fun action ->
try action (); assert false with Invalid_argument _ -> ())
[(fun () -> ignore (view _hd [])); (fun () -> ignore (view _tl []));
(fun () -> ignore (set _hd 1 [])); (fun () -> ignore (set _tl [] []))]
let () =
let open Infix in
assert ((9, false) ^. _1 = 9);
assert ((_2 ^~ "grey") (true, 9) = (true, "grey"));
assert ((_1 ^% succ) (9, false) = (10, false));
assert (((_1 ^> _2) ^~ 3) ((true, 9), false) = ((true, 3), false));
assert (((_2 ^< _1) ^~ 3) ((true, 9), false) = ((true, 3), false))