summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-01-11 00:37:10 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-01-11 00:45:06 -0500
commit705e83096feda7976ed2fc1bb539e01b1eabd6a0 (patch)
tree37314c1f0279bf01b399b60851d7f2abe14fc8b5
parentfc73d9293579ff76800259090b6c5e545604827a (diff)
Print commit being tested
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--src/main.rs38
1 files changed, 29 insertions, 9 deletions
diff --git a/src/main.rs b/src/main.rs
index 9354c88..20b668d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -121,22 +121,22 @@ fn pick_commit_to_test(results: &TestResultsVec, test: &str) -> Option<usize> {
return Some(results.len() - 1);
}
- let mut last_idx: usize = 0;
- let mut last_val: f32 = 0.0;
+ let mut last_idx: usize = 0;
+ let mut last_val: f32 = 0.0;
- let mut missing_idx: Option<usize> = None;
- let mut missing_delta: f32 = 0.0;
+ let mut gap: Option<(usize, usize)> = None;
+ let mut gap_delta: f32 = 0.0;
for (idx, i) in results.iter().enumerate() {
let v = i.data_points.get(test);
if let Some(v) = v {
if last_idx + 1 < idx {
- let delta = v / last_val;
+ let delta = (last_val - v) / v;
- if delta > missing_delta {
- missing_idx = Some((idx + last_idx) / 2);
- missing_delta = delta;
+ if delta < gap_delta {
+ gap = Some((last_idx, idx));
+ gap_delta = delta;
}
}
@@ -145,7 +145,27 @@ fn pick_commit_to_test(results: &TestResultsVec, test: &str) -> Option<usize> {
}
}
- missing_idx
+ if let Some(gap) = gap {
+ let idx = (gap.0 + gap.1) / 2;
+
+ println!("Bisecting regression by {:.1}%", gap_delta * 100.0);
+
+ println!("{} {} {:89} {}", gap.0,
+ results[gap.0].commit[..10].yellow(),
+ results[gap.0].commitmsg,
+ results[gap.0].data_points.get(test).unwrap());
+
+ println!("{} {} {:89}", idx,
+ results[idx].commit[..10].yellow(),
+ results[idx].commitmsg);
+
+ println!("{} {} {:89} {}", gap.1,
+ results[gap.1].commit[..10].yellow(),
+ results[gap.1].commitmsg,
+ results[gap.1].data_points.get(test).unwrap());
+ }
+
+ gap.map(|x| (x.0 + x.1) / 2)
}
fn parse_test_output(output: &str) -> Option<f32> {