Re: [PATCH 30/30] tools/testing/vma: output compared expression on ASSERT_[EQ, NE]()

Pedro Falcato <[email protected]>
Newsgroups org.kernel.vger.linux-parisc,dev.linux.lists.damon,dev.linux.lists.iommu,dev.linux.lists.nvdimm,org.freedesktop.lists.dri-devel,org.kernel.vger.kvm,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-sgx,org.kernel.vger.linux-tegra,org.kernel.vger.linux-trace-kernel
Message-ID <[email protected]>
On Mon, Jun 29, 2026 at 01:23:41PM +0100, Lorenzo Stoakes wrote:
> Update the macros to output the compared values at hex for easier debugging
> when test asserts fail.
> 
> Also remove unused IS_SET() macro.
> 
> Signed-off-by: Lorenzo Stoakes <[email protected]>
> ---
>  tools/testing/vma/shared.h | 31 +++++++++++++++++++------------
>  1 file changed, 19 insertions(+), 12 deletions(-)
> 
> diff --git a/tools/testing/vma/shared.h b/tools/testing/vma/shared.h
> index ca4f1238f1c7..216be4cda369 100644
> --- a/tools/testing/vma/shared.h
> +++ b/tools/testing/vma/shared.h
> @@ -21,19 +21,28 @@
>  		}							\
>  	} while (0)
> 
> -#define ASSERT_TRUE(_expr)						\
> -	do {								\
> -		if (!(_expr)) {						\
> -			fprintf(stderr,					\
> -				"Assert FAILED at %s:%d:%s(): %s is FALSE.\n", \
> -				__FILE__, __LINE__, __FUNCTION__, #_expr); \
> -			return false;					\
> -		}							\
> +#define __ASSERT_TRUE(_expr, _fmt, ...)					   \
> +	do {								   \
> +		if (!(_expr)) {						   \
> +			fprintf(stderr,					   \
> +				"Assert FAILED at %s:%d:%s(): %s is FALSE" \
> +				_fmt ".\n",				   \
> +				__FILE__, __LINE__, __FUNCTION__, #_expr   \
> +				__VA_OPT__(,) __VA_ARGS__);		   \
> +			return false;					   \
> +		}							   \
>  	} while (0)
> 
> +#define __TO_SCALAR(x)	((unsigned long long)(uintptr_t)(x))

There's a slight footgun here: this can truncate 64-bit types in 32-bit archs.
Though it doesn't really matter in our case, I think.

> +
> +#define ASSERT_TRUE(_expr) __ASSERT_TRUE(_expr, "")
>  #define ASSERT_FALSE(_expr) ASSERT_TRUE(!(_expr))
> -#define ASSERT_EQ(_val1, _val2) ASSERT_TRUE((_val1) == (_val2))
> -#define ASSERT_NE(_val1, _val2) ASSERT_TRUE((_val1) != (_val2))
> +#define ASSERT_EQ(_val1, _val2)						\
> +	__ASSERT_TRUE((_val1) == (_val2), " (0x%llx != 0x%llx)",	\
> +		      __TO_SCALAR(_val1), __TO_SCALAR(_val2))
> +#define ASSERT_NE(_val1, _val2) \
> +	__ASSERT_TRUE((_val1) != (_val2), " (0x%llx == 0x%llx)", \
> +		       __TO_SCALAR(_val1), __TO_SCALAR(_val2))
> 
>  #define ASSERT_FLAGS_SAME_MASK(_flags, _flags_other) \
>  	ASSERT_TRUE(vma_flags_same_mask((_flags), (_flags_other)))
> @@ -53,8 +62,6 @@
>  #define ASSERT_FLAGS_NONEMPTY(_flags) \
>  	ASSERT_FALSE(vma_flags_empty(_flags))
> 
> -#define IS_SET(_val, _flags) ((_val & _flags) == _flags)
> -
>  extern bool fail_prealloc;
> 
>  /* Override vma_iter_prealloc() so we can choose to fail it. */
> --
> 2.54.0

Acked-by: Pedro Falcato <[email protected]>

-- 
Pedro
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.