Skip to content

Commit e4da393

Browse files
committed
Align PR summary table to be more readable in its raw form
1 parent 9efb478 commit e4da393

File tree

1 file changed

+89
-61
lines changed

1 file changed

+89
-61
lines changed

β€Žsite/src/comparison.rs

Lines changed: 89 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -411,47 +411,70 @@ pub fn write_summary_table(
411411
.unwrap_or_else(|| "N/A".to_string())
412412
}
413413

414-
writeln!(
415-
result,
416-
r#"| | Regressions 😿 <br />(primary) | Regressions 😿 <br />(secondary) | Improvements πŸŽ‰ <br />(primary) | Improvements πŸŽ‰ <br />(secondary) | All 😿 πŸŽ‰ <br />(primary) |
417-
|:---:|:---:|:---:|:---:|:---:|:---:|"#
418-
)
419-
.unwrap();
420-
writeln!(
421-
result,
422-
"| count{} | {} | {} | {} | {} | {} |",
423-
if with_footnotes { "[^1]" } else { "" },
424-
primary.num_regressions,
425-
secondary.num_regressions,
426-
primary.num_improvements,
427-
secondary.num_improvements,
428-
primary.num_regressions + primary.num_improvements
429-
)
430-
.unwrap();
431-
432-
writeln!(
433-
result,
434-
"| mean{} | {} | {} | {} | {} | {} |",
435-
if with_footnotes { "[^2]" } else { "" },
436-
render_stat(primary.num_regressions, || Some(
437-
primary.arithmetic_mean_of_regressions()
438-
)),
439-
render_stat(secondary.num_regressions, || Some(
440-
secondary.arithmetic_mean_of_regressions()
441-
)),
442-
render_stat(primary.num_improvements, || Some(
443-
primary.arithmetic_mean_of_improvements()
444-
)),
445-
render_stat(secondary.num_improvements, || Some(
446-
secondary.arithmetic_mean_of_improvements()
447-
)),
414+
let columns = [
415+
" ", // we want at least 10 spaces to accommodate "count[^1]"
416+
"Regressions 😿 <br />(primary)",
417+
"Regressions 😿 <br />(secondary)",
418+
"Improvements πŸŽ‰ <br />(primary)",
419+
"Improvements πŸŽ‰ <br />(secondary)",
420+
"All 😿 πŸŽ‰ <br />(primary)",
421+
];
422+
let counts: Vec<usize> = columns
423+
.iter()
424+
.map(|s| {
425+
// Unicode emojis usually have width equal to ~2 chars (maybe? :) ).
426+
let count = s.chars().count();
427+
if s.chars().any(|c| !c.is_whitespace()) {
428+
count + 1
429+
} else {
430+
count
431+
}
432+
})
433+
.collect();
434+
for column in &columns {
435+
write!(result, "| {} ", column).unwrap();
436+
}
437+
result.push_str("|\n");
438+
for &count in &counts {
439+
write!(result, "|:{}:", "-".repeat(count)).unwrap();
440+
}
441+
result.push_str("|\n");
442+
443+
let mut render_row = |row: Vec<String>| {
444+
assert_eq!(row.len(), columns.len());
445+
for (column, &count) in row.into_iter().zip(&counts) {
446+
write!(result, "| {:<1$} ", column, count).unwrap();
447+
}
448+
result.push_str("|\n");
449+
};
450+
render_row(vec![
451+
format!("count{}", if with_footnotes { "[^1]" } else { "" }),
452+
primary.num_regressions.to_string(),
453+
secondary.num_regressions.to_string(),
454+
primary.num_improvements.to_string(),
455+
secondary.num_improvements.to_string(),
456+
(primary.num_regressions + primary.num_improvements).to_string(),
457+
]);
458+
render_row(vec![
459+
format!("mean{}", if with_footnotes { "[^2]" } else { "" }),
460+
render_stat(primary.num_regressions, || {
461+
Some(primary.arithmetic_mean_of_regressions())
462+
}),
463+
render_stat(secondary.num_regressions, || {
464+
Some(secondary.arithmetic_mean_of_regressions())
465+
}),
466+
render_stat(primary.num_improvements, || {
467+
Some(primary.arithmetic_mean_of_improvements())
468+
}),
469+
render_stat(secondary.num_improvements, || {
470+
Some(secondary.arithmetic_mean_of_improvements())
471+
}),
448472
if primary.is_empty() {
449473
"N/A".to_string()
450474
} else {
451475
format!("{:.1}%", primary.arithmetic_mean_of_changes())
452-
}
453-
)
454-
.unwrap();
476+
},
477+
]);
455478

456479
let largest_change = if primary.is_empty() {
457480
"N/A".to_string()
@@ -478,24 +501,30 @@ pub fn write_summary_table(
478501
format!("{:.1}%", change * 100.0)
479502
};
480503

481-
writeln!(
482-
result,
483-
"| max | {} | {} | {} | {} | {} |",
484-
render_stat(primary.num_regressions, || primary
485-
.largest_regression()
486-
.map(|r| r.relative_change() * 100.0)),
487-
render_stat(secondary.num_regressions, || secondary
488-
.largest_regression()
489-
.map(|r| r.relative_change() * 100.0)),
490-
render_stat(primary.num_improvements, || primary
491-
.largest_improvement()
492-
.map(|r| r.relative_change() * 100.0)),
493-
render_stat(secondary.num_improvements, || secondary
494-
.largest_improvement()
495-
.map(|r| r.relative_change() * 100.0)),
496-
largest_change
497-
)
498-
.unwrap();
504+
render_row(vec![
505+
"max".to_string(),
506+
render_stat(primary.num_regressions, || {
507+
primary
508+
.largest_regression()
509+
.map(|r| r.relative_change() * 100.0)
510+
}),
511+
render_stat(secondary.num_regressions, || {
512+
secondary
513+
.largest_regression()
514+
.map(|r| r.relative_change() * 100.0)
515+
}),
516+
render_stat(primary.num_improvements, || {
517+
primary
518+
.largest_improvement()
519+
.map(|r| r.relative_change() * 100.0)
520+
}),
521+
render_stat(secondary.num_improvements, || {
522+
secondary
523+
.largest_improvement()
524+
.map(|r| r.relative_change() * 100.0)
525+
}),
526+
largest_change,
527+
]);
499528

500529
if with_footnotes {
501530
writeln!(
@@ -1357,15 +1386,14 @@ mod tests {
13571386
(Category::Primary, 5.0, 6.0),
13581387
],
13591388
r#"
1360-
| | Regressions 😿 <br />(primary) | Regressions 😿 <br />(secondary) | Improvements πŸŽ‰ <br />(primary) | Improvements πŸŽ‰ <br />(secondary) | All 😿 πŸŽ‰ <br />(primary) |
1361-
|:---:|:---:|:---:|:---:|:---:|:---:|
1362-
| count[^1] | 1 | 0 | 1 | 0 | 2 |
1363-
| mean[^2] | 20.0% | N/A | -50.0% | N/A | -15.0% |
1364-
| max | 20.0% | N/A | -50.0% | N/A | -50.0% |
1389+
| | Regressions 😿 <br />(primary) | Regressions 😿 <br />(secondary) | Improvements πŸŽ‰ <br />(primary) | Improvements πŸŽ‰ <br />(secondary) | All 😿 πŸŽ‰ <br />(primary) |
1390+
|:----------:|:-----------------------------:|:-------------------------------:|:------------------------------:|:--------------------------------:|:-----------------------:|
1391+
| count[^1] | 1 | 0 | 1 | 0 | 2 |
1392+
| mean[^2] | 20.0% | N/A | -50.0% | N/A | -15.0% |
1393+
| max | 20.0% | N/A | -50.0% | N/A | -50.0% |
13651394
13661395
[^1]: *number of relevant changes*
13671396
[^2]: *the arithmetic mean of the percent change*
1368-
"#
13691397
.trim_start(),
13701398
);
13711399
}

0 commit comments

Comments
Β (0)