Store exit codes as Options (and remove unwrapping)

This commit is contained in:
Jordi Chauzi authored and David Peter committed 2021-05-10 14:55:04 +02:00
1 parent 3fcc6a187b
commit 5564407a97
5 files changed
+95 -99

No files matched your search

+5 -9
View File
@@ -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
+6 -6
View File
@@ -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());
+2 -2
View File
@@ -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());
+80 -80
View File
@@ -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(
+2 -2
View File
@@ -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 {