@@ -447,32 +447,38 @@ impl ArtifactComparisonSummary {
447
447
. filter ( |c| c. is_regression ( ) )
448
448
}
449
449
450
- fn most_negative_improvement ( & self ) -> Option < & TestResultComparison > {
450
+ // This is the most negative result.
451
+ fn largest_improvement ( & self ) -> Option < & TestResultComparison > {
451
452
self . relevant_comparisons
452
453
. iter ( )
453
454
. find ( |s| s. is_improvement ( ) )
454
455
}
455
456
456
- fn least_negative_improvement ( & self ) -> Option < & TestResultComparison > {
457
+ // This is the least negative result.
458
+ fn smallest_improvement ( & self ) -> Option < & TestResultComparison > {
457
459
self . relevant_comparisons
458
460
. iter ( )
459
461
. rfind ( |s| s. is_improvement ( ) )
460
462
}
461
463
462
- fn most_positive_regression ( & self ) -> Option < & TestResultComparison > {
464
+ // This is the most positive result.
465
+ fn largest_regression ( & self ) -> Option < & TestResultComparison > {
463
466
self . relevant_comparisons
464
467
. iter ( )
465
468
. rfind ( |s| s. is_regression ( ) )
466
469
}
467
470
468
- fn least_positive_regression ( & self ) -> Option < & TestResultComparison > {
471
+ // This is the least positive result.
472
+ fn smallest_regression ( & self ) -> Option < & TestResultComparison > {
469
473
self . relevant_comparisons . iter ( ) . find ( |s| s. is_regression ( ) )
470
474
}
471
475
476
+ // This may be an improvement or a regression.
472
477
fn most_positive_change ( & self ) -> Option < & TestResultComparison > {
473
478
self . relevant_comparisons . last ( )
474
479
}
475
480
481
+ // This may be an improvement or a regression.
476
482
fn most_negative_change ( & self ) -> Option < & TestResultComparison > {
477
483
self . relevant_comparisons . first ( )
478
484
}
@@ -487,7 +493,19 @@ impl ArtifactComparisonSummary {
487
493
}
488
494
489
495
pub fn largest_change ( & self ) -> Option < & TestResultComparison > {
490
- self . relevant_comparisons . first ( )
496
+ if self . num_changes ( ) == 0 {
497
+ None
498
+ } else {
499
+ let most_pos = self . most_positive_change ( ) . unwrap ( ) ;
500
+ let most_neg = self . most_negative_change ( ) . unwrap ( ) ;
501
+ let most_pos_abs = most_pos. relative_change ( ) . abs ( ) ;
502
+ let most_neg_abs = most_neg. relative_change ( ) . abs ( ) ;
503
+ if most_neg_abs. partial_cmp ( & most_pos_abs) == Some ( std:: cmp:: Ordering :: Greater ) {
504
+ Some ( most_neg)
505
+ } else {
506
+ Some ( most_pos)
507
+ }
508
+ }
491
509
}
492
510
}
493
511
@@ -605,36 +623,36 @@ pub fn write_summary_table(
605
623
] ) ;
606
624
607
625
// range
608
- let f = |r : Option < & TestResultComparison > | r. unwrap ( ) . relative_change ( ) * 100.0 ;
626
+ let rel_change = |r : Option < & TestResultComparison > | r. unwrap ( ) . relative_change ( ) * 100.0 ;
609
627
column_data. push ( vec ! [
610
628
render_range( primary. num_regressions, || {
611
629
(
612
- f ( primary. least_positive_regression ( ) ) ,
613
- f ( primary. most_positive_regression ( ) ) ,
630
+ rel_change ( primary. smallest_regression ( ) ) ,
631
+ rel_change ( primary. largest_regression ( ) ) ,
614
632
)
615
633
} ) ,
616
634
render_range( secondary. num_regressions, || {
617
635
(
618
- f ( secondary. least_positive_regression ( ) ) ,
619
- f ( secondary. most_positive_regression ( ) ) ,
636
+ rel_change ( secondary. smallest_regression ( ) ) ,
637
+ rel_change ( secondary. largest_regression ( ) ) ,
620
638
)
621
639
} ) ,
622
640
render_range( primary. num_improvements, || {
623
641
(
624
- f ( primary. most_negative_improvement ( ) ) ,
625
- f ( primary. least_negative_improvement ( ) ) ,
642
+ rel_change ( primary. largest_improvement ( ) ) ,
643
+ rel_change ( primary. smallest_improvement ( ) ) ,
626
644
)
627
645
} ) ,
628
646
render_range( secondary. num_improvements, || {
629
647
(
630
- f ( secondary. most_negative_improvement ( ) ) ,
631
- f ( secondary. least_negative_improvement ( ) ) ,
648
+ rel_change ( secondary. largest_improvement ( ) ) ,
649
+ rel_change ( secondary. smallest_improvement ( ) ) ,
632
650
)
633
651
} ) ,
634
652
render_range( primary. num_regressions + primary. num_improvements, || {
635
653
(
636
- f ( primary. most_negative_change( ) ) ,
637
- f ( primary. most_positive_change( ) ) ,
654
+ rel_change ( primary. most_negative_change( ) ) ,
655
+ rel_change ( primary. most_positive_change( ) ) ,
638
656
)
639
657
} ) ,
640
658
] ) ;
0 commit comments