package core_bench
Benchmarking library
Install
Dune Dependency
Authors
Maintainers
Sources
v0.17.0.tar.gz
sha256=a093a77179629a8baef03f58947aac9cf5da37cc0ed7fabdd651832c4fe4cfe5
doc/src/core_bench.inline_benchmarks/common.ml.html
Source file common.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
open Core open Core_bench module Entry = Ppx_bench_lib.Benchmark_accumulator.Entry let make_benchmark_name entry = let module_name = match Entry.get_module_name_opt entry with | Some s -> ":" ^ s | None -> "" in let bench_module_name = match entry.Entry.bench_module_name with | Some s -> ":" ^ s | None -> "" in String.concat [ "["; entry.Entry.filename; module_name; bench_module_name; "] "; entry.Entry.name ] ;; (* Code for filtering the out the benchmarks to run *) let entry_to_bench_test entry ~key = let open Entry in let name = make_benchmark_name entry in let test_name = entry.name in let file_name = entry.filename in let module_name = entry.bench_module_name in match entry.Entry.test_spec with | Regular_thunk f -> Bench.Test.create_with_initialization ~name ~test_name ~file_name ?module_name ~key f | Parameterised_thunk { params; thunk; _ } -> Bench.Test.create_parameterised ~name ~test_name ~file_name ?module_name ~args:params ~key (fun len -> Staged.stage (thunk len)) ;; let pattern_to_predicate s = let regexp = Re.Perl.compile_pat s in fun name -> Re.execp regexp name ;; let get_matching_tests ~libname patterns = let tbl = Int.Table.create () in let entries = Ppx_bench_lib.Benchmark_accumulator.lookup_lib ~libname in let entries = match patterns with (* if no regexes are specified, run all entries *) | [] -> entries | _ :: _ -> let filter = let preds = List.map patterns ~f:pattern_to_predicate in fun name -> List.exists preds ~f:(fun pred -> pred name) in (* for parameterized tests we must include the param in the filter (so we can filter to "size:1000" or what have you.) *) List.filter_map entries ~f:(fun entry -> let name = make_benchmark_name entry in match entry.Entry.test_spec with | Regular_thunk _ -> Option.some_if (filter name) entry | Parameterised_thunk { params; arg_name; thunk } -> let params = List.filter params ~f:(fun (p, _) -> let name = name ^ ":" ^ p in filter name) in (match params with | [] -> None | _ :: _ -> Some (Entry.with_test_spec entry (Parameterised_thunk { params; arg_name; thunk })))) in let tests = List.map entries ~f:(fun entry -> let key = entry.Entry.unique_id in Hashtbl.add_exn tbl ~key ~data:entry; entry_to_bench_test entry ~key) in tbl, tests ;; let get_matching_tests_no_dups ~libname patterns = let _tbl, tests = get_matching_tests ~libname patterns in let tests = List.dedup_and_sort tests ~compare:(fun t1 t2 -> String.compare (Bench.Test.name t1) (Bench.Test.name t2)) in tests ;;
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>