diff options
| author | Sebastian Chlad <sebastianchlad@gmail.com> | 2025-10-15 12:33:56 +0200 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2025-10-15 05:00:49 -1000 |
| commit | 3f9c60f4d3cc3e7f4dd7cac05011ea06d512050f (patch) | |
| tree | 0a6fe99bd273a9169e370abb4c7d65eefcfb81b2 /tools/testing/selftests/cgroup/lib/include/cgroup_util.h | |
| parent | 93a4b36ef3cf4ce5e6a7e7a7686181de76e246a1 (diff) | |
selftests: cgroup: add values_close_report helper
Some cgroup selftests, such as test_cpu, occasionally fail by a very
small margin and if run in the CI context, it is useful to have detailed
diagnostic output to understand the deviation.
Introduce a values_close_report() helper which performs the same
comparison as values_close(), but prints detailed information when the
values differ beyond the allowed tolerance.
Signed-off-by: Sebastian Chlad <sebastian.chlad@suse.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'tools/testing/selftests/cgroup/lib/include/cgroup_util.h')
| -rw-r--r-- | tools/testing/selftests/cgroup/lib/include/cgroup_util.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tools/testing/selftests/cgroup/lib/include/cgroup_util.h b/tools/testing/selftests/cgroup/lib/include/cgroup_util.h index 9dc90a1b386d..7ab2824ed7b5 100644 --- a/tools/testing/selftests/cgroup/lib/include/cgroup_util.h +++ b/tools/testing/selftests/cgroup/lib/include/cgroup_util.h @@ -25,6 +25,26 @@ static inline int values_close(long a, long b, int err) return labs(a - b) <= (a + b) / 100 * err; } +/* + * Checks if two given values differ by less than err% of their sum and assert + * with detailed debug info if not. + */ +static inline int values_close_report(long a, long b, int err) +{ + long diff = labs(a - b); + long limit = (a + b) / 100 * err; + double actual_err = (a + b) ? (100.0 * diff / (a + b)) : 0.0; + int close = diff <= limit; + + if (!close) + fprintf(stderr, + "[FAIL] actual=%ld expected=%ld | diff=%ld | limit=%ld | " + "tolerance=%d%% | actual_error=%.2f%%\n", + a, b, diff, limit, err, actual_err); + + return close; +} + extern ssize_t read_text(const char *path, char *buf, size_t max_len); extern ssize_t write_text(const char *path, char *buf, ssize_t len); |