package core_bench
Source file measurement.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 52open Core type t = { name : string ; test_name : string ; file_name : string ; module_name : string ; largest_run : int ; sample_count : int ; samples : Measurement_sample.t array } [@@deriving sexp, fields] let create ~name ~test_name ~file_name ~module_name ~largest_run ~sample_count ~samples = { name; test_name; file_name; module_name; largest_run; sample_count; samples } ;; let save t ~filename = Verbosity.print_high "%s: Writing %d samples to file: %s.%!\n" t.name t.sample_count filename; let header1 = "# " ^ String.escaped t.name in let header2 = Measurement_sample.field_names_to_string () in let ls = List.rev (Array.foldi t.samples ~init:[] ~f:(fun i ls cur -> if i < t.sample_count then Measurement_sample.field_values_to_string cur :: ls else ls)) in Out_channel.write_lines filename (header1 :: header2 :: ls) ;; let load ~filename = match In_channel.read_lines filename with | header1 :: _header2 :: data -> let name = String.subo ~pos:2 header1 |> Scanf.unescaped in let test_name = "" in let file_name = "" in let module_name = "" in let samples = Array.of_list (List.map data ~f:Measurement_sample.of_field_values_string) in let sample_count = Array.length samples in let largest_run = Measurement_sample.max samples ~len:sample_count ~field:Measurement_sample.runs in { name; test_name; file_name; module_name; sample_count; largest_run; samples } | _ -> failwith "Bad header format for saved metrics file." ;;