summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-01-10 07:56:19 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-01-10 07:56:19 -0500
commitc30a74571b52703a2623b37833bdbe0e734f9ef9 (patch)
tree9b31cf7f01f2fd0c18a43befa59e91ec729c4487
parent6a852678bd1ae36cd46a7fecd19fe4cdcce78b45 (diff)
kill results_insert()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--src/main.rs43
1 files changed, 12 insertions, 31 deletions
diff --git a/src/main.rs b/src/main.rs
index 7fe8539..5f00577 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -73,17 +73,6 @@ fn results_new(repo: &git2::Repository, range: &str) -> Result<TestResultsVec, g
Ok(data_points)
}
-fn results_insert(results: &mut TestResultsVec, commit: &str, test: &str, v: f32) {
- for i in results.iter_mut() {
- if i.commit == commit {
- i.data_points.insert(test.to_string(), v);
- return;
- }
- }
-
- panic!("commit {} not found", commit);
-}
-
fn results_mapped(r: &TestResultsVec) -> TestResultsMap {
let mut mapped = HashMap::new();
@@ -106,50 +95,42 @@ fn results_merge(r1: &mut TestResultsVec, r2: &TestResultsMap) {
}
}
-fn pick_commit_to_test(results: &TestResultsVec, test: &str) -> Option<String> {
+fn pick_commit_to_test(results: &TestResultsVec, test: &str) -> Option<usize> {
let i = results.first().unwrap();
if i.data_points.get(test).is_none() {
- return Some(i.commit.clone());
+ return Some(0);
}
let i = results.last().unwrap();
if i.data_points.get(test).is_none() {
- return Some(i.commit.clone());
+ return Some(results.len() - 1);
}
- let mut idx: i32 = 0;
- let mut last_idx: i32 = -1;
+ let mut last_idx: usize = 0;
let mut last_val: f32 = 0.0;
- let mut missing_idx: i32 = 0;
+ let mut missing_idx: Option<usize> = None;
let mut missing_delta: f32 = 0.0;
- for i in results {
+ for (idx, i) in results.iter().enumerate() {
let v = i.data_points.get(test);
if let Some(v) = v {
- if last_idx + 1 != idx {
+ if last_idx + 1 < idx {
let delta = v / last_val;
if delta > missing_delta {
- missing_idx = (idx + last_idx) / 2;
+ missing_idx = Some((idx + last_idx) / 2);
missing_delta = delta;
}
}
last_idx = idx;
last_val = *v;
- } else {
}
-
- idx += 1;
}
- if missing_idx != 0 {
- Some(results[missing_idx as usize].commit.clone())
- } else {
- None
- }
+ missing_idx
}
fn parse_test_output(output: &str) -> Option<f32> {
@@ -173,10 +154,10 @@ fn run_tests(repo: &git2::Repository, range: &str, test: &str) {
results_merge(&mut results, &existing);
}
- while let Some(commit) = pick_commit_to_test(&results, test) {
+ while let Some(idx) = pick_commit_to_test(&results, test) {
let output = Command::new("benchmark-git-commit.sh")
.arg(test)
- .arg(&commit)
+ .arg(&results[idx].commit)
.output()
.unwrap()
.stdout;
@@ -187,7 +168,7 @@ fn run_tests(repo: &git2::Repository, range: &str, test: &str) {
let result = parse_test_output(output);
if let Some(result) = result {
- results_insert(&mut results, &commit, test, result);
+ results[idx].data_points.insert(test.to_string(), result);
results_write(RESULTS, &results).unwrap();
} else {