78 lines
2 KiB
OCaml
78 lines
2 KiB
OCaml
open Import
|
|
open Re
|
|
|
|
let%expect_test "fixed repetition" =
|
|
let re = Re.compile @@ Re.(repn (char 'a') 3 (Some 3)) in
|
|
let test s = printf "%b\n" (Re.execp re s) in
|
|
test "";
|
|
[%expect {| false |}];
|
|
test "aa";
|
|
[%expect {| false |}];
|
|
test "aaa";
|
|
[%expect {| true |}];
|
|
test "aaaa";
|
|
[%expect {| true |}]
|
|
;;
|
|
|
|
let%expect_test "repn" =
|
|
let a = char 'a' in
|
|
test_re (repn a 0 None) "";
|
|
[%expect {| [| (0, 0) |] |}];
|
|
test_re (repn a 2 None) "a";
|
|
[%expect {| Not_found |}];
|
|
test_re (repn a 2 None) "aa";
|
|
[%expect {| [| (0, 2) |] |}];
|
|
test_re (repn a 0 (Some 0)) "";
|
|
[%expect {| [| (0, 0) |] |}];
|
|
test_re (repn a 1 (Some 2)) "a";
|
|
[%expect {| [| (0, 1) |] |}];
|
|
test_re (repn a 1 (Some 2)) "aa";
|
|
[%expect {| [| (0, 2) |] |}];
|
|
test_re (repn a 1 (Some 2)) "";
|
|
[%expect {| Not_found |}];
|
|
test_re (repn a 1 (Some 2)) "aaa";
|
|
[%expect {| [| (0, 2) |] |}];
|
|
invalid_argument (fun () -> repn empty (-1) None);
|
|
[%expect {| Invalid_argument "Re.repn" |}];
|
|
invalid_argument (fun () -> repn empty 1 (Some 0));
|
|
[%expect {| Invalid_argument "Re.repn" |}];
|
|
invalid_argument (fun () -> repn empty 4 (Some 3));
|
|
[%expect {| Invalid_argument "Re.repn" |}]
|
|
;;
|
|
|
|
let%expect_test "rep1" =
|
|
test_re (rep1 (char 'a')) "a";
|
|
[%expect {| [| (0, 1) |] |}];
|
|
test_re (rep1 (char 'a')) "aa";
|
|
[%expect {| [| (0, 2) |] |}];
|
|
test_re (rep1 (char 'a')) "";
|
|
[%expect {| Not_found |}];
|
|
test_re (rep1 (char 'a')) "b";
|
|
[%expect {| Not_found |}]
|
|
;;
|
|
|
|
let%expect_test "opt" =
|
|
test_re (opt (char 'a')) "";
|
|
[%expect {| [| (0, 0) |] |}];
|
|
test_re (opt (char 'a')) "a";
|
|
[%expect {| [| (0, 1) |] |}]
|
|
;;
|
|
|
|
let copy s n =
|
|
let len = String.length s in
|
|
let b = Bytes.make (len * n) '\000' in
|
|
for i = 0 to n - 1 do
|
|
Bytes.blit_string s 0 b (i * len) len
|
|
done;
|
|
Bytes.to_string b
|
|
;;
|
|
|
|
let%expect_test "repeat sequence" =
|
|
let s = "abcde" in
|
|
let re = str s |> rep |> whole_string |> compile in
|
|
for i = 0 to 3 do
|
|
let r = copy s i in
|
|
assert (Re.execp re r)
|
|
done;
|
|
[%expect {||}]
|
|
;;
|