31 lines
906 B
OCaml
31 lines
906 B
OCaml
open Core
|
|
(* This set of benchmarks is designed for testing re's memory usage rather than
|
|
speed. *)
|
|
|
|
module Bench = Core_bench.Bench
|
|
|
|
let size = 1_000
|
|
|
|
(* a pathological re that will consume a bunch of memory *)
|
|
let re () =
|
|
let open Re in
|
|
compile @@ seq [ rep (set "01"); char '1'; repn (set "01") size (Some size) ]
|
|
;;
|
|
|
|
(* Another pathological case that is a simplified version of the above *)
|
|
let re2 () =
|
|
let open Re in
|
|
seq [ rep (set "01"); char '1'; repn (set "01") size (Some size); char 'x' ] |> compile
|
|
;;
|
|
|
|
let str = "01" ^ String.make size '1'
|
|
|
|
let benchmarks =
|
|
[ "memory 1", re; "memory 2", re2 ]
|
|
|> ListLabels.map ~f:(fun (name, re) ->
|
|
Bench.Test.create_indexed ~name ~args:[ 10; 20; 40; 80; 100; size ] (fun len ->
|
|
Staged.stage (fun () ->
|
|
let re = re () in
|
|
let len = Int.min (String.length str) len in
|
|
ignore (Re.execp ~pos:0 ~len re str))))
|
|
;;
|