summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Peter <mail@david-peter.de>2022-05-15 21:11:22 +0200
committerDavid Peter <sharkdp@users.noreply.github.com>2022-05-15 21:37:40 +0200
commit339f6661ce9f729daae3461e728dc652e846a602 (patch)
treedb3f91c7b91ec5e483fcb9c67940c567c0e2dac4
parent4cdf2d51520e45a646697e00849e305df148e3d3 (diff)
Move determine_unit_from_results
-rw-r--r--src/export/markup.rs184
-rw-r--r--src/export/mod.rs182
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);
-}