From bda69ad6c6596d133421dc31dfeaebbcececb53d Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 13 Mar 2019 14:30:01 +1000 Subject: [PATCH] test: move the double assert macros to a separate header Signed-off-by: Peter Hutterer --- test/check-double-macros.h | 85 ++++++++++++++++++++++++++++++++++++++ test/litest.h | 59 +------------------------- 2 files changed, 87 insertions(+), 57 deletions(-) create mode 100644 test/check-double-macros.h diff --git a/test/check-double-macros.h b/test/check-double-macros.h new file mode 100644 index 00000000..083e041f --- /dev/null +++ b/test/check-double-macros.h @@ -0,0 +1,85 @@ +/* + * Copyright © 2019 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#pragma once + +#include + +#undef ck_assert_double_eq +#undef ck_assert_double_ne +#undef ck_assert_double_lt +#undef ck_assert_double_le +#undef ck_assert_double_gt +#undef ck_assert_double_ge + +#define CK_DOUBLE_EQ_EPSILON 1E-3 +#define ck_assert_double_eq(X,Y) \ + do { \ + double _ck_x = X; \ + double _ck_y = Y; \ + ck_assert_msg(fabs(_ck_x - _ck_y) < CK_DOUBLE_EQ_EPSILON, \ + "Assertion '" #X " == " #Y \ + "' failed: "#X"==%f, "#Y"==%f", \ + _ck_x, \ + _ck_y); \ + } while (0) + +#define ck_assert_double_ne(X,Y) \ + do { \ + double _ck_x = X; \ + double _ck_y = Y; \ + ck_assert_msg(fabs(_ck_x - _ck_y) > CK_DOUBLE_EQ_EPSILON, \ + "Assertion '" #X " != " #Y \ + "' failed: "#X"==%f, "#Y"==%f", \ + _ck_x, \ + _ck_y); \ + } while (0) + +#define _ck_assert_double_eq(X, OP, Y) \ + do { \ + double _ck_x = X; \ + double _ck_y = Y; \ + ck_assert_msg(_ck_x OP _ck_y || \ + fabs(_ck_x - _ck_y) < CK_DOUBLE_EQ_EPSILON, \ + "Assertion '" #X#OP#Y \ + "' failed: "#X"==%f, "#Y"==%f", \ + _ck_x, \ + _ck_y); \ + } while (0) + +#define _ck_assert_double_ne(X, OP,Y) \ + do { \ + double _ck_x = X; \ + double _ck_y = Y; \ + ck_assert_msg(_ck_x OP _ck_y && \ + fabs(_ck_x - _ck_y) > CK_DOUBLE_EQ_EPSILON, \ + "Assertion '" #X#OP#Y \ + "' failed: "#X"==%f, "#Y"==%f", \ + _ck_x, \ + _ck_y); \ + } while (0) +#define ck_assert_double_lt(X, Y) _ck_assert_double_ne(X, <, Y) +#define ck_assert_double_le(X, Y) _ck_assert_double_eq(X, <=, Y) +#define ck_assert_double_gt(X, Y) _ck_assert_double_ne(X, >, Y) +#define ck_assert_double_ge(X, Y) _ck_assert_double_eq(X, >=, Y) + diff --git a/test/litest.h b/test/litest.h index 8002b63e..ee920b4e 100644 --- a/test/litest.h +++ b/test/litest.h @@ -35,6 +35,8 @@ #include #include +#include "check-double-macros.h" + #include "libinput-util.h" #include "quirks.h" @@ -1126,61 +1128,4 @@ litest_send_file(int sock, int fd) return write(sock, buf, n); } -#undef ck_assert_double_eq -#undef ck_assert_double_ne -#undef ck_assert_double_lt -#undef ck_assert_double_le -#undef ck_assert_double_gt -#undef ck_assert_double_ge - -#define CK_DOUBLE_EQ_EPSILON 1E-3 -#define ck_assert_double_eq(X,Y) \ - do { \ - double _ck_x = X; \ - double _ck_y = Y; \ - ck_assert_msg(fabs(_ck_x - _ck_y) < CK_DOUBLE_EQ_EPSILON, \ - "Assertion '" #X " == " #Y \ - "' failed: "#X"==%f, "#Y"==%f", \ - _ck_x, \ - _ck_y); \ - } while (0) - -#define ck_assert_double_ne(X,Y) \ - do { \ - double _ck_x = X; \ - double _ck_y = Y; \ - ck_assert_msg(fabs(_ck_x - _ck_y) > CK_DOUBLE_EQ_EPSILON, \ - "Assertion '" #X " != " #Y \ - "' failed: "#X"==%f, "#Y"==%f", \ - _ck_x, \ - _ck_y); \ - } while (0) - -#define _ck_assert_double_eq(X, OP, Y) \ - do { \ - double _ck_x = X; \ - double _ck_y = Y; \ - ck_assert_msg(_ck_x OP _ck_y || \ - fabs(_ck_x - _ck_y) < CK_DOUBLE_EQ_EPSILON, \ - "Assertion '" #X#OP#Y \ - "' failed: "#X"==%f, "#Y"==%f", \ - _ck_x, \ - _ck_y); \ - } while (0) - -#define _ck_assert_double_ne(X, OP,Y) \ - do { \ - double _ck_x = X; \ - double _ck_y = Y; \ - ck_assert_msg(_ck_x OP _ck_y && \ - fabs(_ck_x - _ck_y) > CK_DOUBLE_EQ_EPSILON, \ - "Assertion '" #X#OP#Y \ - "' failed: "#X"==%f, "#Y"==%f", \ - _ck_x, \ - _ck_y); \ - } while (0) -#define ck_assert_double_lt(X, Y) _ck_assert_double_ne(X, <, Y) -#define ck_assert_double_le(X, Y) _ck_assert_double_eq(X, <=, Y) -#define ck_assert_double_gt(X, Y) _ck_assert_double_ne(X, >, Y) -#define ck_assert_double_ge(X, Y) _ck_assert_double_eq(X, >=, Y) #endif /* LITEST_H */