Signed-off-by: Peter Hutterer <[email protected]>
---
 test/litest-selftest.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++
 test/litest.c          |  12 +++++
 test/litest.h          |  26 +++++++++
 3 files changed, 179 insertions(+)

diff --git a/test/litest-selftest.c b/test/litest-selftest.c
index 5ed20ff..f797477 100644
--- a/test/litest-selftest.c
+++ b/test/litest-selftest.c
@@ -164,6 +164,131 @@ START_TEST(litest_int_ge_notrigger)
 }
 END_TEST
 
+START_TEST(litest_ptr_eq_notrigger)
+{
+       int v = 10;
+       int *a = &v;
+       int *b = &v;
+       int c = NULL;
+       int d = NULL;
+
+       litest_assert_ptr_eq(a, b);
+       litest_assert_ptr_eq(c, d);
+}
+END_TEST
+
+START_TEST(litest_ptr_eq_trigger)
+{
+       int v = 10;
+       int v2 = 11;
+       int *a = &v;
+       int *b = &v2;
+
+       litest_assert_ptr_eq(a, b);
+}
+END_TEST
+
+START_TEST(litest_ptr_eq_trigger_NULL)
+{
+       int v = 10;
+       int *a = &v;
+       int *b = NULL;
+
+       litest_assert_ptr_eq(a, b);
+}
+END_TEST
+
+START_TEST(litest_ptr_eq_trigger_NULL2)
+{
+       int v = 10;
+       int *a = &v;
+       int *b = NULL;
+
+       litest_assert_ptr_eq(b, a);
+}
+END_TEST
+
+START_TEST(litest_ptr_ne_trigger)
+{
+       int v = 10;
+       int *a = &v;
+       int *b = &v;
+
+       litest_assert_ptr_ne(a, b);
+}
+END_TEST
+
+START_TEST(litest_ptr_ne_trigger_NULL)
+{
+       int *a = NULL;
+
+       litest_assert_ptr_ne(a, NULL);
+}
+END_TEST
+
+START_TEST(litest_ptr_ne_trigger_NULL2)
+{
+       int *a = NULL;
+
+       litest_assert_ptr_ne(NULL, a);
+}
+END_TEST
+
+START_TEST(litest_ptr_ne_notrigger)
+{
+       int v1 = 10;
+       int v2 = 10;
+       int *a = &v1;
+       int *b = &v2;
+       int *c = NULL;
+
+       litest_assert_ptr_ne(a, b);
+       litest_assert_ptr_ne(a, c);
+       litest_assert_ptr_ne(c, b);
+}
+END_TEST
+
+START_TEST(litest_ptr_null_notrigger)
+{
+       int *a = NULL;
+
+       litest_assert_ptr_null(a);
+       litest_assert_ptr_null(NULL);
+}
+END_TEST
+
+START_TEST(litest_ptr_null_trigger)
+{
+       int v;
+       int *a = &v;
+
+       litest_assert_ptr_null(a);
+}
+END_TEST
+
+START_TEST(litest_ptr_notnull_notrigger)
+{
+       int v;
+       int *a = &v;
+
+       litest_assert_ptr_notnull(a);
+}
+END_TEST
+
+START_TEST(litest_ptr_notnull_trigger)
+{
+       int *a = NULL;
+
+       litest_assert_ptr_notnull(a);
+}
+END_TEST
+
+START_TEST(litest_ptr_notnull_trigger_NULL)
+{
+       litest_assert_ptr_notnull(NULL);
+}
+END_TEST
+
 static Suite *
 litest_assert_macros_suite(void)
 {
@@ -201,6 +326,22 @@ litest_assert_macros_suite(void)
        tcase_add_test(tc, litest_int_gt_notrigger);
        suite_add_tcase(s, tc);
 
+       tc = tcase_create("pointer comparison ");
+       tcase_add_test_raise_signal(tc, litest_ptr_eq_trigger, SIGABRT);
+       tcase_add_test_raise_signal(tc, litest_ptr_eq_trigger_NULL, SIGABRT);
+       tcase_add_test_raise_signal(tc, litest_ptr_eq_trigger_NULL2, SIGABRT);
+       tcase_add_test(tc, litest_ptr_eq_notrigger);
+       tcase_add_test_raise_signal(tc, litest_ptr_ne_trigger, SIGABRT);
+       tcase_add_test_raise_signal(tc, litest_ptr_ne_trigger_NULL, SIGABRT);
+       tcase_add_test_raise_signal(tc, litest_ptr_ne_trigger_NULL2, SIGABRT);
+       tcase_add_test(tc, litest_ptr_ne_notrigger);
+       tcase_add_test_raise_signal(tc, litest_ptr_null_trigger, SIGABRT);
+       tcase_add_test(tc, litest_ptr_null_notrigger);
+       tcase_add_test_raise_signal(tc, litest_ptr_notnull_trigger, SIGABRT);
+       tcase_add_test_raise_signal(tc, litest_ptr_notnull_trigger_NULL, 
SIGABRT);
+       tcase_add_test(tc, litest_ptr_notnull_notrigger);
+       suite_add_tcase(s, tc);
+
        return s;
 }
 
diff --git a/test/litest.c b/test/litest.c
index f284d22..9612e17 100644
--- a/test/litest.c
+++ b/test/litest.c
@@ -188,6 +188,18 @@ litest_fail_comparison_int(const char *file,
        abort();
 }
 
+void
+litest_fail_comparison_ptr(const char *file,
+                          int line,
+                          const char *func,
+                          const char *comparison)
+{
+       litest_log("FAILED COMPARISON: %s\n", comparison);
+       litest_log("in %s() (%s:%d)\n", func, file, line);
+       litest_backtrace();
+       abort();
+}
+
 struct test {
        struct list node;
        char *name;
diff --git a/test/litest.h b/test/litest.h
index f13ea7e..74909cc 100644
--- a/test/litest.h
+++ b/test/litest.h
@@ -89,6 +89,27 @@
 #define litest_assert_int_gt(a_, b_) \
        litest_assert_comparison_int_(a_, >, b_)
 
+#define litest_assert_comparison_ptr_(a_, op_, b_) \
+       do { \
+               __typeof__(a_) _a = a_; \
+               __typeof__(b_) _b = b_; \
+               if (!((_a) op_ (_b))) \
+                       litest_fail_comparison_ptr(__FILE__, __LINE__, 
__func__,\
+                                                  #a_ " " #op_ " " #b_); \
+       } while(0)
+
+#define litest_assert_ptr_eq(a_, b_) \
+       litest_assert_comparison_ptr_(a_, ==, b_)
+
+#define litest_assert_ptr_ne(a_, b_) \
+       litest_assert_comparison_ptr_(a_, !=, b_)
+
+#define litest_assert_ptr_null(a_) \
+       litest_assert_comparison_ptr_(a_, ==, NULL)
+
+#define litest_assert_ptr_notnull(a_) \
+       litest_assert_comparison_ptr_(a_, !=, NULL)
+
 enum litest_device_type {
        LITEST_NO_DEVICE = -1,
        LITEST_SYNAPTICS_CLICKPAD = -2,
@@ -173,6 +194,11 @@ litest_fail_comparison_int(const char *file,
                           int b,
                           const char *astr,
                           const char *bstr);
+void
+litest_fail_comparison_ptr(const char *file,
+                          int line,
+                          const char *func,
+                          const char *comparison);
 
 void litest_add(const char *name, void *func,
                enum litest_device_feature required_feature,
-- 
2.3.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to