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 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..ffa2188 100644 --- a/src/measurements.rs +++ b/src/measurements.rs @@ -134,13 +134,35 @@ 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 q1 = if length % 2 == 0 { median(&sorted_data[0..length / 2]) } else {