@@ -110,15 +110,17 @@ module Stats = struct
110110 median : float ;
111111 sd : float ;
112112 inverted : bool ;
113+ best : float ;
113114 runs : int ;
114115 }
115116
116- let scale factor { mean; median; sd; inverted; runs } =
117+ let scale factor { mean; median; sd; inverted; best; runs } =
117118 {
118119 mean = mean *. factor;
119120 median = median *. factor;
120121 sd = sd *. factor;
121122 inverted;
123+ best = best *. factor;
122124 runs;
123125 }
124126
@@ -139,25 +141,34 @@ module Stats = struct
139141 let mean = mean_of times in
140142 let sd = sd_of times mean in
141143 let median = median_of times in
142- { mean; sd; median; inverted; runs }
144+ let best =
145+ if inverted then Array. fold_left Float. max Float. min_float times
146+ else Array. fold_left Float. min Float. max_float times
147+ in
148+ { mean; sd; median; inverted; best; runs }
143149
144150 let to_nonbreaking s =
145151 s |> String. split_on_char ' '
146152 |> String. concat " " (* a non-breaking space *)
147153
148154 let to_json ~name ~description ~units t =
149- let metric value =
155+ let trend =
156+ if t.inverted then `String " higher-is-better"
157+ else `String " lower-is-better"
158+ in
159+ [
150160 `Assoc
151161 [
152162 (" name" , `String (to_nonbreaking name));
153- (" value" , `Float value );
163+ (" value" , `Float t.median );
154164 (" units" , `String units);
155- ( " trend" ,
156- if t.inverted then `String " higher-is-better"
157- else `String " lower-is-better" );
165+ (" trend" , trend);
158166 (" description" , `String description);
167+ (" #best" , `Float t.best);
168+ (" #mean" , `Float t.mean);
169+ (" #median" , `Float t.median);
170+ (" #sd" , `Float t.sd);
159171 (" #runs" , `Int t.runs);
160- ]
161- in
162- [ metric t.median ]
172+ ];
173+ ]
163174end
0 commit comments