From 11fc8a7411b7cc503537e5116b057ea8c8d02a1f Mon Sep 17 00:00:00 2001 From: "Robin B (aider)" Date: Sun, 2 Feb 2025 14:04:45 +0100 Subject: [PATCH 1/4] feat: support `--nr-tests` < 4 and adapt stats calculation --- src/lib.rs | 4 ++-- src/measurements.rs | 27 ++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 5438b91..54ce84b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -39,8 +39,8 @@ impl OutputFormat { #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] pub struct SpeedTestCLIOptions { - /// Number of test runs per payload size. Needs to be at least 4 - #[arg(value_parser = clap::value_parser!(u32).range(4..1000), short, long, default_value_t = 10)] + /// Number of test runs per payload size. + #[arg(value_parser = clap::value_parser!(u32).range(1..1000), short, long, default_value_t = 10)] pub nr_tests: u32, /// Number of latency tests to run diff --git a/src/measurements.rs b/src/measurements.rs index a5a20cd..221173a 100644 --- a/src/measurements.rs +++ b/src/measurements.rs @@ -134,13 +134,38 @@ fn log_measurements_by_test_type( fn calc_stats(mbit_measurements: Vec) -> Option<(f64, f64, f64, f64, f64, f64)> { log::debug!("calc_stats for mbit_measurements {mbit_measurements:?}"); let length = mbit_measurements.len(); - if length < 4 { + if length == 0 { return None; } let mut sorted_data = mbit_measurements.clone(); sorted_data.sort_by(|a, b| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Less)); + if length == 1 { + return Some(( + sorted_data[0], + sorted_data[0], + sorted_data[0], + sorted_data[0], + sorted_data[0], + sorted_data[0], + )); + } + + if length < 4 { + return Some(( + *sorted_data.first().unwrap(), + *sorted_data.first().unwrap(), + median(&sorted_data), + *sorted_data.last().unwrap(), + *sorted_data.last().unwrap(), + mbit_measurements.iter().sum::() / mbit_measurements.len() as f64, + )); + } + + let mut sorted_data = mbit_measurements.clone(); + sorted_data.sort_by(|a, b| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Less)); + let q1 = if length % 2 == 0 { median(&sorted_data[0..length / 2]) } else { From 588adce93115dd8cc869b4da845e3a1d93af9b21 Mon Sep 17 00:00:00 2001 From: "Robin B (aider)" Date: Sun, 2 Feb 2025 14:11:49 +0100 Subject: [PATCH 2/4] docs: update README to reflect nr-tests change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e6ddd1e..e4afe06 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Usage: cfspeedtest [OPTIONS] Options: -n, --nr-tests - Number of test runs per payload size. Needs to be at least 4 [default: 10] + Number of test runs per payload size [default: 10] --nr-latency-tests Number of latency tests to run [default: 25] -m, --max-payload-size From 85e075dffeca5908f7e44d3cbb32a6b1a49d5769 Mon Sep 17 00:00:00 2001 From: "Robin B (aider)" Date: Sun, 2 Feb 2025 14:31:32 +0100 Subject: [PATCH 3/4] refactor: Remove redundant sorting in calc_stats function --- src/measurements.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/measurements.rs b/src/measurements.rs index 221173a..957c7f8 100644 --- a/src/measurements.rs +++ b/src/measurements.rs @@ -160,11 +160,9 @@ fn calc_stats(mbit_measurements: Vec) -> Option<(f64, f64, f64, f64, f64, f *sorted_data.last().unwrap(), *sorted_data.last().unwrap(), mbit_measurements.iter().sum::() / mbit_measurements.len() as f64, - )); - } - - let mut sorted_data = mbit_measurements.clone(); - sorted_data.sort_by(|a, b| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Less)); + mbit_measurements.iter().sum::() / mbit_measurements.len() as f64, + )); +} let q1 = if length % 2 == 0 { median(&sorted_data[0..length / 2]) From 248b3491117b22cab9eaa4136c17156667226593 Mon Sep 17 00:00:00 2001 From: "Robin B (aider)" Date: Sun, 2 Feb 2025 14:33:40 +0100 Subject: [PATCH 4/4] fix: remove duplicate element in tuple in calc_stats function --- src/measurements.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/measurements.rs b/src/measurements.rs index 957c7f8..ffa2188 100644 --- a/src/measurements.rs +++ b/src/measurements.rs @@ -160,9 +160,8 @@ fn calc_stats(mbit_measurements: Vec) -> Option<(f64, f64, f64, f64, f64, f *sorted_data.last().unwrap(), *sorted_data.last().unwrap(), mbit_measurements.iter().sum::() / mbit_measurements.len() as f64, - mbit_measurements.iter().sum::() / mbit_measurements.len() as f64, - )); -} + )); + } let q1 = if length % 2 == 0 { median(&sorted_data[0..length / 2])