Skip to content

Commit c26d95f

Browse files
Allow --nr-tests to be less than 4 (#166)
* feat: support `--nr-tests` < 4 and adapt stats calculation * docs: update README to reflect nr-tests change * refactor: Remove redundant sorting in calc_stats function * fix: remove duplicate element in tuple in calc_stats function
1 parent 28f6369 commit c26d95f

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Usage: cfspeedtest [OPTIONS]
2727
2828
Options:
2929
-n, --nr-tests <NR_TESTS>
30-
Number of test runs per payload size. Needs to be at least 4 [default: 10]
30+
Number of test runs per payload size [default: 10]
3131
--nr-latency-tests <NR_LATENCY_TESTS>
3232
Number of latency tests to run [default: 25]
3333
-m, --max-payload-size <MAX_PAYLOAD_SIZE>

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ impl OutputFormat {
3939
#[derive(Parser, Debug)]
4040
#[command(author, version, about, long_about = None)]
4141
pub struct SpeedTestCLIOptions {
42-
/// Number of test runs per payload size. Needs to be at least 4
43-
#[arg(value_parser = clap::value_parser!(u32).range(4..1000), short, long, default_value_t = 10)]
42+
/// Number of test runs per payload size.
43+
#[arg(value_parser = clap::value_parser!(u32).range(1..1000), short, long, default_value_t = 10)]
4444
pub nr_tests: u32,
4545

4646
/// Number of latency tests to run

src/measurements.rs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,35 @@ fn log_measurements_by_test_type(
134134
fn calc_stats(mbit_measurements: Vec<f64>) -> Option<(f64, f64, f64, f64, f64, f64)> {
135135
log::debug!("calc_stats for mbit_measurements {mbit_measurements:?}");
136136
let length = mbit_measurements.len();
137-
if length < 4 {
137+
if length == 0 {
138138
return None;
139139
}
140140

141141
let mut sorted_data = mbit_measurements.clone();
142142
sorted_data.sort_by(|a, b| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Less));
143143

144+
if length == 1 {
145+
return Some((
146+
sorted_data[0],
147+
sorted_data[0],
148+
sorted_data[0],
149+
sorted_data[0],
150+
sorted_data[0],
151+
sorted_data[0],
152+
));
153+
}
154+
155+
if length < 4 {
156+
return Some((
157+
*sorted_data.first().unwrap(),
158+
*sorted_data.first().unwrap(),
159+
median(&sorted_data),
160+
*sorted_data.last().unwrap(),
161+
*sorted_data.last().unwrap(),
162+
mbit_measurements.iter().sum::<f64>() / mbit_measurements.len() as f64,
163+
));
164+
}
165+
144166
let q1 = if length % 2 == 0 {
145167
median(&sorted_data[0..length / 2])
146168
} else {

0 commit comments

Comments
 (0)