(values)
| 1295 | } |
| 1296 | |
| 1297 | function percentileStats(values) { |
| 1298 | if (!values.length) { |
| 1299 | return { p50: null, p95: null, p99: null, avg: null, max: null }; |
| 1300 | } |
| 1301 | const ordered = [...values].sort((a, b) => a - b); |
| 1302 | return { |
| 1303 | p50: percentile(ordered, 50), |
| 1304 | p95: percentile(ordered, 95), |
| 1305 | p99: percentile(ordered, 99), |
| 1306 | avg: ordered.reduce((sum, value) => sum + value, 0) / ordered.length, |
| 1307 | max: ordered[ordered.length - 1], |
| 1308 | }; |
| 1309 | } |
| 1310 | |
| 1311 | function percentile(values, pct) { |
| 1312 | if (!values.length) { |
no test coverage detected