diff mbox

[i-g-t] lib: Add 64-bit version of igt_assert_cmp

Message ID 1435663906-11295-1-git-send-email-michel.thierry@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Michel Thierry June 30, 2015, 11:31 a.m. UTC
igt_assert_cmp64 and its derivatives:
- igt_assert_eq64
- igt_assert_neq64
- igt_assert_lte64
- igt_assert_lt64

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

Comments

Chris Wilson June 30, 2015, 11:42 a.m. UTC | #1
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.thierry@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); \
	} 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
Daniel Vetter June 30, 2015, 11:48 a.m. UTC | #2
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.thierry@intel.com>

Care to update the lib/igt.coccie script and run in and add those changes
in a 2nd patch? Always good to keep the refactoring tools updated too.
-Daniel

> ---
>  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)
> +
> +/**
>   * igt_assert_cmpdouble:
>   * @n1: first value
>   * @cmp: compare operator
> @@ -387,8 +406,8 @@ void igt_exit(void) __attribute__((noreturn));
>   * @n1: first integer
>   * @n2: second integer
>   *
> - * Fails (sub-)test if the two integers are not equal. Beware that for now this
> - * only works on integers.
> + * Fails (sub-)test if the two integers are not equal. Beware that this only
> + * works on integers. For 64-bit values, use igt_assert_eq64().
>   *
>   * Like igt_assert(), but displays the values being compared on failure instead
>   * of simply printing the stringified expression.
> @@ -405,6 +424,15 @@ void igt_exit(void) __attribute__((noreturn));
>  #define igt_assert_eq_u32(n1, n2) igt_assert_cmpuint(n1, ==, !=, n2)
>  
>  /**
> + * igt_assert_eq64:
> + * @n1: first value
> + * @n2: second value
> + *
> + * Like igt_assert_eq(), but for long long.
> + */
> +#define igt_assert_eq64(n1, n2) igt_assert_cmp64(n1, ==, !=, n2)
> +
> +/**
>   * igt_assert_eq_double:
>   * @n1: first double
>   * @n2: second double
> @@ -418,8 +446,8 @@ void igt_exit(void) __attribute__((noreturn));
>   * @n1: first integer
>   * @n2: second integer
>   *
> - * Fails (sub-)test if the two integers are equal. Beware that for now this
> - * only works on integers.
> + * Fails (sub-)test if the two integers are equal. Beware that this only works
> + * on integers. For 64-bit values, use igt_assert_neq64().
>   *
>   * Like igt_assert(), but displays the values being compared on failure instead
>   * of simply printing the stringified expression.
> @@ -427,12 +455,22 @@ void igt_exit(void) __attribute__((noreturn));
>  #define igt_assert_neq(n1, n2) igt_assert_cmpint(n1, !=, ==, n2)
>  
>  /**
> + * igt_assert_neq64:
> + * @n1: first value
> + * @n2: second value
> + *
> + * Like igt_assert_neq(), but for long long.
> + */
> +#define igt_assert_neq64(n1, n2) igt_assert_cmp64(n1, !=, ==, n2)
> +
> +/**
>   * igt_assert_lte:
>   * @n1: first integer
>   * @n2: second integer
>   *
>   * Fails (sub-)test if the second integers is greater than the first.
> - * Beware that for now this only works on integers.
> + * Beware that this only works on integers, for 64-bit values, use
> + * igt_assert_lte64().
>   *
>   * Like igt_assert(), but displays the values being compared on failure instead
>   * of simply printing the stringified expression.
> @@ -440,12 +478,22 @@ void igt_exit(void) __attribute__((noreturn));
>  #define igt_assert_lte(n1, n2) igt_assert_cmpint(n1, <=, >, n2)
>  
>  /**
> + * igt_assert_lte64:
> + * @n1: first value
> + * @n2: second value
> + *
> + * Like igt_assert_lte(), but for long long.
> + */
> +#define igt_assert_lte64(n1, n2) igt_assert_cmp64(n1, <=, >, n2)
> +
> +/**
>   * igt_assert_lt:
>   * @n1: first integer
>   * @n2: second integer
>   *
>   * Fails (sub-)test if the second integers is strictly smaller than the first.
> - * Beware that for now this only works on integers.
> + * Beware that this only works on integers. For 64-bit values, use
> + * igt_assert_lt64().
>   *
>   * Like igt_assert(), but displays the values being compared on failure instead
>   * of simply printing the stringified expression.
> @@ -453,6 +501,15 @@ void igt_exit(void) __attribute__((noreturn));
>  #define igt_assert_lt(n1, n2) igt_assert_cmpint(n1, <, >=, n2)
>  
>  /**
> + * igt_assert_lt64:
> + * @n1: first value
> + * @n2: second value
> + *
> + * Like igt_assert_lt(), but for long long.
> + */
> +#define igt_assert_lt64(n1, n2) igt_assert_cmp64(n1, <, >=, n2)
> +
> +/**
>   * igt_require:
>   * @expr: condition to test
>   *
> -- 
> 2.4.5
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Michel Thierry June 30, 2015, 12:03 p.m. UTC | #3
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.thierry@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
>
Chris Wilson June 30, 2015, 12:38 p.m. UTC | #4
On Tue, Jun 30, 2015 at 01:03:03PM +0100, Michel Thierry wrote:
> I'll also need to cast __n1 and __n2 to long long, or it will throw
> warnings about format '%llx' getting an uint32. Ok?

Ok, or we can add the format specifier along with T. The latter is
definitely useful so that we can have hex variants.
-Chris
diff mbox

Patch

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)
+
+/**
  * igt_assert_cmpdouble:
  * @n1: first value
  * @cmp: compare operator
@@ -387,8 +406,8 @@  void igt_exit(void) __attribute__((noreturn));
  * @n1: first integer
  * @n2: second integer
  *
- * Fails (sub-)test if the two integers are not equal. Beware that for now this
- * only works on integers.
+ * Fails (sub-)test if the two integers are not equal. Beware that this only
+ * works on integers. For 64-bit values, use igt_assert_eq64().
  *
  * Like igt_assert(), but displays the values being compared on failure instead
  * of simply printing the stringified expression.
@@ -405,6 +424,15 @@  void igt_exit(void) __attribute__((noreturn));
 #define igt_assert_eq_u32(n1, n2) igt_assert_cmpuint(n1, ==, !=, n2)
 
 /**
+ * igt_assert_eq64:
+ * @n1: first value
+ * @n2: second value
+ *
+ * Like igt_assert_eq(), but for long long.
+ */
+#define igt_assert_eq64(n1, n2) igt_assert_cmp64(n1, ==, !=, n2)
+
+/**
  * igt_assert_eq_double:
  * @n1: first double
  * @n2: second double
@@ -418,8 +446,8 @@  void igt_exit(void) __attribute__((noreturn));
  * @n1: first integer
  * @n2: second integer
  *
- * Fails (sub-)test if the two integers are equal. Beware that for now this
- * only works on integers.
+ * Fails (sub-)test if the two integers are equal. Beware that this only works
+ * on integers. For 64-bit values, use igt_assert_neq64().
  *
  * Like igt_assert(), but displays the values being compared on failure instead
  * of simply printing the stringified expression.
@@ -427,12 +455,22 @@  void igt_exit(void) __attribute__((noreturn));
 #define igt_assert_neq(n1, n2) igt_assert_cmpint(n1, !=, ==, n2)
 
 /**
+ * igt_assert_neq64:
+ * @n1: first value
+ * @n2: second value
+ *
+ * Like igt_assert_neq(), but for long long.
+ */
+#define igt_assert_neq64(n1, n2) igt_assert_cmp64(n1, !=, ==, n2)
+
+/**
  * igt_assert_lte:
  * @n1: first integer
  * @n2: second integer
  *
  * Fails (sub-)test if the second integers is greater than the first.
- * Beware that for now this only works on integers.
+ * Beware that this only works on integers, for 64-bit values, use
+ * igt_assert_lte64().
  *
  * Like igt_assert(), but displays the values being compared on failure instead
  * of simply printing the stringified expression.
@@ -440,12 +478,22 @@  void igt_exit(void) __attribute__((noreturn));
 #define igt_assert_lte(n1, n2) igt_assert_cmpint(n1, <=, >, n2)
 
 /**
+ * igt_assert_lte64:
+ * @n1: first value
+ * @n2: second value
+ *
+ * Like igt_assert_lte(), but for long long.
+ */
+#define igt_assert_lte64(n1, n2) igt_assert_cmp64(n1, <=, >, n2)
+
+/**
  * igt_assert_lt:
  * @n1: first integer
  * @n2: second integer
  *
  * Fails (sub-)test if the second integers is strictly smaller than the first.
- * Beware that for now this only works on integers.
+ * Beware that this only works on integers. For 64-bit values, use
+ * igt_assert_lt64().
  *
  * Like igt_assert(), but displays the values being compared on failure instead
  * of simply printing the stringified expression.
@@ -453,6 +501,15 @@  void igt_exit(void) __attribute__((noreturn));
 #define igt_assert_lt(n1, n2) igt_assert_cmpint(n1, <, >=, n2)
 
 /**
+ * igt_assert_lt64:
+ * @n1: first value
+ * @n2: second value
+ *
+ * Like igt_assert_lt(), but for long long.
+ */
+#define igt_assert_lt64(n1, n2) igt_assert_cmp64(n1, <, >=, n2)
+
+/**
  * igt_require:
  * @expr: condition to test
  *