@@ -7,6 +7,7 @@ use crate::db::{ArtifactId, Benchmark, Lookup, Profile, Scenario};
7
7
use crate :: github;
8
8
use crate :: load:: SiteCtxt ;
9
9
use crate :: selector:: { self , Tag } ;
10
+ use std:: cmp:: Ordering ;
10
11
11
12
use collector:: Bound ;
12
13
use serde:: Serialize ;
@@ -501,14 +502,26 @@ pub fn write_summary_table(
501
502
let largest_change = if primary. is_empty ( ) {
502
503
"N/A" . to_string ( )
503
504
} else {
504
- let change = primary
505
- . most_relevant_changes ( )
506
- . iter ( )
507
- . fold ( 0.0 , |accum : f64 , item| {
508
- let change = item. map ( |v| v. relative_change ( ) * 100.0 ) . unwrap_or ( 0.0 ) ;
509
- accum. max ( change)
510
- } ) ;
511
- format ! ( "{:.1}%" , change)
505
+ let largest_improvement = primary
506
+ . largest_improvement ( )
507
+ . map ( |c| c. relative_change ( ) )
508
+ . unwrap_or ( 0.0 ) ;
509
+ let largest_regression = primary
510
+ . largest_regression ( )
511
+ . map ( |c| c. relative_change ( ) )
512
+ . unwrap_or ( 0.0 ) ;
513
+ let change = if largest_improvement
514
+ . abs ( )
515
+ . partial_cmp ( & largest_regression. abs ( ) )
516
+ . unwrap_or ( Ordering :: Equal )
517
+ != Ordering :: Less
518
+ {
519
+ largest_improvement
520
+ } else {
521
+ largest_regression
522
+ } ;
523
+
524
+ format ! ( "{:.1}%" , change * 100.0 )
512
525
} ;
513
526
514
527
writeln ! (
@@ -1317,7 +1330,7 @@ mod tests {
1317
1330
} ;
1318
1331
1319
1332
#[ test]
1320
- fn summary_table_only_improvements_primary ( ) {
1333
+ fn summary_table_only_regressions_primary ( ) {
1321
1334
check_table (
1322
1335
vec ! [
1323
1336
( Category :: Primary , 5.0 , 10.0 ) ,
@@ -1339,7 +1352,7 @@ mod tests {
1339
1352
}
1340
1353
1341
1354
#[ test]
1342
- fn summary_table_only_regressions_primary ( ) {
1355
+ fn summary_table_only_improvements_primary ( ) {
1343
1356
check_table (
1344
1357
vec ! [
1345
1358
( Category :: Primary , 5.0 , 2.0 ) ,
@@ -1351,7 +1364,7 @@ mod tests {
1351
1364
|:---:|:---:|:---:|:---:|:---:|:---:|
1352
1365
| count[^1] | 0 | 0 | 3 | 0 | 3 |
1353
1366
| mean[^2] | N/A | N/A | -71.7% | N/A | -71.7% |
1354
- | max | N/A | N/A | -80.0% | N/A | 0 .0% |
1367
+ | max | N/A | N/A | -80.0% | N/A | -80 .0% |
1355
1368
1356
1369
[^1]: *number of relevant changes*
1357
1370
[^2]: *the arithmetic mean of the percent change*
@@ -1445,6 +1458,48 @@ mod tests {
1445
1458
| mean[^2] | 150.0% | 100.0% | -62.5% | -66.7% | 43.8% |
1446
1459
| max | 200.0% | 100.0% | -75.0% | -66.7% | 200.0% |
1447
1460
1461
+ [^1]: *number of relevant changes*
1462
+ [^2]: *the arithmetic mean of the percent change*
1463
+ "#
1464
+ . trim_start ( ) ,
1465
+ ) ;
1466
+ }
1467
+
1468
+ #[ test]
1469
+ fn summary_table_mixed_largest_change_improvement ( ) {
1470
+ check_table (
1471
+ vec ! [
1472
+ ( Category :: Primary , 10.0 , 5.0 ) ,
1473
+ ( Category :: Primary , 5.0 , 6.0 ) ,
1474
+ ] ,
1475
+ r#"
1476
+ | | Regressions 😿 <br />(primary) | Regressions 😿 <br />(secondary) | Improvements 🎉 <br />(primary) | Improvements 🎉 <br />(secondary) | All 😿 🎉 <br />(primary) |
1477
+ |:---:|:---:|:---:|:---:|:---:|:---:|
1478
+ | count[^1] | 1 | 0 | 1 | 0 | 2 |
1479
+ | mean[^2] | 20.0% | N/A | -50.0% | N/A | -15.0% |
1480
+ | max | 20.0% | N/A | -50.0% | N/A | -50.0% |
1481
+
1482
+ [^1]: *number of relevant changes*
1483
+ [^2]: *the arithmetic mean of the percent change*
1484
+ "#
1485
+ . trim_start ( ) ,
1486
+ ) ;
1487
+ }
1488
+
1489
+ #[ test]
1490
+ fn summary_table_mixed_largest_change_regression ( ) {
1491
+ check_table (
1492
+ vec ! [
1493
+ ( Category :: Primary , 5.0 , 10.0 ) ,
1494
+ ( Category :: Primary , 6.0 , 5.0 ) ,
1495
+ ] ,
1496
+ r#"
1497
+ | | Regressions 😿 <br />(primary) | Regressions 😿 <br />(secondary) | Improvements 🎉 <br />(primary) | Improvements 🎉 <br />(secondary) | All 😿 🎉 <br />(primary) |
1498
+ |:---:|:---:|:---:|:---:|:---:|:---:|
1499
+ | count[^1] | 1 | 0 | 1 | 0 | 2 |
1500
+ | mean[^2] | 100.0% | N/A | -16.7% | N/A | 41.7% |
1501
+ | max | 100.0% | N/A | -16.7% | N/A | 100.0% |
1502
+
1448
1503
[^1]: *number of relevant changes*
1449
1504
[^2]: *the arithmetic mean of the percent change*
1450
1505
"#
0 commit comments