Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at for-next 221 lines 5.2 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright © 2024 Intel Corporation 4 */ 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, Q 13#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 foo 20#undef bar 21#undef buz 22} 23 24static void drop_first_arg_example(struct kunit *test) 25{ 26#define foo X, Y, Z, Q 27#define bar CALL_ARGS(COUNT_ARGS, DROP_FIRST_ARG(foo)) 28 29 KUNIT_EXPECT_EQ(test, bar, 3); 30 31#undef foo 32#undef bar 33} 34 35static void first_arg_example(struct kunit *test) 36{ 37 int X = 1; 38 39#define foo X, Y, Z, Q 40#define bar FIRST_ARG(foo) 41 42 KUNIT_EXPECT_EQ(test, bar, X); 43 KUNIT_EXPECT_STREQ(test, __stringify(bar), "X"); 44 45#undef foo 46#undef bar 47} 48 49static void last_arg_example(struct kunit *test) 50{ 51 int Q = 1; 52 53#define foo X, Y, Z, Q 54#define bar LAST_ARG(foo) 55 56 KUNIT_EXPECT_EQ(test, bar, Q); 57 KUNIT_EXPECT_STREQ(test, __stringify(bar), "Q"); 58 59#undef foo 60#undef bar 61} 62 63static void pick_arg_example(struct kunit *test) 64{ 65 int Y = 1, Z = 2; 66 67#define foo X, Y, Z, Q 68#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 foo 77#undef bar 78#undef buz 79} 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 foo 97#undef bar 98#undef buz 99} 100 101#define NO_ARGS 102#define FOO_ARGS X, Y, Z, Q 103#define MAX_ARGS -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12 104 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 foo 168#undef bar 169#undef buz 170} 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);