mirror of
https://github.com/sharkdp/hyperfine.git
synced 2026-11-03 01:21:25 +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)]
|
#[cfg(unix)]
|
||||||
fn extract_exit_code(status: ExitStatus) -> i32 {
|
fn extract_exit_code(status: ExitStatus) -> Option<i32> {
|
||||||
use std::os::unix::process::ExitStatusExt;
|
use std::os::unix::process::ExitStatusExt;
|
||||||
|
|
||||||
/* From the ExitStatus::code documentation:
|
/* From the ExitStatus::code documentation:
|
||||||
"On Unix, this will return None if the process was terminated by a signal."
|
"On Unix, this will return None if the process was terminated by a signal."
|
||||||
In that case, ExitStatusExt::signal should never return None.
|
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))]
|
#[cfg(not(unix))]
|
||||||
fn extract_exit_code(status: ExitStatus) -> i32 {
|
fn extract_exit_code(status: ExitStatus) -> Option<i32> {
|
||||||
/* From the ExitStatus::code documentation:
|
status.code()
|
||||||
"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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Run the benchmark for a single shell command
|
/// 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_real: Vec<Second> = vec![];
|
||||||
let mut times_user: Vec<Second> = vec![];
|
let mut times_user: Vec<Second> = vec![];
|
||||||
let mut times_system: 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;
|
let mut all_succeeded = true;
|
||||||
|
|
||||||
// Run init command
|
// Run init command
|
||||||
|
|||||||
@@ -99,8 +99,8 @@ fn test_asciidoc_table_row() {
|
|||||||
0.10745223440000001,
|
0.10745223440000001,
|
||||||
0.10697327940000001,
|
0.10697327940000001,
|
||||||
],
|
],
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // param
|
BTreeMap::new(), // param
|
||||||
);
|
);
|
||||||
|
|
||||||
let expms = format!(
|
let expms = format!(
|
||||||
@@ -152,8 +152,8 @@ fn test_asciidoc_table_row_command_escape() {
|
|||||||
0.10745223440000001,
|
0.10745223440000001,
|
||||||
0.10697327940000001,
|
0.10697327940000001,
|
||||||
],
|
],
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // param
|
BTreeMap::new(), // param
|
||||||
);
|
);
|
||||||
let exps = format!(
|
let exps = format!(
|
||||||
"| `sleep 1\\|`\n\
|
"| `sleep 1\\|`\n\
|
||||||
@@ -187,7 +187,7 @@ fn test_asciidoc() {
|
|||||||
5.0,
|
5.0,
|
||||||
6.0,
|
6.0,
|
||||||
vec![7.0, 8.0, 9.0],
|
vec![7.0, 8.0, 9.0],
|
||||||
vec![0, 0, 0],
|
vec![Some(0), Some(0), Some(0)],
|
||||||
{
|
{
|
||||||
let mut params = BTreeMap::new();
|
let mut params = BTreeMap::new();
|
||||||
params.insert("foo".into(), "1".into());
|
params.insert("foo".into(), "1".into());
|
||||||
@@ -205,7 +205,7 @@ fn test_asciidoc() {
|
|||||||
15.0,
|
15.0,
|
||||||
16.0,
|
16.0,
|
||||||
vec![17.0, 18.0, 19.0],
|
vec![17.0, 18.0, 19.0],
|
||||||
vec![0, 0, 0],
|
vec![Some(0), Some(0), Some(0)],
|
||||||
{
|
{
|
||||||
let mut params = BTreeMap::new();
|
let mut params = BTreeMap::new();
|
||||||
params.insert("foo".into(), "1".into());
|
params.insert("foo".into(), "1".into());
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ fn test_csv() {
|
|||||||
5.0,
|
5.0,
|
||||||
6.0,
|
6.0,
|
||||||
vec![7.0, 8.0, 9.0],
|
vec![7.0, 8.0, 9.0],
|
||||||
vec![0, 0, 0],
|
vec![Some(0), Some(0), Some(0)],
|
||||||
{
|
{
|
||||||
let mut params = BTreeMap::new();
|
let mut params = BTreeMap::new();
|
||||||
params.insert("foo".into(), "one".into());
|
params.insert("foo".into(), "one".into());
|
||||||
@@ -86,7 +86,7 @@ fn test_csv() {
|
|||||||
15.0,
|
15.0,
|
||||||
16.5,
|
16.5,
|
||||||
vec![17.0, 18.0, 19.0],
|
vec![17.0, 18.0, 19.0],
|
||||||
vec![0, 0, 0],
|
vec![Some(0), Some(0), Some(0)],
|
||||||
{
|
{
|
||||||
let mut params = BTreeMap::new();
|
let mut params = BTreeMap::new();
|
||||||
params.insert("foo".into(), "one".into());
|
params.insert("foo".into(), "one".into());
|
||||||
|
|||||||
@@ -94,30 +94,30 @@ fn test_markdown_format_ms() {
|
|||||||
|
|
||||||
timing_results.push(BenchmarkResult::new(
|
timing_results.push(BenchmarkResult::new(
|
||||||
String::from("sleep 0.1"),
|
String::from("sleep 0.1"),
|
||||||
0.1057, // mean
|
0.1057, // mean
|
||||||
0.0016, // std dev
|
0.0016, // std dev
|
||||||
0.1057, // median
|
0.1057, // median
|
||||||
0.0009, // user_mean
|
0.0009, // user_mean
|
||||||
0.0011, // system_mean
|
0.0011, // system_mean
|
||||||
0.1023, // min
|
0.1023, // min
|
||||||
0.1080, // max
|
0.1080, // max
|
||||||
vec![0.1, 0.1, 0.1], // times
|
vec![0.1, 0.1, 0.1], // times
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // parameter
|
BTreeMap::new(), // parameter
|
||||||
));
|
));
|
||||||
|
|
||||||
timing_results.push(BenchmarkResult::new(
|
timing_results.push(BenchmarkResult::new(
|
||||||
String::from("sleep 2"),
|
String::from("sleep 2"),
|
||||||
2.0050, // mean
|
2.0050, // mean
|
||||||
0.0020, // std dev
|
0.0020, // std dev
|
||||||
2.0050, // median
|
2.0050, // median
|
||||||
0.0009, // user_mean
|
0.0009, // user_mean
|
||||||
0.0012, // system_mean
|
0.0012, // system_mean
|
||||||
2.0020, // min
|
2.0020, // min
|
||||||
2.0080, // max
|
2.0080, // max
|
||||||
vec![2.0, 2.0, 2.0], // times
|
vec![2.0, 2.0, 2.0], // times
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // parameter
|
BTreeMap::new(), // parameter
|
||||||
));
|
));
|
||||||
|
|
||||||
let formatted = String::from_utf8(exporter.serialize(&timing_results, None).unwrap()).unwrap();
|
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(
|
timing_results.push(BenchmarkResult::new(
|
||||||
String::from("sleep 2"),
|
String::from("sleep 2"),
|
||||||
2.0050, // mean
|
2.0050, // mean
|
||||||
0.0020, // std dev
|
0.0020, // std dev
|
||||||
2.0050, // median
|
2.0050, // median
|
||||||
0.0009, // user_mean
|
0.0009, // user_mean
|
||||||
0.0012, // system_mean
|
0.0012, // system_mean
|
||||||
2.0020, // min
|
2.0020, // min
|
||||||
2.0080, // max
|
2.0080, // max
|
||||||
vec![2.0, 2.0, 2.0], // times
|
vec![2.0, 2.0, 2.0], // times
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // parameter
|
BTreeMap::new(), // parameter
|
||||||
));
|
));
|
||||||
|
|
||||||
timing_results.push(BenchmarkResult::new(
|
timing_results.push(BenchmarkResult::new(
|
||||||
String::from("sleep 0.1"),
|
String::from("sleep 0.1"),
|
||||||
0.1057, // mean
|
0.1057, // mean
|
||||||
0.0016, // std dev
|
0.0016, // std dev
|
||||||
0.1057, // median
|
0.1057, // median
|
||||||
0.0009, // user_mean
|
0.0009, // user_mean
|
||||||
0.0011, // system_mean
|
0.0011, // system_mean
|
||||||
0.1023, // min
|
0.1023, // min
|
||||||
0.1080, // max
|
0.1080, // max
|
||||||
vec![0.1, 0.1, 0.1], // times
|
vec![0.1, 0.1, 0.1], // times
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // parameter
|
BTreeMap::new(), // parameter
|
||||||
));
|
));
|
||||||
|
|
||||||
let formatted = String::from_utf8(exporter.serialize(&timing_results, None).unwrap()).unwrap();
|
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(
|
timing_results.push(BenchmarkResult::new(
|
||||||
String::from("sleep 0.1"),
|
String::from("sleep 0.1"),
|
||||||
0.1057, // mean
|
0.1057, // mean
|
||||||
0.0016, // std dev
|
0.0016, // std dev
|
||||||
0.1057, // median
|
0.1057, // median
|
||||||
0.0009, // user_mean
|
0.0009, // user_mean
|
||||||
0.0011, // system_mean
|
0.0011, // system_mean
|
||||||
0.1023, // min
|
0.1023, // min
|
||||||
0.1080, // max
|
0.1080, // max
|
||||||
vec![0.1, 0.1, 0.1], // times
|
vec![0.1, 0.1, 0.1], // times
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // parameter
|
BTreeMap::new(), // parameter
|
||||||
));
|
));
|
||||||
|
|
||||||
timing_results.push(BenchmarkResult::new(
|
timing_results.push(BenchmarkResult::new(
|
||||||
String::from("sleep 2"),
|
String::from("sleep 2"),
|
||||||
2.0050, // mean
|
2.0050, // mean
|
||||||
0.0020, // std dev
|
0.0020, // std dev
|
||||||
2.0050, // median
|
2.0050, // median
|
||||||
0.0009, // user_mean
|
0.0009, // user_mean
|
||||||
0.0012, // system_mean
|
0.0012, // system_mean
|
||||||
2.0020, // min
|
2.0020, // min
|
||||||
2.0080, // max
|
2.0080, // max
|
||||||
vec![2.0, 2.0, 2.0], // times
|
vec![2.0, 2.0, 2.0], // times
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // parameter
|
BTreeMap::new(), // parameter
|
||||||
));
|
));
|
||||||
|
|
||||||
let formatted = String::from_utf8(
|
let formatted = String::from_utf8(
|
||||||
@@ -248,30 +248,30 @@ fn test_markdown_format_time_unit_ms() {
|
|||||||
|
|
||||||
timing_results.push(BenchmarkResult::new(
|
timing_results.push(BenchmarkResult::new(
|
||||||
String::from("sleep 2"),
|
String::from("sleep 2"),
|
||||||
2.0050, // mean
|
2.0050, // mean
|
||||||
0.0020, // std dev
|
0.0020, // std dev
|
||||||
2.0050, // median
|
2.0050, // median
|
||||||
0.0009, // user_mean
|
0.0009, // user_mean
|
||||||
0.0012, // system_mean
|
0.0012, // system_mean
|
||||||
2.0020, // min
|
2.0020, // min
|
||||||
2.0080, // max
|
2.0080, // max
|
||||||
vec![2.0, 2.0, 2.0], // times
|
vec![2.0, 2.0, 2.0], // times
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // parameter
|
BTreeMap::new(), // parameter
|
||||||
));
|
));
|
||||||
|
|
||||||
timing_results.push(BenchmarkResult::new(
|
timing_results.push(BenchmarkResult::new(
|
||||||
String::from("sleep 0.1"),
|
String::from("sleep 0.1"),
|
||||||
0.1057, // mean
|
0.1057, // mean
|
||||||
0.0016, // std dev
|
0.0016, // std dev
|
||||||
0.1057, // median
|
0.1057, // median
|
||||||
0.0009, // user_mean
|
0.0009, // user_mean
|
||||||
0.0011, // system_mean
|
0.0011, // system_mean
|
||||||
0.1023, // min
|
0.1023, // min
|
||||||
0.1080, // max
|
0.1080, // max
|
||||||
vec![0.1, 0.1, 0.1], // times
|
vec![0.1, 0.1, 0.1], // times
|
||||||
vec![0, 0, 0], // exit codes
|
vec![Some(0), Some(0), Some(0)], // exit codes
|
||||||
BTreeMap::new(), // parameter
|
BTreeMap::new(), // parameter
|
||||||
));
|
));
|
||||||
|
|
||||||
let formatted = String::from_utf8(
|
let formatted = String::from_utf8(
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ pub struct BenchmarkResult {
|
|||||||
pub times: Option<Vec<Second>>,
|
pub times: Option<Vec<Second>>,
|
||||||
|
|
||||||
/// All run exit codes
|
/// All run exit codes
|
||||||
pub exit_codes: Vec<i32>,
|
pub exit_codes: Vec<Option<i32>>,
|
||||||
|
|
||||||
/// Any parameter values used
|
/// Any parameter values used
|
||||||
#[serde(skip_serializing_if = "BTreeMap::is_empty")]
|
#[serde(skip_serializing_if = "BTreeMap::is_empty")]
|
||||||
@@ -288,7 +288,7 @@ impl BenchmarkResult {
|
|||||||
min: Second,
|
min: Second,
|
||||||
max: Second,
|
max: Second,
|
||||||
times: Vec<Second>,
|
times: Vec<Second>,
|
||||||
exit_codes: Vec<i32>,
|
exit_codes: Vec<Option<i32>>,
|
||||||
parameters: BTreeMap<String, String>,
|
parameters: BTreeMap<String, String>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
BenchmarkResult {
|
BenchmarkResult {
|
||||||
|
|||||||
Reference in new issue
Block a user