From f70b80569a7f4046c47cd1c4eae5f06ff7d79a10 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 12 Jun 2019 14:11:00 +1000 Subject: [PATCH] test: replace the double assert macros with proper checks Instead of value * 256 which makes for bad debug messages, expand it to a full double test with a 1/256 epsilon. Signed-off-by: Peter Hutterer --- test/litest.c | 18 ++++++++++++++++++ test/litest.h | 32 ++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/test/litest.c b/test/litest.c index 21456cb..7cb5234 100644 --- a/test/litest.c +++ b/test/litest.c @@ -208,6 +208,24 @@ litest_fail_comparison_int(const char *file, __attribute__((noreturn)) void +litest_fail_comparison_double(const char *file, + int line, + const char *func, + const char *operator, + double a, + double b, + const char *astr, + const char *bstr) +{ + litest_log("FAILED COMPARISON: %s %s %s\n", astr, operator, bstr); + litest_log("Resolved to: %.3f %s %.3f\n", a, operator, b); + litest_log("in %s() (%s:%d)\n", func, file, line); + litest_backtrace(); + abort(); +} + +__attribute__((noreturn)) +void litest_fail_comparison_ptr(const char *file, int line, const char *func, diff --git a/test/litest.h b/test/litest.h index 203f12e..c02943b 100644 --- a/test/litest.h +++ b/test/litest.h @@ -95,6 +95,15 @@ litest_fail_comparison_int(const char *file, const char *astr, const char *bstr); void +litest_fail_comparison_double(const char *file, + int line, + const char *func, + const char *operator, + double a, + double b, + const char *astr, + const char *bstr); +void litest_fail_comparison_ptr(const char *file, int line, const char *func, @@ -164,6 +173,17 @@ litest_fail_comparison_ptr(const char *file, #a_ " " #op_ " " #b_); \ } while(0) +#define litest_assert_comparison_double_(a_, op_, b_) \ + do { \ + const double EPSILON = 1.0/256; \ + __typeof__(a_) _a = a_; \ + __typeof__(b_) _b = b_; \ + if (!((_a) op_ (_b)) && fabs((_a) - (_b)) > EPSILON) \ + litest_fail_comparison_double(__FILE__, __LINE__, __func__,\ + #op_, _a, _b, \ + #a_, #b_); \ + } while(0) + #define litest_assert_ptr_eq(a_, b_) \ litest_assert_comparison_ptr_(a_, ==, b_) @@ -177,22 +197,22 @@ litest_fail_comparison_ptr(const char *file, litest_assert_comparison_ptr_(a_, !=, NULL) #define litest_assert_double_eq(a_, b_)\ - ck_assert_int_eq((int)((a_) * 256), (int)((b_) * 256)) + litest_assert_comparison_double_((a_), ==, (b_)) #define litest_assert_double_ne(a_, b_)\ - ck_assert_int_ne((int)((a_) * 256), (int)((b_) * 256)) + litest_assert_comparison_double_((a_), !=, (b_)) #define litest_assert_double_lt(a_, b_)\ - ck_assert_int_lt((int)((a_) * 256), (int)((b_) * 256)) + litest_assert_comparison_double_((a_), <, (b_)) #define litest_assert_double_le(a_, b_)\ - ck_assert_int_le((int)((a_) * 256), (int)((b_) * 256)) + litest_assert_comparison_double_((a_), <=, (b_)) #define litest_assert_double_gt(a_, b_)\ - ck_assert_int_gt((int)((a_) * 256), (int)((b_) * 256)) + litest_assert_comparison_double_((a_), >, (b_)) #define litest_assert_double_ge(a_, b_)\ - ck_assert_int_ge((int)((a_) * 256), (int)((b_) * 256)) + litest_assert_comparison_double_((a_), >=, (b_)) enum litest_device_type { LITEST_NO_DEVICE = -1, -- 2.7.4