diff options
author | David Peter <mail@david-peter.de> | 2022-05-15 21:11:22 +0200 |
---|---|---|
committer | David Peter <sharkdp@users.noreply.github.com> | 2022-05-15 21:37:40 +0200 |
commit | 339f6661ce9f729daae3461e728dc652e846a602 (patch) | |
tree | db3f91c7b91ec5e483fcb9c67940c567c0e2dac4 | |
parent | 4cdf2d51520e45a646697e00849e305df148e3d3 (diff) |
Move determine_unit_from_results
-rw-r--r-- | src/export/markup.rs | 184 | ||||
-rw-r--r-- | src/export/mod.rs | 182 |
2 files changed, 183 insertions, 183 deletions
diff --git a/src/export/markup.rs b/src/export/markup.rs index a9ace49..1a04216 100644 --- a/src/export/markup.rs +++ b/src/export/markup.rs @@ -3,7 +3,7 @@ use crate::benchmark::{benchmark_result::BenchmarkResult, relative_speed}; use crate::output::format::format_duration_value; use crate::util::units::Unit; -use super::{determine_unit_from_results, Exporter}; +use super::Exporter; use anyhow::{anyhow, Result}; pub trait MarkupExporter { @@ -65,6 +65,16 @@ pub trait MarkupExporter { fn command(&self, size: &str) -> String; } +fn determine_unit_from_results(results: &[BenchmarkResult]) -> Unit { + if let Some(first_result) = results.first() { + // Use the first BenchmarkResult entry to determine the unit for all entries. + format_duration_value(first_result.mean, None).1 + } else { + // Default to `Second`. + Unit::Second + } +} + impl<T: MarkupExporter> Exporter for T { fn serialize(&self, results: &[BenchmarkResult], unit: Option<Unit>) -> Result<Vec<u8>> { let unit = unit.unwrap_or_else(|| determine_unit_from_results(&results)); @@ -79,3 +89,175 @@ impl<T: MarkupExporter> Exporter for T { Ok(table.as_bytes().to_vec()) } } + +/// Check unit resolving for timing results and given unit 's' +#[test] +fn test_determine_unit_from_results_unit_given_s() { + use std::collections::BTreeMap; + let results = vec![ + BenchmarkResult { + command: String::from("sleep 2"), + mean: 2.0050, + stddev: Some(0.0020), + median: 2.0050, + user: 0.0009, + system: 0.0012, + min: 2.0020, + max: 2.0080, + times: Some(vec![2.0, 2.0, 2.0]), + exit_codes: vec![Some(0), Some(0), Some(0)], + parameters: BTreeMap::new(), + }, + BenchmarkResult { + command: String::from("sleep 0.1"), + mean: 0.1057, + stddev: Some(0.0016), + median: 0.1057, + user: 0.0009, + system: 0.0011, + min: 0.1023, + max: 0.1080, + times: Some(vec![0.1, 0.1, 0.1]), + exit_codes: vec![Some(0), Some(0), Some(0)], + parameters: BTreeMap::new(), + }, + ]; + let unit = Some(Unit::Second); + + let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); + let markup_expected = Unit::Second; + + assert_eq!(markup_expected, markup_actual); +} + +/// Check unit resolving for timing results and given unit 'ms' +#[test] +fn test_determine_unit_from_results_unit_given_ms() { + use std::collections::BTreeMap; + let results = vec![ + BenchmarkResult { + command: String::from("sleep 2"), + mean: 2.0050, + stddev: Some(0.0020), + median: 2.0050, + user: 0.0009, + system: 0.0012, + min: 2.0020, + max: 2.0080, + times: Some(vec![2.0, 2.0, 2.0]), + exit_codes: vec![Some(0), Some(0), Some(0)], + parameters: BTreeMap::new(), + }, + BenchmarkResult { + command: String::from("sleep 0.1"), + mean: 0.1057, + stddev: Some(0.0016), + median: 0.1057, + user: 0.0009, + system: 0.0011, + min: 0.1023, + max: 0.1080, + times: Some(vec![0.1, 0.1, 0.1]), + exit_codes: vec![Some(0), Some(0), Some(0)], + parameters: BTreeMap::new(), + }, + ]; + let unit = Some(Unit::MilliSecond); + + let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); + let markup_expected = Unit::MilliSecond; + + assert_eq!(markup_expected, markup_actual); +} + +/// Check unit resolving for timing results using the first result entry as 's' +#[test] +fn test_determine_unit_from_results_unit_first_s() { + use std::collections::BTreeMap; + let results = vec![ + BenchmarkResult { + command: String::from("sleep 2"), + mean: 2.0050, + stddev: Some(0.0020), + median: 2.0050, + user: 0.0009, + system: 0.0012, + min: 2.0020, + max: 2.0080, + times: Some(vec![2.0, 2.0, 2.0]), + exit_codes: vec![Some(0), Some(0), Some(0)], + parameters: BTreeMap::new(), + }, + BenchmarkResult { + command: String::from("sleep 0.1"), + mean: 0.1057, + stddev: Some(0.0016), + median: 0.1057, + user: 0.0009, + system: 0.0011, + min: 0.1023, + max: 0.1080, + times: Some(vec![0.1, 0.1, 0.1]), + exit_codes: vec![Some(0), Some(0), Some(0)], + parameters: BTreeMap::new(), + }, + ]; + let unit = None; + + let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); + let markup_expected = Unit::Second; + + assert_eq!(markup_expected, markup_actual); +} + +/// Check unit resolving for timing results using the first result entry as 'ms' +#[test] +fn test_determine_unit_from_results_unit_first_ms() { + use std::collections::BTreeMap; + let results = vec![ + BenchmarkResult { + command: String::from("sleep 0.1"), + mean: 0.1057, + stddev: Some(0.0016), + median: 0.1057, + user: 0.0009, + system: 0.0011, + min: 0.1023, + max: 0.1080, + times: Some(vec![0.1, 0.1, 0.1]), + exit_codes: vec![Some(0), Some(0), Some(0)], + parameters: BTreeMap::new(), + }, + BenchmarkResult { + command: String::from("sleep 2"), + mean: 2.0050, + stddev: Some(0.0020), + median: 2.0050, + user: 0.0009, + system: 0.0012, + min: 2.0020, + max: 2.0080, + times: Some(vec![2.0, 2.0, 2.0]), + exit_codes: vec![Some(0), Some(0), Some(0)], + parameters: BTreeMap::new(), + }, + ]; + let unit = None; + + let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); + let markup_expected = Unit::MilliSecond; + + assert_eq!(markup_expected, markup_actual); +} + +/// Check unit resolving for not timing results and no given unit defaulting to 's' +#[test] +fn test_determine_unit_from_results_unit_default_s() { + let results: Vec<BenchmarkResult> = vec![]; + let unit = None; + + let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); + let markup_expected = Unit::Second; + + assert_eq!(markup_expected, markup_actual); +} diff --git a/src/export/mod.rs b/src/export/mod.rs index d6f8180..10d8bb2 100644 --- a/src/export/mod.rs +++ b/src/export/mod.rs @@ -13,21 +13,11 @@ use self::json::JsonExporter; use self::markdown::MarkdownExporter; use crate::benchmark::benchmark_result::BenchmarkResult; -use crate::output::format::format_duration_value; use crate::util::units::Unit; use anyhow::{Context, Result}; use clap::ArgMatches; -pub fn determine_unit_from_results(results: &[BenchmarkResult]) -> Unit { - if let Some(first_result) = results.first() { - // Use the first BenchmarkResult entry to determine the unit for all entries. - format_duration_value(first_result.mean, None).1 - } else { - // Default to `Second`. - Unit::Second - } -} /// The desired form of exporter to use for a given file. #[derive(Clone)] @@ -117,175 +107,3 @@ fn write_to_file(filename: &str, content: &[u8]) -> Result<()> { file.write_all(content) .with_context(|| format!("Failed to export results to '{}'", filename)) } - -/// Check unit resolving for timing results and given unit 's' -#[test] -fn test_determine_unit_from_results_unit_given_s() { - use std::collections::BTreeMap; - let results = vec![ - BenchmarkResult { - command: String::from("sleep 2"), - mean: 2.0050, - stddev: Some(0.0020), - median: 2.0050, - user: 0.0009, - system: 0.0012, - min: 2.0020, - max: 2.0080, - times: Some(vec![2.0, 2.0, 2.0]), - exit_codes: vec![Some(0), Some(0), Some(0)], - parameters: BTreeMap::new(), - }, - BenchmarkResult { - command: String::from("sleep 0.1"), - mean: 0.1057, - stddev: Some(0.0016), - median: 0.1057, - user: 0.0009, - system: 0.0011, - min: 0.1023, - max: 0.1080, - times: Some(vec![0.1, 0.1, 0.1]), - exit_codes: vec![Some(0), Some(0), Some(0)], - parameters: BTreeMap::new(), - }, - ]; - let unit = Some(Unit::Second); - - let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); - let markup_expected = Unit::Second; - - assert_eq!(markup_expected, markup_actual); -} - -/// Check unit resolving for timing results and given unit 'ms' -#[test] -fn test_determine_unit_from_results_unit_given_ms() { - use std::collections::BTreeMap; - let results = vec![ - BenchmarkResult { - command: String::from("sleep 2"), - mean: 2.0050, - stddev: Some(0.0020), - median: 2.0050, - user: 0.0009, - system: 0.0012, - min: 2.0020, - max: 2.0080, - times: Some(vec![2.0, 2.0, 2.0]), - exit_codes: vec![Some(0), Some(0), Some(0)], - parameters: BTreeMap::new(), - }, - BenchmarkResult { - command: String::from("sleep 0.1"), - mean: 0.1057, - stddev: Some(0.0016), - median: 0.1057, - user: 0.0009, - system: 0.0011, - min: 0.1023, - max: 0.1080, - times: Some(vec![0.1, 0.1, 0.1]), - exit_codes: vec![Some(0), Some(0), Some(0)], - parameters: BTreeMap::new(), - }, - ]; - let unit = Some(Unit::MilliSecond); - - let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); - let markup_expected = Unit::MilliSecond; - - assert_eq!(markup_expected, markup_actual); -} - -/// Check unit resolving for timing results using the first result entry as 's' -#[test] -fn test_determine_unit_from_results_unit_first_s() { - use std::collections::BTreeMap; - let results = vec![ - BenchmarkResult { - command: String::from("sleep 2"), - mean: 2.0050, - stddev: Some(0.0020), - median: 2.0050, - user: 0.0009, - system: 0.0012, - min: 2.0020, - max: 2.0080, - times: Some(vec![2.0, 2.0, 2.0]), - exit_codes: vec![Some(0), Some(0), Some(0)], - parameters: BTreeMap::new(), - }, - BenchmarkResult { - command: String::from("sleep 0.1"), - mean: 0.1057, - stddev: Some(0.0016), - median: 0.1057, - user: 0.0009, - system: 0.0011, - min: 0.1023, - max: 0.1080, - times: Some(vec![0.1, 0.1, 0.1]), - exit_codes: vec![Some(0), Some(0), Some(0)], - parameters: BTreeMap::new(), - }, - ]; - let unit = None; - - let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); - let markup_expected = Unit::Second; - - assert_eq!(markup_expected, markup_actual); -} - -/// Check unit resolving for timing results using the first result entry as 'ms' -#[test] -fn test_determine_unit_from_results_unit_first_ms() { - use std::collections::BTreeMap; - let results = vec![ - BenchmarkResult { - command: String::from("sleep 0.1"), - mean: 0.1057, - stddev: Some(0.0016), - median: 0.1057, - user: 0.0009, - system: 0.0011, - min: 0.1023, - max: 0.1080, - times: Some(vec![0.1, 0.1, 0.1]), - exit_codes: vec![Some(0), Some(0), Some(0)], - parameters: BTreeMap::new(), - }, - BenchmarkResult { - command: String::from("sleep 2"), - mean: 2.0050, - stddev: Some(0.0020), - median: 2.0050, - user: 0.0009, - system: 0.0012, - min: 2.0020, - max: 2.0080, - times: Some(vec![2.0, 2.0, 2.0]), - exit_codes: vec![Some(0), Some(0), Some(0)], - parameters: BTreeMap::new(), - }, - ]; - let unit = None; - - let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); - let markup_expected = Unit::MilliSecond; - - assert_eq!(markup_expected, markup_actual); -} - -/// Check unit resolving for not timing results and no given unit defaulting to 's' -#[test] -fn test_determine_unit_from_results_unit_default_s() { - let results: Vec<BenchmarkResult> = vec![]; - let unit = None; - - let markup_actual = unit.unwrap_or_else(|| determine_unit_from_results(&results)); - let markup_expected = Unit::Second; - - assert_eq!(markup_expected, markup_actual); -} |