mirror of
https://github.com/sharkdp/hyperfine.git
synced 2026-10-30 16:40:18 +00:00
Store exit codes as Options (and remove unwrapping)
This commit is contained in:
1 parent
3fcc6a187b
commit
5564407a97
5 files changed
+95
-99
No files matched your search
@@ -202,23 +202,19 @@ fn run_cleanup_command(
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
fn extract_exit_code(status: ExitStatus) -> i32 {
|
||||
fn extract_exit_code(status: ExitStatus) -> Option<i32> {
|
||||
use std::os::unix::process::ExitStatusExt;
|
||||
|
||||
/* From the ExitStatus::code documentation:
|
||||
"On Unix, this will return None if the process was terminated by a signal."
|
||||
In that case, ExitStatusExt::signal should never return None.
|
||||
*/
|
||||
status.code().unwrap_or_else(|| status.signal().unwrap())
|
||||
status.code().or_else(|| status.signal())
|
||||
}
|
||||
|
||||
#[cfg(not(unix))]
|
||||
fn extract_exit_code(status: ExitStatus) -> i32 {
|
||||
/* From the ExitStatus::code documentation:
|
||||
"On Unix, this will return None if the process was terminated by a signal."
|
||||
On the other configurations, ExitStatus::code should never return None.
|
||||
*/
|
||||
status.code().unwrap()
|
||||
fn extract_exit_code(status: ExitStatus) -> Option<i32> {
|
||||
status.code()
|
||||
}
|
||||
|
||||
/// Run the benchmark for a single shell command
|
||||
@@ -248,7 +244,7 @@ pub fn run_benchmark(
|
||||
let mut times_real: Vec<Second> = vec![];
|
||||
let mut times_user: Vec<Second> = vec![];
|
||||
let mut times_system: Vec<Second> = vec![];
|
||||
let mut exit_codes: Vec<i32> = vec![];
|
||||
let mut exit_codes: Vec<Option<i32>> = vec![];
|
||||
let mut all_succeeded = true;
|
||||
|
||||
// Run init command
|
||||
|
||||
@@ -99,8 +99,8 @@ fn test_asciidoc_table_row() {
|
||||
0.10745223440000001,
|
||||
0.10697327940000001,
|
||||
],
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // param
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // param
|
||||
);
|
||||
|
||||
let expms = format!(
|
||||
@@ -152,8 +152,8 @@ fn test_asciidoc_table_row_command_escape() {
|
||||
0.10745223440000001,
|
||||
0.10697327940000001,
|
||||
],
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // param
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // param
|
||||
);
|
||||
let exps = format!(
|
||||
"| `sleep 1\\|`\n\
|
||||
@@ -187,7 +187,7 @@ fn test_asciidoc() {
|
||||
5.0,
|
||||
6.0,
|
||||
vec![7.0, 8.0, 9.0],
|
||||
vec![0, 0, 0],
|
||||
vec![Some(0), Some(0), Some(0)],
|
||||
{
|
||||
let mut params = BTreeMap::new();
|
||||
params.insert("foo".into(), "1".into());
|
||||
@@ -205,7 +205,7 @@ fn test_asciidoc() {
|
||||
15.0,
|
||||
16.0,
|
||||
vec![17.0, 18.0, 19.0],
|
||||
vec![0, 0, 0],
|
||||
vec![Some(0), Some(0), Some(0)],
|
||||
{
|
||||
let mut params = BTreeMap::new();
|
||||
params.insert("foo".into(), "1".into());
|
||||
|
||||
@@ -68,7 +68,7 @@ fn test_csv() {
|
||||
5.0,
|
||||
6.0,
|
||||
vec![7.0, 8.0, 9.0],
|
||||
vec![0, 0, 0],
|
||||
vec![Some(0), Some(0), Some(0)],
|
||||
{
|
||||
let mut params = BTreeMap::new();
|
||||
params.insert("foo".into(), "one".into());
|
||||
@@ -86,7 +86,7 @@ fn test_csv() {
|
||||
15.0,
|
||||
16.5,
|
||||
vec![17.0, 18.0, 19.0],
|
||||
vec![0, 0, 0],
|
||||
vec![Some(0), Some(0), Some(0)],
|
||||
{
|
||||
let mut params = BTreeMap::new();
|
||||
params.insert("foo".into(), "one".into());
|
||||
|
||||
@@ -94,30 +94,30 @@ fn test_markdown_format_ms() {
|
||||
|
||||
timing_results.push(BenchmarkResult::new(
|
||||
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
|
||||
0.1080, // max
|
||||
vec![0.1, 0.1, 0.1], // times
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
0.1057, // mean
|
||||
0.0016, // std dev
|
||||
0.1057, // median
|
||||
0.0009, // user_mean
|
||||
0.0011, // system_mean
|
||||
0.1023, // min
|
||||
0.1080, // max
|
||||
vec![0.1, 0.1, 0.1], // times
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
));
|
||||
|
||||
timing_results.push(BenchmarkResult::new(
|
||||
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
|
||||
2.0080, // max
|
||||
vec![2.0, 2.0, 2.0], // times
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
2.0050, // mean
|
||||
0.0020, // std dev
|
||||
2.0050, // median
|
||||
0.0009, // user_mean
|
||||
0.0012, // system_mean
|
||||
2.0020, // min
|
||||
2.0080, // max
|
||||
vec![2.0, 2.0, 2.0], // times
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
));
|
||||
|
||||
let formatted = String::from_utf8(exporter.serialize(&timing_results, None).unwrap()).unwrap();
|
||||
@@ -144,30 +144,30 @@ fn test_markdown_format_s() {
|
||||
|
||||
timing_results.push(BenchmarkResult::new(
|
||||
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
|
||||
2.0080, // max
|
||||
vec![2.0, 2.0, 2.0], // times
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
2.0050, // mean
|
||||
0.0020, // std dev
|
||||
2.0050, // median
|
||||
0.0009, // user_mean
|
||||
0.0012, // system_mean
|
||||
2.0020, // min
|
||||
2.0080, // max
|
||||
vec![2.0, 2.0, 2.0], // times
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
));
|
||||
|
||||
timing_results.push(BenchmarkResult::new(
|
||||
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
|
||||
0.1080, // max
|
||||
vec![0.1, 0.1, 0.1], // times
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
0.1057, // mean
|
||||
0.0016, // std dev
|
||||
0.1057, // median
|
||||
0.0009, // user_mean
|
||||
0.0011, // system_mean
|
||||
0.1023, // min
|
||||
0.1080, // max
|
||||
vec![0.1, 0.1, 0.1], // times
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
));
|
||||
|
||||
let formatted = String::from_utf8(exporter.serialize(&timing_results, None).unwrap()).unwrap();
|
||||
@@ -193,30 +193,30 @@ fn test_markdown_format_time_unit_s() {
|
||||
|
||||
timing_results.push(BenchmarkResult::new(
|
||||
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
|
||||
0.1080, // max
|
||||
vec![0.1, 0.1, 0.1], // times
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
0.1057, // mean
|
||||
0.0016, // std dev
|
||||
0.1057, // median
|
||||
0.0009, // user_mean
|
||||
0.0011, // system_mean
|
||||
0.1023, // min
|
||||
0.1080, // max
|
||||
vec![0.1, 0.1, 0.1], // times
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
));
|
||||
|
||||
timing_results.push(BenchmarkResult::new(
|
||||
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
|
||||
2.0080, // max
|
||||
vec![2.0, 2.0, 2.0], // times
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
2.0050, // mean
|
||||
0.0020, // std dev
|
||||
2.0050, // median
|
||||
0.0009, // user_mean
|
||||
0.0012, // system_mean
|
||||
2.0020, // min
|
||||
2.0080, // max
|
||||
vec![2.0, 2.0, 2.0], // times
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
));
|
||||
|
||||
let formatted = String::from_utf8(
|
||||
@@ -248,30 +248,30 @@ fn test_markdown_format_time_unit_ms() {
|
||||
|
||||
timing_results.push(BenchmarkResult::new(
|
||||
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
|
||||
2.0080, // max
|
||||
vec![2.0, 2.0, 2.0], // times
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
2.0050, // mean
|
||||
0.0020, // std dev
|
||||
2.0050, // median
|
||||
0.0009, // user_mean
|
||||
0.0012, // system_mean
|
||||
2.0020, // min
|
||||
2.0080, // max
|
||||
vec![2.0, 2.0, 2.0], // times
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
));
|
||||
|
||||
timing_results.push(BenchmarkResult::new(
|
||||
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
|
||||
0.1080, // max
|
||||
vec![0.1, 0.1, 0.1], // times
|
||||
vec![0, 0, 0], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
0.1057, // mean
|
||||
0.0016, // std dev
|
||||
0.1057, // median
|
||||
0.0009, // user_mean
|
||||
0.0011, // system_mean
|
||||
0.1023, // min
|
||||
0.1080, // max
|
||||
vec![0.1, 0.1, 0.1], // times
|
||||
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||
BTreeMap::new(), // parameter
|
||||
));
|
||||
|
||||
let formatted = String::from_utf8(
|
||||
|
||||
@@ -269,7 +269,7 @@ pub struct BenchmarkResult {
|
||||
pub times: Option<Vec<Second>>,
|
||||
|
||||
/// All run exit codes
|
||||
pub exit_codes: Vec<i32>,
|
||||
pub exit_codes: Vec<Option<i32>>,
|
||||
|
||||
/// Any parameter values used
|
||||
#[serde(skip_serializing_if = "BTreeMap::is_empty")]
|
||||
@@ -288,7 +288,7 @@ impl BenchmarkResult {
|
||||
min: Second,
|
||||
max: Second,
|
||||
times: Vec<Second>,
|
||||
exit_codes: Vec<i32>,
|
||||
exit_codes: Vec<Option<i32>>,
|
||||
parameters: BTreeMap<String, String>,
|
||||
) -> Self {
|
||||
BenchmarkResult {
|
||||
|
||||
Reference in new issue
Block a user