mte/unikernel/duniverse/ocaml-re/lib_test/expect/test_mark.ml
2025-11-11 02:07:51 +01:00

53 lines
1.1 KiB
OCaml

open Import
open Re
let test_mark ?pos ?len r s il1 il2 =
let subs = exec ?pos ?len (compile r) s in
Format.printf
"%b@."
(List.for_all ~f:(Mark.test subs) il1
&& List.for_all ~f:(fun x -> not (Mark.test subs x)) il2)
;;
let%expect_test "mark" =
let i, r = mark digit in
test_mark r "0" [ i ] [];
[%expect {| true |}]
;;
let%expect_test "mark seq" =
let i, r = mark digit in
let r = seq [ r; r ] in
test_mark r "02" [ i ] [];
[%expect {| true |}]
;;
let%expect_test "mark rep" =
let i, r = mark digit in
let r = rep r in
test_mark r "02" [ i ] [];
[%expect {| true |}]
;;
let%expect_test "mark alt" =
let ia, ra = mark (char 'a') in
let ib, rb = mark (char 'b') in
let r = alt [ ra; rb ] in
test_mark r "a" [ ia ] [ ib ];
test_mark r "b" [ ib ] [ ia ];
[%expect {|
true
true |}];
let r = rep r in
test_mark r "ab" [ ia; ib ] [];
[%expect {| true |}]
;;
let%expect_test "mark prefers lhs" =
let two_chars = seq [ any; any ] in
let lhs, x = mark two_chars in
let rhs, x' = mark two_chars in
let r = alt [ x; x' ] in
test_mark r "aa" [ lhs ] [ rhs ];
[%expect {| true |}]
;;