From fb9b30c7f8d349ed99a7cf88dfcebe4ef0324c8d Mon Sep 17 00:00:00 2001 From: Tuomas Siipola Date: Wed, 4 Jul 2018 00:13:06 +0300 Subject: [PATCH] Support parameter in preparation command --- src/hyperfine/benchmark.rs | 22 ++++++++++++---------- src/hyperfine/types.rs | 4 ++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/hyperfine/benchmark.rs b/src/hyperfine/benchmark.rs index 5877ae4..04dfff7 100644 --- a/src/hyperfine/benchmark.rs +++ b/src/hyperfine/benchmark.rs @@ -131,16 +131,11 @@ pub fn mean_shell_spawning_time( /// Run the command specified by `--prepare`. fn run_preparation_command( - command: &Option, + command: &Option, show_output: bool, ) -> io::Result { - if let &Some(ref preparation_command) = command { - let res = time_shell_command( - &Command::new(preparation_command), - show_output, - CmdFailureAction::RaiseError, - None, - ); + if let Some(ref cmd) = command { + let res = time_shell_command(cmd, show_output, CmdFailureAction::RaiseError, None); if res.is_err() { return Err(io::Error::new( io::ErrorKind::Other, @@ -198,7 +193,14 @@ pub fn run_benchmark( ); // Run init / cleanup command - let prepare_res = run_preparation_command(&options.preparation_command, options.show_output)?; + let prepare_cmd = options + .preparation_command + .as_ref() + .map(|preparation_command| match cmd.get_parameter() { + Some((param, value)) => Command::new_parametrized(preparation_command, param, value), + None => Command::new(preparation_command), + }); + let prepare_res = run_preparation_command(&prepare_cmd, options.show_output)?; // Initial timing run let (res, success) = time_shell_command( @@ -233,7 +235,7 @@ pub fn run_benchmark( // Gather statistics for _ in 0..count_remaining { - run_preparation_command(&options.preparation_command, options.show_output)?; + run_preparation_command(&prepare_cmd, options.show_output)?; let msg = { let mean = format_duration(mean(×_real), None); diff --git a/src/hyperfine/types.rs b/src/hyperfine/types.rs index 2835360..23baf22 100644 --- a/src/hyperfine/types.rs +++ b/src/hyperfine/types.rs @@ -38,6 +38,10 @@ impl<'a> Command<'a> { None => self.expression.into(), } } + + pub fn get_parameter(&self) -> Option<(&'a str, i32)> { + self.parameter + } } impl<'a> fmt::Display for Command<'a> {