brintos

brintos / linux-shallow public Read only

0
0
Text · 5.1 KiB · f3fb23a Raw
222 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright © 2024 Intel Corporation4 */5 6#include <kunit/test.h>7 8#include "xe_args.h"9 10static void call_args_example(struct kunit *test)11{12#define foo	X, Y, Z, Q13#define bar	COUNT_ARGS(foo)14#define buz	CALL_ARGS(COUNT_ARGS, foo)15 16	KUNIT_EXPECT_EQ(test, bar, 1);17	KUNIT_EXPECT_EQ(test, buz, 4);18 19#undef foo20#undef bar21#undef buz22}23 24static void drop_first_arg_example(struct kunit *test)25{26#define foo	X, Y, Z, Q27#define bar	CALL_ARGS(COUNT_ARGS, DROP_FIRST_ARG(foo))28 29	KUNIT_EXPECT_EQ(test, bar, 3);30 31#undef foo32#undef bar33}34 35static void first_arg_example(struct kunit *test)36{37	int X = 1;38 39#define foo	X, Y, Z, Q40#define bar	FIRST_ARG(foo)41 42	KUNIT_EXPECT_EQ(test, bar, X);43	KUNIT_EXPECT_STREQ(test, __stringify(bar), "X");44 45#undef foo46#undef bar47}48 49static void last_arg_example(struct kunit *test)50{51	int Q = 1;52 53#define foo	X, Y, Z, Q54#define bar	LAST_ARG(foo)55 56	KUNIT_EXPECT_EQ(test, bar, Q);57	KUNIT_EXPECT_STREQ(test, __stringify(bar), "Q");58 59#undef foo60#undef bar61}62 63static void pick_arg_example(struct kunit *test)64{65	int Y = 1, Z = 2;66 67#define foo	X, Y, Z, Q68#define bar	PICK_ARG(2, foo)69#define buz	PICK_ARG3(foo)70 71	KUNIT_EXPECT_EQ(test, bar, Y);72	KUNIT_EXPECT_STREQ(test, __stringify(bar), "Y");73	KUNIT_EXPECT_EQ(test, buz, Z);74	KUNIT_EXPECT_STREQ(test, __stringify(buz), "Z");75 76#undef foo77#undef bar78#undef buz79}80 81static void sep_comma_example(struct kunit *test)82{83#define foo(f)	f(X) f(Y) f(Z) f(Q)84#define bar	DROP_FIRST_ARG(foo(ARGS_SEP_COMMA __stringify))85#define buz	CALL_ARGS(COUNT_ARGS, DROP_FIRST_ARG(foo(ARGS_SEP_COMMA)))86 87	static const char * const a[] = { bar };88 89	KUNIT_EXPECT_STREQ(test, a[0], "X");90	KUNIT_EXPECT_STREQ(test, a[1], "Y");91	KUNIT_EXPECT_STREQ(test, a[2], "Z");92	KUNIT_EXPECT_STREQ(test, a[3], "Q");93 94	KUNIT_EXPECT_EQ(test, buz, 4);95 96#undef foo97#undef bar98#undef buz99}100 101#define NO_ARGS102#define FOO_ARGS	X, Y, Z, Q103#define MAX_ARGS	-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12104 105static void count_args_test(struct kunit *test)106{107	int count;108 109	/* COUNT_ARGS() counts to 12 */110 111	count = COUNT_ARGS();112	KUNIT_EXPECT_EQ(test, count, 0);113 114	count = COUNT_ARGS(1);115	KUNIT_EXPECT_EQ(test, count, 1);116 117	count = COUNT_ARGS(a, b, c, d, e);118	KUNIT_EXPECT_EQ(test, count, 5);119 120	count = COUNT_ARGS(a, b, c, d, e, f, g, h, i, j, k, l);121	KUNIT_EXPECT_EQ(test, count, 12);122 123	/* COUNT_ARGS() does not expand params */124 125	count = COUNT_ARGS(NO_ARGS);126	KUNIT_EXPECT_EQ(test, count, 1);127 128	count = COUNT_ARGS(FOO_ARGS);129	KUNIT_EXPECT_EQ(test, count, 1);130}131 132static void call_args_test(struct kunit *test)133{134	int count;135 136	count = CALL_ARGS(COUNT_ARGS, NO_ARGS);137	KUNIT_EXPECT_EQ(test, count, 0);138	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, NO_ARGS), 0);139	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, FOO_ARGS), 4);140	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, FOO_ARGS, FOO_ARGS), 8);141	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, MAX_ARGS), 12);142}143 144static void drop_first_arg_test(struct kunit *test)145{146	int Y = -2, Z = -3, Q = -4;147	int a[] = { DROP_FIRST_ARG(FOO_ARGS) };148 149	KUNIT_EXPECT_EQ(test, DROP_FIRST_ARG(0, -1), -1);150	KUNIT_EXPECT_EQ(test, DROP_FIRST_ARG(DROP_FIRST_ARG(0, -1, -2)), -2);151 152	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, DROP_FIRST_ARG(FOO_ARGS)), 3);153	KUNIT_EXPECT_EQ(test, DROP_FIRST_ARG(DROP_FIRST_ARG(DROP_FIRST_ARG(FOO_ARGS))), -4);154	KUNIT_EXPECT_EQ(test, a[0], -2);155	KUNIT_EXPECT_EQ(test, a[1], -3);156	KUNIT_EXPECT_EQ(test, a[2], -4);157 158#define foo	DROP_FIRST_ARG(FOO_ARGS)159#define bar	DROP_FIRST_ARG(DROP_FIRST_ARG(FOO_ARGS))160#define buz	DROP_FIRST_ARG(DROP_FIRST_ARG(DROP_FIRST_ARG(FOO_ARGS)))161 162	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, foo), 3);163	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, bar), 2);164	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, buz), 1);165	KUNIT_EXPECT_STREQ(test, __stringify(buz), "Q");166 167#undef foo168#undef bar169#undef buz170}171 172static void first_arg_test(struct kunit *test)173{174	int X = -1;175	int a[] = { FIRST_ARG(FOO_ARGS) };176 177	KUNIT_EXPECT_EQ(test, FIRST_ARG(-1, -2), -1);178 179	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, FIRST_ARG(FOO_ARGS)), 1);180	KUNIT_EXPECT_EQ(test, FIRST_ARG(FOO_ARGS), -1);181	KUNIT_EXPECT_EQ(test, a[0], -1);182	KUNIT_EXPECT_STREQ(test, __stringify(FIRST_ARG(FOO_ARGS)), "X");183}184 185static void last_arg_test(struct kunit *test)186{187	int Q = -4;188	int a[] = { LAST_ARG(FOO_ARGS) };189 190	KUNIT_EXPECT_EQ(test, LAST_ARG(-1, -2), -2);191 192	KUNIT_EXPECT_EQ(test, CALL_ARGS(COUNT_ARGS, LAST_ARG(FOO_ARGS)), 1);193	KUNIT_EXPECT_EQ(test, LAST_ARG(FOO_ARGS), -4);194	KUNIT_EXPECT_EQ(test, a[0], -4);195	KUNIT_EXPECT_STREQ(test, __stringify(LAST_ARG(FOO_ARGS)), "Q");196 197	KUNIT_EXPECT_EQ(test, LAST_ARG(MAX_ARGS), -12);198	KUNIT_EXPECT_STREQ(test, __stringify(LAST_ARG(MAX_ARGS)), "-12");199}200 201static struct kunit_case args_tests[] = {202	KUNIT_CASE(count_args_test),203	KUNIT_CASE(call_args_example),204	KUNIT_CASE(call_args_test),205	KUNIT_CASE(drop_first_arg_example),206	KUNIT_CASE(drop_first_arg_test),207	KUNIT_CASE(first_arg_example),208	KUNIT_CASE(first_arg_test),209	KUNIT_CASE(last_arg_example),210	KUNIT_CASE(last_arg_test),211	KUNIT_CASE(pick_arg_example),212	KUNIT_CASE(sep_comma_example),213	{}214};215 216static struct kunit_suite args_test_suite = {217	.name = "args",218	.test_cases = args_tests,219};220 221kunit_test_suite(args_test_suite);222