From 51f92c527da03499edc062457ef555ff2a1ca5c8 Mon Sep 17 00:00:00 2001 From: sharkdp Date: Sat, 8 Jun 2019 13:04:39 +0200 Subject: [PATCH] Add median run time to CSV and JSON export formats --- src/hyperfine/benchmark.rs | 4 +++- src/hyperfine/export/asciidoc.rs | 4 ++++ src/hyperfine/export/markdown.rs | 8 ++++++++ src/hyperfine/internal.rs | 1 + src/hyperfine/types.rs | 5 +++++ 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/hyperfine/benchmark.rs b/src/hyperfine/benchmark.rs index 890fde5..ac7172b 100644 --- a/src/hyperfine/benchmark.rs +++ b/src/hyperfine/benchmark.rs @@ -3,7 +3,7 @@ use std::io; use std::process::Stdio; use colored::*; -use statistical::{mean, standard_deviation}; +use statistical::{mean, median, standard_deviation}; use crate::hyperfine::format::{format_duration, format_duration_unit}; use crate::hyperfine::internal::{get_progress_bar, max, min, MIN_EXECUTION_TIME}; @@ -313,6 +313,7 @@ pub fn run_benchmark( let t_num = times_real.len(); let t_mean = mean(×_real); let t_stddev = standard_deviation(×_real, Some(t_mean)); + let t_median = median(×_real); let t_min = min(×_real); let t_max = max(×_real); @@ -394,6 +395,7 @@ pub fn run_benchmark( cmd.get_shell_command(), t_mean, t_stddev, + t_median, user_mean, system_mean, t_min, diff --git a/src/hyperfine/export/asciidoc.rs b/src/hyperfine/export/asciidoc.rs index 81d6c68..ea53179 100644 --- a/src/hyperfine/export/asciidoc.rs +++ b/src/hyperfine/export/asciidoc.rs @@ -87,6 +87,7 @@ fn test_asciidoc_table_row() { String::from("sleep 1"), // command 0.10491992406666667, // mean 0.00397851689425097, // stddev + 0.10491992406666667, // median 0.005182013333333333, // user 0.0, // system 0.1003342584, // min @@ -137,6 +138,7 @@ fn test_asciidoc_table_row_command_escape() { String::from("sleep 1|"), // command 0.10491992406666667, // mean 0.00397851689425097, // stddev + 0.10491992406666667, // median 0.005182013333333333, // user 0.0, // system 0.1003342584, // min @@ -174,6 +176,7 @@ fn test_asciidoc() { String::from("command | 1"), 1.0, 2.0, + 1.0, 3.0, 4.0, 5.0, @@ -185,6 +188,7 @@ fn test_asciidoc() { String::from("command | 2"), 11.0, 12.0, + 11.0, 13.0, 14.0, 15.0, diff --git a/src/hyperfine/export/markdown.rs b/src/hyperfine/export/markdown.rs index 617133d..9e75d30 100644 --- a/src/hyperfine/export/markdown.rs +++ b/src/hyperfine/export/markdown.rs @@ -84,6 +84,7 @@ fn test_markdown_format_ms() { String::from("sleep 0.1"), 0.1057, // mean 0.0016, // std dev + 0.1057, // median 0.0009, // user_mean 0.0011, // system_mean 0.1023, // min @@ -96,6 +97,7 @@ fn test_markdown_format_ms() { String::from("sleep 2"), 2.0050, // mean 0.0020, // std dev + 2.0050, // median 0.0009, // user_mean 0.0012, // system_mean 2.0020, // min @@ -129,6 +131,7 @@ fn test_markdown_format_s() { String::from("sleep 2"), 2.0050, // mean 0.0020, // std dev + 2.0050, // median 0.0009, // user_mean 0.0012, // system_mean 2.0020, // min @@ -141,6 +144,7 @@ fn test_markdown_format_s() { String::from("sleep 0.1"), 0.1057, // mean 0.0016, // std dev + 0.1057, // median 0.0009, // user_mean 0.0011, // system_mean 0.1023, // min @@ -173,6 +177,7 @@ fn test_markdown_format_time_unit_s() { String::from("sleep 0.1"), 0.1057, // mean 0.0016, // std dev + 0.1057, // median 0.0009, // user_mean 0.0011, // system_mean 0.1023, // min @@ -185,6 +190,7 @@ fn test_markdown_format_time_unit_s() { String::from("sleep 2"), 2.0050, // mean 0.0020, // std dev + 2.0050, // median 0.0009, // user_mean 0.0012, // system_mean 2.0020, // min @@ -223,6 +229,7 @@ fn test_markdown_format_time_unit_ms() { String::from("sleep 2"), 2.0050, // mean 0.0020, // std dev + 2.0050, // median 0.0009, // user_mean 0.0012, // system_mean 2.0020, // min @@ -235,6 +242,7 @@ fn test_markdown_format_time_unit_ms() { String::from("sleep 0.1"), 0.1057, // mean 0.0016, // std dev + 0.1057, // median 0.0009, // user_mean 0.0011, // system_mean 0.1023, // min diff --git a/src/hyperfine/internal.rs b/src/hyperfine/internal.rs index ead40ef..b0a3301 100644 --- a/src/hyperfine/internal.rs +++ b/src/hyperfine/internal.rs @@ -125,6 +125,7 @@ fn test_compute_relative_speed() { command: name.into(), mean: mean, stddev: 1.0, + median: mean, user: mean, system: 0.0, min: mean, diff --git a/src/hyperfine/types.rs b/src/hyperfine/types.rs index fbd71aa..63a395b 100644 --- a/src/hyperfine/types.rs +++ b/src/hyperfine/types.rs @@ -159,6 +159,9 @@ pub struct BenchmarkResult { /// The standard deviation of all run times pub stddev: Second, + /// The median run time + pub median: Second, + /// Time spend in user space pub user: Second, @@ -186,6 +189,7 @@ impl BenchmarkResult { command: String, mean: Second, stddev: Second, + median: Second, user: Second, system: Second, min: Second, @@ -197,6 +201,7 @@ impl BenchmarkResult { command, mean, stddev, + median, user, system, min,