[PATCH v3 2/3] drm/xe/kunit: Add simple tests for new xe_args macros

Lucas De Marchi lucas.demarchi at intel.com
Fri May 3 02:40:38 UTC 2024


On Fri, May 03, 2024 at 12:33:12AM GMT, Michal Wajdeczko wrote:
>We want to make sure that helper macros are working as expected.
>
>Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
>Cc: Lucas De Marchi <lucas.demarchi at intel.com>


Reviewed-by: Lucas De Marchi <lucas.demarchi at intel.com>

Lucas De Marchi

>---
> drivers/gpu/drm/xe/tests/Makefile       |   1 +
> drivers/gpu/drm/xe/tests/xe_args_test.c | 190 ++++++++++++++++++++++++
> 2 files changed, 191 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/tests/xe_args_test.c
>
>diff --git a/drivers/gpu/drm/xe/tests/Makefile b/drivers/gpu/drm/xe/tests/Makefile
>index 8cf2367449d8..6e58931fddd4 100644
>--- a/drivers/gpu/drm/xe/tests/Makefile
>+++ b/drivers/gpu/drm/xe/tests/Makefile
>@@ -11,6 +11,7 @@ xe_live_test-y = xe_live_test_mod.o \
> # Normal kunit tests
> obj-$(CONFIG_DRM_XE_KUNIT_TEST) += xe_test.o
> xe_test-y = xe_test_mod.o \
>+	xe_args_test.o \
> 	xe_pci_test.o \
> 	xe_rtp_test.o \
> 	xe_wa_test.o
>diff --git a/drivers/gpu/drm/xe/tests/xe_args_test.c b/drivers/gpu/drm/xe/tests/xe_args_test.c
>new file mode 100644
>index 000000000000..9b44c1ab6364
>--- /dev/null
>+++ b/drivers/gpu/drm/xe/tests/xe_args_test.c
>@@ -0,0 +1,190 @@
>+// SPDX-License-Identifier: GPL-2.0
>+/*
>+ * Copyright © 2024 Intel Corporation
>+ */
>+
>+#include <kunit/test.h>
>+
>+#include "xe_args.h"
>+
>+static void call_args_example(struct kunit *test)
>+{
>+#define foo	X, Y, Z, Q
>+#define bar	COUNT_ARGS(foo)
>+#define buz	CALL_ARGS(COUNT_ARGS, foo)
>+
>+	KUNIT_EXPECT_EQ(test, bar, 1);
>+	KUNIT_EXPECT_EQ(test, buz, 4);
>+
>+#undef foo
>+#undef bar
>+#undef buz
>+}
>+
>+static void drop_first_example(struct kunit *test)
>+{
>+#define foo	X, Y, Z, Q
>+#define bar	CALL_ARGS(COUNT_ARGS, DROP_FIRST(foo))
>+
>+	KUNIT_EXPECT_EQ(test, bar, 3);
>+
>+#undef foo
>+#undef bar
>+}
>+
>+static void pick_first_example(struct kunit *test)
>+{
>+	int X = 1;
>+
>+#define foo	X, Y, Z, Q
>+#define bar	PICK_FIRST(foo)
>+
>+	KUNIT_EXPECT_EQ(test, bar, X);
>+	KUNIT_EXPECT_STREQ(test, __stringify(bar), "X");
>+
>+#undef foo
>+#undef bar
>+}
>+
>+static void pick_last_example(struct kunit *test)
>+{
>+	int Q = 1;
>+
>+#define foo	X, Y, Z, Q
>+#define bar	PICK_LAST(foo)
>+
>+	KUNIT_EXPECT_EQ(test, bar, Q);
>+	KUNIT_EXPECT_STREQ(test, __stringify(bar), "Q");
>+
>+#undef foo
>+#undef bar
>+}
>+
>+static void sep_comma_example(struct kunit *test)
>+{
>+#define foo(f)	f(X) f(Y) f(Z) f(Q)
>+#define bar	DROP_FIRST(foo(ARGS_SEP_COMMA __stringify))
>+#define buz	CALL_ARGS(COUNT_ARGS, DROP_FIRST(foo(ARGS_SEP_COMMA)))
>+
>+	static const char * const a[] = { bar };
>+
>+	KUNIT_EXPECT_STREQ(test, a[0], "X");
>+	KUNIT_EXPECT_STREQ(test, a[1], "Y");
>+	KUNIT_EXPECT_STREQ(test, a[2], "Z");
>+	KUNIT_EXPECT_STREQ(test, a[3], "Q");
>+
>+	KUNIT_EXPECT_EQ(test, buz, 4);
>+
>+#undef foo
>+#undef bar
>+#undef buz
>+}
>+
>+#define NO_ARGS
>+#define FOO_ARGS	X, Y, Z, Q
>+#define MAX_ARGS	-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12
>+
>+static void count_args_test(struct kunit *test)
>+{
>+	int count;
>+
>+	/* COUNT_ARGS() counts to 12 */
>+
>+	count = COUNT_ARGS();
>+	KUNIT_EXPECT_EQ(test, count, 0);
>+
>+	count = COUNT_ARGS(1);
>+	KUNIT_EXPECT_EQ(test, count, 1);
>+
>+	count = COUNT_ARGS(a, b, c, d, e);
>+	KUNIT_EXPECT_EQ(test, count, 5);
>+
>+	count = COUNT_ARGS(a, b, c, d, e, f, g, h, i, j, k, l);
>+	KUNIT_EXPECT_EQ(test, count, 12);
>+
>+	/* COUNT_ARGS() does not expand params */
>+
>+	count = COUNT_ARGS(NO_ARGS);
>+	KUNIT_EXPECT_EQ(test, count, 1);
>+
>+	count = COUNT_ARGS(FOO_ARGS);
>+	KUNIT_EXPECT_EQ(test, count, 1);
>+}
>+
>+static void call_args_test(struct kunit *test)
>+{
>+	int count;
>+
>+	count = CALL_ARGS(COUNT_ARGS, NO_ARGS);
>+	KUNIT_EXPECT_EQ(test, count, 0);
>+	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, NO_ARGS), 0);
>+	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, FOO_ARGS), 4);
>+	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, FOO_ARGS, FOO_ARGS), 8);
>+	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, MAX_ARGS), 12);
>+}
>+
>+static void drop_first_test(struct kunit *test)
>+{
>+	int Y = -2, Z = -3, Q = -4;
>+	int a[] = { DROP_FIRST(FOO_ARGS) };
>+
>+	KUNIT_EXPECT_EQ(test, DROP_FIRST(0, -1), -1);
>+	KUNIT_EXPECT_EQ(test, DROP_FIRST(DROP_FIRST(0, -1, -2)), -2);
>+
>+	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, DROP_FIRST(FOO_ARGS)), 3);
>+	KUNIT_EXPECT_EQ(test, DROP_FIRST(DROP_FIRST(DROP_FIRST(FOO_ARGS))), -4);
>+	KUNIT_EXPECT_EQ(test, a[0], -2);
>+	KUNIT_EXPECT_EQ(test, a[1], -3);
>+	KUNIT_EXPECT_EQ(test, a[2], -4);
>+	KUNIT_EXPECT_STREQ(test, __stringify(DROP_FIRST(DROP_FIRST(DROP_FIRST(FOO_ARGS)))), "Q");
>+}
>+
>+static void pick_first_test(struct kunit *test)
>+{
>+	int X = -1;
>+	int a[] = { PICK_FIRST(FOO_ARGS) };
>+
>+	KUNIT_EXPECT_EQ(test, PICK_FIRST(-1, -2), -1);
>+
>+	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, PICK_FIRST(FOO_ARGS)), 1);
>+	KUNIT_EXPECT_EQ(test, PICK_FIRST(FOO_ARGS), -1);
>+	KUNIT_EXPECT_EQ(test, a[0], -1);
>+	KUNIT_EXPECT_STREQ(test, __stringify(PICK_FIRST(FOO_ARGS)), "X");
>+}
>+
>+static void pick_last_test(struct kunit *test)
>+{
>+	int Q = -4;
>+	int a[] = { PICK_LAST(FOO_ARGS) };
>+
>+	KUNIT_EXPECT_EQ(test, PICK_LAST(-1, -2), -2);
>+
>+	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, PICK_LAST(FOO_ARGS)), 1);
>+	KUNIT_EXPECT_EQ(test, PICK_LAST(FOO_ARGS), -4);
>+	KUNIT_EXPECT_EQ(test, a[0], -4);
>+	KUNIT_EXPECT_STREQ(test, __stringify(PICK_LAST(FOO_ARGS)), "Q");
>+
>+	KUNIT_EXPECT_EQ(test, PICK_LAST(MAX_ARGS), -12);
>+	KUNIT_EXPECT_STREQ(test, __stringify(PICK_LAST(MAX_ARGS)), "-12");
>+}
>+
>+static struct kunit_case args_tests[] = {
>+	KUNIT_CASE(count_args_test),
>+	KUNIT_CASE(call_args_example),
>+	KUNIT_CASE(call_args_test),
>+	KUNIT_CASE(drop_first_example),
>+	KUNIT_CASE(drop_first_test),
>+	KUNIT_CASE(pick_first_example),
>+	KUNIT_CASE(pick_first_test),
>+	KUNIT_CASE(pick_last_example),
>+	KUNIT_CASE(pick_last_test),
>+	KUNIT_CASE(sep_comma_example),
>+	{}
>+};
>+
>+static struct kunit_suite args_test_suite = {
>+	.name = "args",
>+	.test_cases = args_tests,
>+};
>+
>+kunit_test_suite(args_test_suite);
>-- 
>2.43.0
>


More information about the Intel-xe mailing list