From 9b328ff35428c24891897757dab549aa1abfc27e Mon Sep 17 00:00:00 2001 From: David Peter Date: Sun, 22 Aug 2021 19:08:08 +0200 Subject: [PATCH] Move BenchmarkResult to new file --- src/hyperfine/benchmark.rs | 2 +- src/hyperfine/benchmark_result.rs | 77 ++++++++++++++++++++++++++++++ src/hyperfine/export/asciidoc.rs | 2 +- src/hyperfine/export/csv.rs | 2 +- src/hyperfine/export/json.rs | 2 +- src/hyperfine/export/markdown.rs | 2 +- src/hyperfine/export/mod.rs | 2 +- src/hyperfine/internal.rs | 2 +- src/hyperfine/mod.rs | 1 + src/hyperfine/types.rs | 78 +------------------------------ 10 files changed, 86 insertions(+), 84 deletions(-) create mode 100644 src/hyperfine/benchmark_result.rs diff --git a/src/hyperfine/benchmark.rs b/src/hyperfine/benchmark.rs index e984633..2c03d3d 100644 --- a/src/hyperfine/benchmark.rs +++ b/src/hyperfine/benchmark.rs @@ -5,6 +5,7 @@ use std::process::{ExitStatus, Stdio}; use colored::*; use statistical::{mean, median, standard_deviation}; +use crate::hyperfine::benchmark_result::BenchmarkResult; use crate::hyperfine::command::Command; use crate::hyperfine::format::{format_duration, format_duration_unit}; use crate::hyperfine::internal::{get_progress_bar, max, min, MIN_EXECUTION_TIME}; @@ -13,7 +14,6 @@ use crate::hyperfine::outlier_detection::{modified_zscores, OUTLIER_THRESHOLD}; use crate::hyperfine::shell::execute_and_time; use crate::hyperfine::timer::wallclocktimer::WallClockTimer; use crate::hyperfine::timer::{TimerStart, TimerStop}; -use crate::hyperfine::types::BenchmarkResult; use crate::hyperfine::units::Second; use crate::hyperfine::warnings::Warnings; diff --git a/src/hyperfine/benchmark_result.rs b/src/hyperfine/benchmark_result.rs new file mode 100644 index 0000000..4c64640 --- /dev/null +++ b/src/hyperfine/benchmark_result.rs @@ -0,0 +1,77 @@ +use serde::Serialize; +use std::collections::BTreeMap; + +use crate::hyperfine::units::Second; + +/// Set of values that will be exported. +// NOTE: `serde` is used for JSON serialization, but not for CSV serialization due to the +// `parameters` map. Update `src/hyperfine/export/csv.rs` with new fields, as appropriate. +#[derive(Debug, Default, Clone, Serialize, PartialEq)] +pub struct BenchmarkResult { + /// The command that was run + pub command: String, + + /// The mean run time + pub mean: Second, + + /// 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, + + /// Time spent in system space + pub system: Second, + + /// Min time measured + pub min: Second, + + /// Max time measured + pub max: Second, + + /// All run time measurements + #[serde(skip_serializing_if = "Option::is_none")] + pub times: Option>, + + /// All run exit codes + pub exit_codes: Vec>, + + /// Any parameter values used + #[serde(skip_serializing_if = "BTreeMap::is_empty")] + pub parameters: BTreeMap, +} + +impl BenchmarkResult { + /// Create a new entry with the given values. + #[allow(clippy::too_many_arguments)] + pub fn new( + command: String, + mean: Second, + stddev: Second, + median: Second, + user: Second, + system: Second, + min: Second, + max: Second, + times: Vec, + exit_codes: Vec>, + parameters: BTreeMap, + ) -> Self { + BenchmarkResult { + command, + mean, + stddev, + median, + user, + system, + min, + max, + times: Some(times), + exit_codes, + parameters, + } + } +} diff --git a/src/hyperfine/export/asciidoc.rs b/src/hyperfine/export/asciidoc.rs index 08623bf..d3c2f73 100644 --- a/src/hyperfine/export/asciidoc.rs +++ b/src/hyperfine/export/asciidoc.rs @@ -1,7 +1,7 @@ use super::Exporter; +use crate::hyperfine::benchmark_result::BenchmarkResult; use crate::hyperfine::format::format_duration_value; -use crate::hyperfine::types::BenchmarkResult; use crate::hyperfine::units::Unit; use std::io::Result; diff --git a/src/hyperfine/export/csv.rs b/src/hyperfine/export/csv.rs index 12d9b75..b48168f 100644 --- a/src/hyperfine/export/csv.rs +++ b/src/hyperfine/export/csv.rs @@ -1,6 +1,6 @@ use super::Exporter; -use crate::hyperfine::types::BenchmarkResult; +use crate::hyperfine::benchmark_result::BenchmarkResult; use crate::hyperfine::units::Unit; use std::borrow::Cow; diff --git a/src/hyperfine/export/json.rs b/src/hyperfine/export/json.rs index 85e6949..5eb4dad 100644 --- a/src/hyperfine/export/json.rs +++ b/src/hyperfine/export/json.rs @@ -1,5 +1,5 @@ use super::Exporter; -use crate::hyperfine::types::BenchmarkResult; +use crate::hyperfine::benchmark_result::BenchmarkResult; use crate::hyperfine::units::Unit; use std::io::{Error, ErrorKind, Result}; diff --git a/src/hyperfine/export/markdown.rs b/src/hyperfine/export/markdown.rs index 3d7a2e2..0e82d71 100644 --- a/src/hyperfine/export/markdown.rs +++ b/src/hyperfine/export/markdown.rs @@ -1,8 +1,8 @@ use super::Exporter; +use crate::hyperfine::benchmark_result::BenchmarkResult; use crate::hyperfine::format::format_duration_value; use crate::hyperfine::internal::{compute_relative_speed, BenchmarkResultWithRelativeSpeed}; -use crate::hyperfine::types::BenchmarkResult; use crate::hyperfine::units::Unit; use std::io::{Error, ErrorKind, Result}; diff --git a/src/hyperfine/export/mod.rs b/src/hyperfine/export/mod.rs index d213dc3..dd19ab4 100644 --- a/src/hyperfine/export/mod.rs +++ b/src/hyperfine/export/mod.rs @@ -11,7 +11,7 @@ use self::markdown::MarkdownExporter; use std::fs::{File, OpenOptions}; use std::io::{Result, Write}; -use crate::hyperfine::types::BenchmarkResult; +use crate::hyperfine::benchmark_result::BenchmarkResult; use crate::hyperfine::units::Unit; /// The desired form of exporter to use for a given file. diff --git a/src/hyperfine/internal.rs b/src/hyperfine/internal.rs index 7c93f56..b3a0303 100644 --- a/src/hyperfine/internal.rs +++ b/src/hyperfine/internal.rs @@ -1,8 +1,8 @@ use colored::*; use indicatif::{ProgressBar, ProgressStyle}; +use crate::hyperfine::benchmark_result::BenchmarkResult; use crate::hyperfine::options::OutputStyleOption; -use crate::hyperfine::types::BenchmarkResult; use crate::hyperfine::units::{Scalar, Second}; use std::cmp::Ordering; diff --git a/src/hyperfine/mod.rs b/src/hyperfine/mod.rs index 7ec7636..ac6a9bd 100644 --- a/src/hyperfine/mod.rs +++ b/src/hyperfine/mod.rs @@ -1,5 +1,6 @@ pub mod app; pub mod benchmark; +pub mod benchmark_result; pub mod command; pub mod error; pub mod export; diff --git a/src/hyperfine/types.rs b/src/hyperfine/types.rs index 2fc8351..25417a5 100644 --- a/src/hyperfine/types.rs +++ b/src/hyperfine/types.rs @@ -1,13 +1,10 @@ -use serde::*; -use std::collections::BTreeMap; +use serde::Serialize; use std::convert::TryFrom; use std::fmt; use rust_decimal::prelude::ToPrimitive; use rust_decimal::Decimal; -use crate::hyperfine::units::Second; - #[derive(Debug, Clone, Serialize, Copy, PartialEq, Eq)] #[serde(untagged)] pub enum NumericType { @@ -64,76 +61,3 @@ impl<'a> ToString for ParameterValue { } } } - -/// Set of values that will be exported. -// NOTE: `serde` is used for JSON serialization, but not for CSV serialization due to the -// `parameters` map. Update `src/hyperfine/export/csv.rs` with new fields, as appropriate. -#[derive(Debug, Default, Clone, Serialize, PartialEq)] -pub struct BenchmarkResult { - /// The command that was run - pub command: String, - - /// The mean run time - pub mean: Second, - - /// 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, - - /// Time spent in system space - pub system: Second, - - /// Min time measured - pub min: Second, - - /// Max time measured - pub max: Second, - - /// All run time measurements - #[serde(skip_serializing_if = "Option::is_none")] - pub times: Option>, - - /// All run exit codes - pub exit_codes: Vec>, - - /// Any parameter values used - #[serde(skip_serializing_if = "BTreeMap::is_empty")] - pub parameters: BTreeMap, -} - -impl BenchmarkResult { - /// Create a new entry with the given values. - #[allow(clippy::too_many_arguments)] - pub fn new( - command: String, - mean: Second, - stddev: Second, - median: Second, - user: Second, - system: Second, - min: Second, - max: Second, - times: Vec, - exit_codes: Vec>, - parameters: BTreeMap, - ) -> Self { - BenchmarkResult { - command, - mean, - stddev, - median, - user, - system, - min, - max, - times: Some(times), - exit_codes, - parameters, - } - } -}