From ef7b2ed03db414ff03c7a30909dda9a4b4a922bb Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Thu, 3 Oct 2024 22:42:36 +0100 Subject: [PATCH] test: add repetition of sequence --- benchmarks/benchmark.ml | 10 ++++++++++ lib_test/expect/test_repn.ml | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/benchmarks/benchmark.ml b/benchmarks/benchmark.ml index a50ad1fa..039c5615 100644 --- a/benchmarks/benchmark.ml +++ b/benchmarks/benchmark.ml @@ -89,6 +89,15 @@ let compile_clean_star = test ~name:"kleene star compilation" re (fun re -> ignore (Re.execp (re ()) s)) ;; +let repeated_sequence = + let s = String.init 256 ~f:Char.of_int_exn in + let re () = Re.repn (Re.str s) 50 (Some 50) |> Re.compile in + let s = List.init 50 ~f:(fun _ -> s) |> String.concat ~sep:"" in + test ~name:"repeated sequence re" re (fun re -> + let re = re () in + ignore (Re.execp re s)) +;; + let benchmarks = let benches = List.map benchmarks ~f:(fun (name, re, cases) -> @@ -134,6 +143,7 @@ let benchmarks = @ string_traversal @ compile_clean_star @ Memory.benchmarks + @ repeated_sequence ;; let () = diff --git a/lib_test/expect/test_repn.ml b/lib_test/expect/test_repn.ml index c908e531..080823ed 100644 --- a/lib_test/expect/test_repn.ml +++ b/lib_test/expect/test_repn.ml @@ -57,3 +57,22 @@ let%expect_test "opt" = 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 {||}] +;;