selftests/bpf: avoid reporting +100% difference in veristat for actual 0%
authorAndrii Nakryiko <andrii@kernel.org>
Wed, 5 Oct 2022 16:14:49 +0000 (09:14 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 5 Oct 2022 23:55:11 +0000 (16:55 -0700)
In special case when both base and comparison values are 0, veristat
currently reports "+0 (+100%)" difference, which is quite confusing. Fix
it up to be "+0 (+0%)".

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20221005161450.1064469-2-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/veristat.c

index b0d83a2..38f6781 100644 (file)
@@ -1104,17 +1104,21 @@ static void output_comp_stats(const struct verif_stats *base, const struct verif
                        else
                                snprintf(diff_buf, sizeof(diff_buf), "%s", "MISMATCH");
                } else {
+                       double p = 0.0;
+
                        snprintf(base_buf, sizeof(base_buf), "%ld", base_val);
                        snprintf(comp_buf, sizeof(comp_buf), "%ld", comp_val);
 
                        diff_val = comp_val - base_val;
                        if (base == &fallback_stats || comp == &fallback_stats || base_val == 0) {
-                               snprintf(diff_buf, sizeof(diff_buf), "%+ld (%+.2lf%%)",
-                                        diff_val, comp_val < base_val ? -100.0 : 100.0);
+                               if (comp_val == base_val)
+                                       p = 0.0; /* avoid +0 (+100%) case */
+                               else
+                                       p = comp_val < base_val ? -100.0 : 100.0;
                        } else {
-                               snprintf(diff_buf, sizeof(diff_buf), "%+ld (%+.2lf%%)",
-                                        diff_val, diff_val * 100.0 / base_val);
+                                p = diff_val * 100.0 / base_val;
                        }
+                       snprintf(diff_buf, sizeof(diff_buf), "%+ld (%+.2lf%%)", diff_val, p);
                }
 
                switch (fmt) {