Skip to content

Commit 3f9c60f

Browse files
schladhtejun
authored andcommitted
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 <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
1 parent 93a4b36 commit 3f9c60f

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

tools/testing/selftests/cgroup/lib/include/cgroup_util.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,26 @@ static inline int values_close(long a, long b, int err)
2525
return labs(a - b) <= (a + b) / 100 * err;
2626
}
2727

28+
/*
29+
* Checks if two given values differ by less than err% of their sum and assert
30+
* with detailed debug info if not.
31+
*/
32+
static inline int values_close_report(long a, long b, int err)
33+
{
34+
long diff = labs(a - b);
35+
long limit = (a + b) / 100 * err;
36+
double actual_err = (a + b) ? (100.0 * diff / (a + b)) : 0.0;
37+
int close = diff <= limit;
38+
39+
if (!close)
40+
fprintf(stderr,
41+
"[FAIL] actual=%ld expected=%ld | diff=%ld | limit=%ld | "
42+
"tolerance=%d%% | actual_error=%.2f%%\n",
43+
a, b, diff, limit, err, actual_err);
44+
45+
return close;
46+
}
47+
2848
extern ssize_t read_text(const char *path, char *buf, size_t max_len);
2949
extern ssize_t write_text(const char *path, char *buf, ssize_t len);
3050

0 commit comments

Comments
 (0)