On 6/30/2015 12:42 PM, Chris Wilson wrote:
On Tue, Jun 30, 2015 at 12:31:46PM +0100, Michel Thierry wrote:
igt_assert_cmp64 and its derivatives:
- igt_assert_eq64
- igt_assert_neq64
- igt_assert_lte64
- igt_assert_lt64

Signed-off-by: Michel Thierry <michel.thie...@intel.com>
---
  lib/igt_core.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
  1 file changed, 63 insertions(+), 6 deletions(-)

diff --git a/lib/igt_core.h b/lib/igt_core.h
index 2b2b6e9..dd39521 100644
--- a/lib/igt_core.h
+++ b/lib/igt_core.h
@@ -333,6 +333,7 @@ void igt_exit(void) __attribute__((noreturn));
   * Fails (sub-)test if the condition is not met
   *
   * Should be used everywhere where a test compares two integer values.
+ * For 64-bit values use igt_assert_cmp64().
   *
   * Like igt_assert(), but displays the values being compared on failure 
instead
   * of simply printing the stringified expression.
@@ -365,6 +366,24 @@ void igt_exit(void) __attribute__((noreturn));
        } while (0)

  /**
+ * igt_assert_cmp64:
+ * @n1: first value
+ * @cmp: compare operator
+ * @ncmp: negated version of @cmp
+ * @n2: second value
+ *
+ * Like igt_assert_cmpint(), but for long longs;
+ */
+#define igt_assert_cmp64(n1, cmp, ncmp, n2) \
+       do { \
+               long long __n1 = (n1), __n2 = (n2); \
+               if (__n1 cmp __n2) ; else \
+               __igt_fail_assert(IGT_LOG_DOMAIN, __FILE__, __LINE__, __func__, 
\
+                                 #n1 " " #cmp " " #n2, \
+                                 "error: %#llx " #ncmp " %#llx\n", __n1, 
__n2); \
+       } while (0)

A new igt_assert_cmp_t?

        #define igt_assert_cmp_t(T, n1, cmp, ncmp, n2) do {\
                T __n1 = (n1), __n2 = (n2); \
                if (!(__n1 cmp __n2)) \ 
                __igt_fail_assert(IGT_LOG_DOMAIN, __FILE__, __LINE__, __func__, 
\
                                  #n1 " " #cmp " " #n2, \
                                  "error: %#llx " #ncmp " %#llx\n", __n1, 
__n2); \

I'll also need to cast __n1 and __n2 to long long, or it will throw warnings about format '%llx' getting an uint32. Ok?

        } while (0)

        #define igt_assert_cmpint(n1, cmp, ncmp, n2) \
                igt_assert_cmp_t(int, n1, cmp, ncmp, n2)

        #define igt_assert_cmp64(n1, cmp, ncmp, n2) \
                igt_assert_cmp_t(long long, n1, cmp, ncmp, n2)

That at least hides the ugliest of macros and stops it reproducing at an
alarming rate. Whether it is worth creating igt_assert_eq_t and friends
just to avoid duplicating the (cmp, ncmp) is debatable.
-Chris

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to