]> git.saurik.com Git - apple/xnu.git/blob - osfmk/tests/ktest.h
xnu-7195.101.1.tar.gz
[apple/xnu.git] / osfmk / tests / ktest.h
1 /*
2 * Copyright (c) 2015 Apple Inc. All rights reserved.
3 *
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
14 *
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
17 *
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
25 *
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27 */
28
29 #ifndef _TESTS_KTEST_H
30 #define _TESTS_KTEST_H
31
32 /* Symbol name prefix */
33 #define T_SYM(sym) ktest_ ## sym
34
35 #include <stdarg.h>
36
37 extern unsigned int T_SYM(current_line);
38 extern const char * T_SYM(current_file);
39 extern const char * T_SYM(current_func);
40 extern int T_SYM(testcase_mode);
41 extern int T_SYM(testcase_result);
42 extern int T_SYM(test_result);
43 extern int T_SYM(quiet);
44
45 void T_SYM(start)(void);
46 void T_SYM(finish)(void);
47 void T_SYM(testbegin)(const char * test_name);
48 void T_SYM(testend)(void);
49 void T_SYM(testskip)(const char * msg, ...);
50 void T_SYM(testcase)(int expr);
51 void T_SYM(log)(const char * msg, ...);
52 void T_SYM(perf)(const char * metric, const char * unit, double value, const char * desc);
53 void T_SYM(update_test_result_state)(void);
54 void T_SYM(assertion_check)(void);
55
56 void T_SYM(set_current_msg)(const char * msg, ...);
57 void T_SYM(set_current_expr)(const char * expr_fmt, ...);
58 void T_SYM(set_current_var)(const char * name, const char * value_fmt, ...);
59
60 typedef union {
61 char _char;
62 unsigned char _uchar;
63
64 short _short;
65 unsigned short _ushort;
66
67 int _int;
68 unsigned int _uint;
69
70 long _long;
71 unsigned long _ulong;
72
73 long long _llong;
74 unsigned long long _ullong;
75
76 float _float;
77
78 double _double;
79
80 long double _ldouble;
81
82 void* _ptr;
83 } T_SYM(temp);
84
85 extern T_SYM(temp) T_SYM(temp1), T_SYM(temp2), T_SYM(temp3);
86
87 #define T_SUCCESS 1
88 #define T_FAILURE 0
89
90 /* Testcase modes */
91 #define T_MAIN 0
92 #define T_SETUP 1
93
94 /* Testcase result states */
95 #define T_RESULT_PASS 0
96 #define T_RESULT_FAIL 1
97 #define T_RESULT_UXPASS 2
98 #define T_RESULT_XFAIL 3
99
100 /* Test result states */
101 #define T_STATE_UNRESOLVED 0
102 #define T_STATE_PASS 1
103 #define T_STATE_FAIL 2
104 #define T_STATE_SETUPFAIL 3
105
106 /*
107 * Helpers
108 */
109
110 #define T_TOSTRING_HELPER(x) #x
111 #define T_TOSTRING(x) T_TOSTRING_HELPER(x)
112
113 #define T_SAVEINFO do {\
114 T_SYM(current_line) = __LINE__;\
115 T_SYM(current_func) = (const char *)__func__;\
116 T_SYM(current_file) = (const char *)__FILE__;\
117 } while(0)
118
119 #define T_SET_AUX_VARS do {\
120 /* Only used in userspace lib for now */ \
121 } while(0)
122
123 #define T_ASSERTION_CHECK do {\
124 T_SYM(assertion_check)();\
125 } while(0)
126
127 #define T_EXPECT_BLOCK2(type, fmt, cmp, lhs, rhs, msg, ...) do {\
128 T_SAVEINFO;\
129 T_SYM(temp1).type = (lhs);\
130 T_SYM(temp2).type = (rhs);\
131 T_SYM(set_current_expr)(T_TOSTRING(lhs) " "\
132 T_TOSTRING(cmp) " "\
133 T_TOSTRING(rhs));\
134 T_SYM(set_current_var)(T_TOSTRING(lhs), fmt, T_SYM(temp1).type);\
135 T_SYM(set_current_var)(T_TOSTRING(rhs), fmt, T_SYM(temp2).type);\
136 T_SET_AUX_VARS;\
137 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
138 T_SYM(testcase)(T_SYM(temp1).type cmp T_SYM(temp2).type);\
139 } while(0)
140
141 #define T_ASSERT_BLOCK2(type, fmt, cmp, lhs, rhs, msg, ...) do {\
142 T_EXPECT_BLOCK2(type, fmt, cmp, lhs, rhs, msg, ## __VA_ARGS__);\
143 T_ASSERTION_CHECK;\
144 } while(0)
145
146 /*
147 * Core functions
148 */
149
150 /* Denotes start of testing. All prior output is ignored. */
151 #define T_START do {\
152 T_SAVEINFO;\
153 T_SYM(start)();\
154 } while(0)
155
156 /* Denotes end of testing. All subsequent output is ignored. */
157 #define T_FINISH do {\
158 T_SAVEINFO;\
159 T_SYM(finish)();\
160 } while(0)
161
162 /* Denotes beginning of a test. */
163 #define T_BEGIN(name) do {\
164 T_SAVEINFO;\
165 T_SYM(testbegin)(name);\
166 } while(0)
167
168 /* Denotes end of current test. */
169 #define T_END do {\
170 T_SAVEINFO;\
171 T_SYM(testend)();\
172 } while(0)
173
174 /* Denotes beginning of a setup section of the current test. */
175 #define T_SETUPBEGIN do {\
176 T_SYM(testcase_mode) = T_SETUP;\
177 } while(0)
178
179 /* Denotes end of the current setup section of the current test. */
180 #define T_SETUPEND do {\
181 T_SYM(testcase_mode) = T_MAIN;\
182 } while(0)
183
184 /* Denotes end of current test because test was skipped. */
185 #define T_SKIP(msg, ...) do {\
186 T_SAVEINFO;\
187 T_SYM(testskip)(msg, ## __VA_ARGS__);\
188 } while(0)
189
190 /* Returns result of latest testrun. */
191 #define T_TESTRESULT (T_SYM(test_result))
192
193 /* Return result of latest testcase. */
194 #define T_TESTCASERESULT (T_SYM(testcase_result))
195
196 /* Flags the next testcase as expected failure. */
197 #define T_EXPECTFAIL do {\
198 T_SYM(expectfail) = 1;\
199 } while(0)
200
201 /* Only emit output for next testcase if it is a FAIL or UXPASS. */
202 #define T_QUIET do {\
203 T_SYM(quiet) = 1;\
204 } while(0)
205
206 /* Logs a message. */
207 #define T_LOG(msg, ...) do {\
208 T_SAVEINFO;\
209 T_SYM(log)(msg, ## __VA_ARGS__);\
210 } while(0)
211
212 /* Explicit pass. */
213 #define T_PASS(msg, ...) do {\
214 T_SAVEINFO;\
215 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
216 T_SYM(testcase)(T_SUCCESS);\
217 } while(0)
218
219 /* Explicit fail. */
220 #define T_FAIL(msg, ...) do {\
221 T_SAVEINFO;\
222 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
223 T_SYM(testcase)(T_FAILURE);\
224 } while(0)
225
226 /* Explicit assert fail. */
227 #define T_ASSERT_FAIL(msg, ...) do {\
228 T_SAVEINFO;\
229 T_SET_AUX_VARS;\
230 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
231 T_SYM(testcase)(T_FAILURE);\
232 T_SYM(assertion_fail)();\
233 } while(0)
234
235 /* Generic expect. */
236 #define T_EXPECT(expr, msg, ...) do {\
237 T_SAVEINFO;\
238 T_SYM(temp1)._int = (int)(!!(expr));\
239 T_SYM(set_current_expr)(T_TOSTRING(expr));\
240 T_SET_AUX_VARS;\
241 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
242 T_SYM(testcase)(T_SYM(temp1)._int);\
243 } while(0)
244
245 /* Generic assert. */
246 #define T_ASSERT(expr, msg, ...) do {\
247 T_EXPECT(expr, msg, ## __VA_ARGS__);\
248 T_ASSERTION_CHECK;\
249 } while(0)
250
251 /*
252 * Convenience functions
253 */
254
255 /* null */
256
257 #define T_EXPECT_NOTNULL(expr, msg, ...) do {\
258 T_SAVEINFO;\
259 T_SYM(temp1)._int = (int)(!!(expr));\
260 T_SYM(set_current_expr)(T_TOSTRING(expr) " != NULL");\
261 T_SYM(set_current_var)(T_TOSTRING(expr),\
262 "%s",\
263 T_SYM(temp1)._int ? "<NOTNULL>" : "NULL");\
264 T_SET_AUX_VARS;\
265 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
266 T_SYM(testcase)(T_SYM(temp1)._int);\
267 } while(0)
268
269 #define T_EXPECT_NULL(expr, msg, ...) do {\
270 T_SAVEINFO;\
271 T_SYM(temp1)._int = (int)(!(expr));\
272 T_SYM(set_current_expr)(T_TOSTRING(expr) " == NULL");\
273 T_SYM(set_current_var)(T_TOSTRING(expr),\
274 "%s",\
275 T_SYM(temp1)._int ? "NULL" : "<NOTNULL>");\
276 T_SET_AUX_VARS;\
277 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
278 T_SYM(testcase)(T_SYM(temp1)._int);\
279 } while(0)
280
281 #define T_ASSERT_NOTNULL(expr, msg, ...) do {\
282 T_EXPECT_NOTNULL(expr, msg, ## __VA_ARGS__);\
283 T_ASSERTION_CHECK;\
284 } while(0)
285
286 #define T_ASSERT_NULL(expr, msg, ...) do {\
287 T_EXPECT_NULL(expr, msg, ## __VA_ARGS__);\
288 T_ASSERTION_CHECK;\
289 } while(0)
290
291 /* string */
292
293 // TODO: check/truncate inputs
294 #define T_EXPECT_EQ_STR(lhs, rhs, msg, ...) do {\
295 T_SAVEINFO;\
296 T_SYM(temp1)._ptr = (lhs);\
297 T_SYM(temp2)._ptr = (rhs);\
298 T_SYM(set_current_expr)(T_TOSTRING(lhs) " == " T_TOSTRING(rhs));\
299 T_SYM(set_current_var)(T_TOSTRING(lhs), "%s", T_SYM(temp1)._ptr);\
300 T_SYM(set_current_var)(T_TOSTRING(rhs), "%s", T_SYM(temp2)._ptr);\
301 T_SET_AUX_VARS;\
302 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
303 T_SYM(testcase)(strcmp(T_SYM(temp1)._ptr, T_SYM(temp2)._ptr) == 0);\
304 } while(0)
305
306 #define T_EXPECT_NE_STR(lhs, rhs, msg, ...) do {\
307 T_SAVEINFO;\
308 T_SYM(temp1)._ptr = (lhs);\
309 T_SYM(temp2)._ptr = (rhs);\
310 T_SYM(set_current_expr)(T_TOSTRING(lhs) " == " T_TOSTRING(rhs));\
311 T_SYM(set_current_var)(T_TOSTRING(lhs), "%s", T_SYM(temp1)._ptr);\
312 T_SYM(set_current_var)(T_TOSTRING(rhs), "%s", T_SYM(temp2)._ptr);\
313 T_SET_AUX_VARS;\
314 T_SYM(set_current_msg)(msg, ## __VA_ARGS__);\
315 T_SYM(testcase)(strcmp(T_SYM(temp1)._ptr, T_SYM(temp2)._ptr) != 0);\
316 } while(0)
317
318 #define T_ASSERT_EQ_STR(lhs, rhs, msg, ...) do {\
319 T_EXPECT_EQ_STR(lhs, rhs, msg, # __VA_ARGS__);\
320 T_ASSERTION_CHECK;\
321 } while(0)
322
323 #define T_ASSERT_NE_STR(lhs, rhs, msg, ...) do {\
324 T_EXPECT_NE_STR(lhs, rhs, msg, # __VA_ARGS__);\
325 T_ASSERTION_CHECK;\
326 } while(0)
327
328 /* char */
329
330 #define T_EXPECT_EQ_CHAR(lhs, rhs, msg, ...) \
331 T_EXPECT_BLOCK2(_char, "%c", ==, lhs, rhs, msg, ## __VA_ARGS__)
332 #define T_EXPECT_NE_CHAR(lhs, rhs, msg, ...) \
333 T_EXPECT_BLOCK2(_char, "%c", !=, lhs, rhs, msg, ## __VA_ARGS__)
334 #define T_EXPECT_LT_CHAR(lhs, rhs, msg, ...) \
335 T_EXPECT_BLOCK2(_char, "%c", <, lhs, rhs, msg, ## __VA_ARGS__)
336 #define T_EXPECT_GT_CHAR(lhs, rhs, msg, ...) \
337 T_EXPECT_BLOCK2(_char, "%c", >, lhs, rhs, msg, ## __VA_ARGS__)
338 #define T_EXPECT_LE_CHAR(lhs, rhs, msg, ...) \
339 T_EXPECT_BLOCK2(_char, "%c", <=, lhs, rhs, msg, ## __VA_ARGS__)
340 #define T_EXPECT_GE_CHAR(lhs, rhs, msg, ...) \
341 T_EXPECT_BLOCK2(_char, "%c", >=, lhs, rhs, msg, ## __VA_ARGS__)
342
343 #define T_ASSERT_EQ_CHAR(lhs, rhs, msg, ...) \
344 T_ASSERT_BLOCK2(_char, "%c", ==, lhs, rhs, msg, ## __VA_ARGS__)
345 #define T_ASSERT_NE_CHAR(lhs, rhs, msg, ...) \
346 T_ASSERT_BLOCK2(_char, "%c", !=, lhs, rhs, msg, ## __VA_ARGS__)
347 #define T_ASSERT_LT_CHAR(lhs, rhs, msg, ...) \
348 T_ASSERT_BLOCK2(_char, "%c", <, lhs, rhs, msg, ## __VA_ARGS__)
349 #define T_ASSERT_GT_CHAR(lhs, rhs, msg, ...) \
350 T_ASSERT_BLOCK2(_char, "%c", >, lhs, rhs, msg, ## __VA_ARGS__)
351 #define T_ASSERT_LE_CHAR(lhs, rhs, msg, ...) \
352 T_ASSERT_BLOCK2(_char, "%c", <=, lhs, rhs, msg, ## __VA_ARGS__)
353 #define T_ASSERT_GE_CHAR(lhs, rhs, msg, ...) \
354 T_ASSERT_BLOCK2(_char, "%c", >=, lhs, rhs, msg, ## __VA_ARGS__)
355
356 /* unsigned char */
357
358 #define T_EXPECT_EQ_UCHAR(lhs, rhs, msg, ...) \
359 T_EXPECT_BLOCK2(_uchar, "%c", ==, lhs, rhs, msg, ## __VA_ARGS__)
360 #define T_EXPECT_NE_UCHAR(lhs, rhs, msg, ...) \
361 T_EXPECT_BLOCK2(_uchar, "%c", !=, lhs, rhs, msg, ## __VA_ARGS__)
362 #define T_EXPECT_LT_UCHAR(lhs, rhs, msg, ...) \
363 T_EXPECT_BLOCK2(_uchar, "%c", <, lhs, rhs, msg, ## __VA_ARGS__)
364 #define T_EXPECT_GT_UCHAR(lhs, rhs, msg, ...) \
365 T_EXPECT_BLOCK2(_uchar, "%c", >, lhs, rhs, msg, ## __VA_ARGS__)
366 #define T_EXPECT_LE_UCHAR(lhs, rhs, msg, ...) \
367 T_EXPECT_BLOCK2(_uchar, "%c", <=, lhs, rhs, msg, ## __VA_ARGS__)
368 #define T_EXPECT_GE_UCHAR(lhs, rhs, msg, ...) \
369 T_EXPECT_BLOCK2(_uchar, "%c", >=, lhs, rhs, msg, ## __VA_ARGS__)
370
371 #define T_ASSERT_EQ_UCHAR(lhs, rhs, msg, ...) \
372 T_ASSERT_BLOCK2(_uchar, "%c", ==, lhs, rhs, msg, ## __VA_ARGS__)
373 #define T_ASSERT_NE_UCHAR(lhs, rhs, msg, ...) \
374 T_ASSERT_BLOCK2(_uchar, "%c", !=, lhs, rhs, msg, ## __VA_ARGS__)
375 #define T_ASSERT_LT_UCHAR(lhs, rhs, msg, ...) \
376 T_ASSERT_BLOCK2(_uchar, "%c", <, lhs, rhs, msg, ## __VA_ARGS__)
377 #define T_ASSERT_GT_UCHAR(lhs, rhs, msg, ...) \
378 T_ASSERT_BLOCK2(_uchar, "%c", >, lhs, rhs, msg, ## __VA_ARGS__)
379 #define T_ASSERT_LE_UCHAR(lhs, rhs, msg, ...) \
380 T_ASSERT_BLOCK2(_uchar, "%c", <=, lhs, rhs, msg, ## __VA_ARGS__)
381 #define T_ASSERT_GE_UCHAR(lhs, rhs, msg, ...) \
382 T_ASSERT_BLOCK2(_uchar, "%c", >=, lhs, rhs, msg, ## __VA_ARGS__)
383
384 /* short */
385
386 #define T_EXPECT_EQ_SHORT(lhs, rhs, msg, ...) \
387 T_EXPECT_BLOCK2(_short, "%hi", ==, lhs, rhs, msg, ## __VA_ARGS__)
388 #define T_EXPECT_NE_SHORT(lhs, rhs, msg, ...) \
389 T_EXPECT_BLOCK2(_short, "%hi", !=, lhs, rhs, msg, ## __VA_ARGS__)
390 #define T_EXPECT_LT_SHORT(lhs, rhs, msg, ...) \
391 T_EXPECT_BLOCK2(_short, "%hi", <, lhs, rhs, msg, ## __VA_ARGS__)
392 #define T_EXPECT_GT_SHORT(lhs, rhs, msg, ...) \
393 T_EXPECT_BLOCK2(_short, "%hi", >, lhs, rhs, msg, ## __VA_ARGS__)
394 #define T_EXPECT_LE_SHORT(lhs, rhs, msg, ...) \
395 T_EXPECT_BLOCK2(_short, "%hi", <=, lhs, rhs, msg, ## __VA_ARGS__)
396 #define T_EXPECT_GE_SHORT(lhs, rhs, msg, ...) \
397 T_EXPECT_BLOCK2(_short, "%hi", >=, lhs, rhs, msg, ## __VA_ARGS__)
398
399 #define T_ASSERT_EQ_SHORT(lhs, rhs, msg, ...) \
400 T_ASSERT_BLOCK2(_short, "%hi", ==, lhs, rhs, msg, ## __VA_ARGS__)
401 #define T_ASSERT_NE_SHORT(lhs, rhs, msg, ...) \
402 T_ASSERT_BLOCK2(_short, "%hi", !=, lhs, rhs, msg, ## __VA_ARGS__)
403 #define T_ASSERT_LT_SHORT(lhs, rhs, msg, ...) \
404 T_ASSERT_BLOCK2(_short, "%hi", <, lhs, rhs, msg, ## __VA_ARGS__)
405 #define T_ASSERT_GT_SHORT(lhs, rhs, msg, ...) \
406 T_ASSERT_BLOCK2(_short, "%hi", >, lhs, rhs, msg, ## __VA_ARGS__)
407 #define T_ASSERT_LE_SHORT(lhs, rhs, msg, ...) \
408 T_ASSERT_BLOCK2(_short, "%hi", <=, lhs, rhs, msg, ## __VA_ARGS__)
409 #define T_ASSERT_GE_SHORT(lhs, rhs, msg, ...) \
410 T_ASSERT_BLOCK2(_short, "%hi", >=, lhs, rhs, msg, ## __VA_ARGS__)
411
412 /* unsigned short */
413
414 #define T_EXPECT_EQ_USHORT(lhs, rhs, msg, ...) \
415 T_EXPECT_BLOCK2(_ushort, "%hu", ==, lhs, rhs, msg, ## __VA_ARGS__)
416 #define T_EXPECT_NE_USHORT(lhs, rhs, msg, ...) \
417 T_EXPECT_BLOCK2(_ushort, "%hu", !=, lhs, rhs, msg, ## __VA_ARGS__)
418 #define T_EXPECT_LT_USHORT(lhs, rhs, msg, ...) \
419 T_EXPECT_BLOCK2(_ushort, "%hu", <, lhs, rhs, msg, ## __VA_ARGS__)
420 #define T_EXPECT_GT_USHORT(lhs, rhs, msg, ...) \
421 T_EXPECT_BLOCK2(_ushort, "%hu", >, lhs, rhs, msg, ## __VA_ARGS__)
422 #define T_EXPECT_LE_USHORT(lhs, rhs, msg, ...) \
423 T_EXPECT_BLOCK2(_ushort, "%hu", <=, lhs, rhs, msg, ## __VA_ARGS__)
424 #define T_EXPECT_GE_USHORT(lhs, rhs, msg, ...) \
425 T_EXPECT_BLOCK2(_ushort, "%hu", >=, lhs, rhs, msg, ## __VA_ARGS__)
426
427 #define T_ASSERT_EQ_USHORT(lhs, rhs, msg, ...) \
428 T_ASSERT_BLOCK2(_ushort, "%hu", ==, lhs, rhs, msg, ## __VA_ARGS__)
429 #define T_ASSERT_NE_USHORT(lhs, rhs, msg, ...) \
430 T_ASSERT_BLOCK2(_ushort, "%hu", !=, lhs, rhs, msg, ## __VA_ARGS__)
431 #define T_ASSERT_LT_USHORT(lhs, rhs, msg, ...) \
432 T_ASSERT_BLOCK2(_ushort, "%hu", <, lhs, rhs, msg, ## __VA_ARGS__)
433 #define T_ASSERT_GT_USHORT(lhs, rhs, msg, ...) \
434 T_ASSERT_BLOCK2(_ushort, "%hu", >, lhs, rhs, msg, ## __VA_ARGS__)
435 #define T_ASSERT_LE_USHORT(lhs, rhs, msg, ...) \
436 T_ASSERT_BLOCK2(_ushort, "%hu", <=, lhs, rhs, msg, ## __VA_ARGS__)
437 #define T_ASSERT_GE_USHORT(lhs, rhs, msg, ...) \
438 T_ASSERT_BLOCK2(_ushort, "%hu", >=, lhs, rhs, msg, ## __VA_ARGS__)
439
440 /* int */
441
442 #define T_EXPECT_EQ_INT(lhs, rhs, msg, ...) \
443 T_EXPECT_BLOCK2(_int, "%d", ==, lhs, rhs, msg, ## __VA_ARGS__)
444 #define T_EXPECT_NE_INT(lhs, rhs, msg, ...) \
445 T_EXPECT_BLOCK2(_int, "%d", !=, lhs, rhs, msg, ## __VA_ARGS__)
446 #define T_EXPECT_LT_INT(lhs, rhs, msg, ...) \
447 T_EXPECT_BLOCK2(_int, "%d", <, lhs, rhs, msg, ## __VA_ARGS__)
448 #define T_EXPECT_GT_INT(lhs, rhs, msg, ...) \
449 T_EXPECT_BLOCK2(_int, "%d", >, lhs, rhs, msg, ## __VA_ARGS__)
450 #define T_EXPECT_LE_INT(lhs, rhs, msg, ...) \
451 T_EXPECT_BLOCK2(_int, "%d", <=, lhs, rhs, msg, ## __VA_ARGS__)
452 #define T_EXPECT_GE_INT(lhs, rhs, msg, ...) \
453 T_EXPECT_BLOCK2(_int, "%d", >=, lhs, rhs, msg, ## __VA_ARGS__)
454
455 #define T_ASSERT_EQ_INT(lhs, rhs, msg, ...) \
456 T_ASSERT_BLOCK2(_int, "%d", ==, lhs, rhs, msg, ## __VA_ARGS__)
457 #define T_ASSERT_NE_INT(lhs, rhs, msg, ...) \
458 T_ASSERT_BLOCK2(_int, "%d", !=, lhs, rhs, msg, ## __VA_ARGS__)
459 #define T_ASSERT_LT_INT(lhs, rhs, msg, ...) \
460 T_ASSERT_BLOCK2(_int, "%d", <, lhs, rhs, msg, ## __VA_ARGS__)
461 #define T_ASSERT_GT_INT(lhs, rhs, msg, ...) \
462 T_ASSERT_BLOCK2(_int, "%d", >, lhs, rhs, msg, ## __VA_ARGS__)
463 #define T_ASSERT_LE_INT(lhs, rhs, msg, ...) \
464 T_ASSERT_BLOCK2(_int, "%d", <=, lhs, rhs, msg, ## __VA_ARGS__)
465 #define T_ASSERT_GE_INT(lhs, rhs, msg, ...) \
466 T_ASSERT_BLOCK2(_int, "%d", >=, lhs, rhs, msg, ## __VA_ARGS__)
467
468 /* unsigned int */
469
470 #define T_EXPECT_EQ_UINT(lhs, rhs, msg, ...) \
471 T_EXPECT_BLOCK2(_uint, "%u", ==, lhs, rhs, msg, ## __VA_ARGS__)
472 #define T_EXPECT_NE_UINT(lhs, rhs, msg, ...) \
473 T_EXPECT_BLOCK2(_uint, "%u", !=, lhs, rhs, msg, ## __VA_ARGS__)
474 #define T_EXPECT_LT_UINT(lhs, rhs, msg, ...) \
475 T_EXPECT_BLOCK2(_uint, "%u", <, lhs, rhs, msg, ## __VA_ARGS__)
476 #define T_EXPECT_GT_UINT(lhs, rhs, msg, ...) \
477 T_EXPECT_BLOCK2(_uint, "%u", >, lhs, rhs, msg, ## __VA_ARGS__)
478 #define T_EXPECT_LE_UINT(lhs, rhs, msg, ...) \
479 T_EXPECT_BLOCK2(_uint, "%u", <=, lhs, rhs, msg, ## __VA_ARGS__)
480 #define T_EXPECT_GE_UINT(lhs, rhs, msg, ...) \
481 T_EXPECT_BLOCK2(_uint, "%u", >=, lhs, rhs, msg, ## __VA_ARGS__)
482
483 #define T_ASSERT_EQ_UINT(lhs, rhs, msg, ...) \
484 T_ASSERT_BLOCK2(_uint, "%u", ==, lhs, rhs, msg, ## __VA_ARGS__)
485 #define T_ASSERT_NE_UINT(lhs, rhs, msg, ...) \
486 T_ASSERT_BLOCK2(_uint, "%u", !=, lhs, rhs, msg, ## __VA_ARGS__)
487 #define T_ASSERT_LT_UINT(lhs, rhs, msg, ...) \
488 T_ASSERT_BLOCK2(_uint, "%u", <, lhs, rhs, msg, ## __VA_ARGS__)
489 #define T_ASSERT_GT_UINT(lhs, rhs, msg, ...) \
490 T_ASSERT_BLOCK2(_uint, "%u", >, lhs, rhs, msg, ## __VA_ARGS__)
491 #define T_ASSERT_LE_UINT(lhs, rhs, msg, ...) \
492 T_ASSERT_BLOCK2(_uint, "%u", <=, lhs, rhs, msg, ## __VA_ARGS__)
493 #define T_ASSERT_GE_UINT(lhs, rhs, msg, ...) \
494 T_ASSERT_BLOCK2(_uint, "%u", >=, lhs, rhs, msg, ## __VA_ARGS__)
495
496 /* long */
497
498 #define T_EXPECT_EQ_LONG(lhs, rhs, msg, ...) \
499 T_EXPECT_BLOCK2(_long, "%li", ==, lhs, rhs, msg, ## __VA_ARGS__)
500 #define T_EXPECT_NE_LONG(lhs, rhs, msg, ...) \
501 T_EXPECT_BLOCK2(_long, "%li", !=, lhs, rhs, msg, ## __VA_ARGS__)
502 #define T_EXPECT_LT_LONG(lhs, rhs, msg, ...) \
503 T_EXPECT_BLOCK2(_long, "%li", <, lhs, rhs, msg, ## __VA_ARGS__)
504 #define T_EXPECT_GT_LONG(lhs, rhs, msg, ...) \
505 T_EXPECT_BLOCK2(_long, "%li", >, lhs, rhs, msg, ## __VA_ARGS__)
506 #define T_EXPECT_LE_LONG(lhs, rhs, msg, ...) \
507 T_EXPECT_BLOCK2(_long, "%li", <=, lhs, rhs, msg, ## __VA_ARGS__)
508 #define T_EXPECT_GE_LONG(lhs, rhs, msg, ...) \
509 T_EXPECT_BLOCK2(_long, "%li", >=, lhs, rhs, msg, ## __VA_ARGS__)
510
511 #define T_ASSERT_EQ_LONG(lhs, rhs, msg, ...) \
512 T_ASSERT_BLOCK2(_long, "%li", ==, lhs, rhs, msg, ## __VA_ARGS__)
513 #define T_ASSERT_NE_LONG(lhs, rhs, msg, ...) \
514 T_ASSERT_BLOCK2(_long, "%li", !=, lhs, rhs, msg, ## __VA_ARGS__)
515 #define T_ASSERT_LT_LONG(lhs, rhs, msg, ...) \
516 T_ASSERT_BLOCK2(_long, "%li", <, lhs, rhs, msg, ## __VA_ARGS__)
517 #define T_ASSERT_GT_LONG(lhs, rhs, msg, ...) \
518 T_ASSERT_BLOCK2(_long, "%li", >, lhs, rhs, msg, ## __VA_ARGS__)
519 #define T_ASSERT_LE_LONG(lhs, rhs, msg, ...) \
520 T_ASSERT_BLOCK2(_long, "%li", <=, lhs, rhs, msg, ## __VA_ARGS__)
521 #define T_ASSERT_GE_LONG(lhs, rhs, msg, ...) \
522 T_ASSERT_BLOCK2(_long, "%li", >=, lhs, rhs, msg, ## __VA_ARGS__)
523
524 /* unsigned long */
525
526 #define T_EXPECT_EQ_ULONG(lhs, rhs, msg, ...) \
527 T_EXPECT_BLOCK2(_ulong, "%lu", ==, lhs, rhs, msg, ## __VA_ARGS__)
528 #define T_EXPECT_NE_ULONG(lhs, rhs, msg, ...) \
529 T_EXPECT_BLOCK2(_ulong, "%lu", !=, lhs, rhs, msg, ## __VA_ARGS__)
530 #define T_EXPECT_LT_ULONG(lhs, rhs, msg, ...) \
531 T_EXPECT_BLOCK2(_ulong, "%lu", <, lhs, rhs, msg, ## __VA_ARGS__)
532 #define T_EXPECT_GT_ULONG(lhs, rhs, msg, ...) \
533 T_EXPECT_BLOCK2(_ulong, "%lu", >, lhs, rhs, msg, ## __VA_ARGS__)
534 #define T_EXPECT_LE_ULONG(lhs, rhs, msg, ...) \
535 T_EXPECT_BLOCK2(_ulong, "%lu", <=, lhs, rhs, msg, ## __VA_ARGS__)
536 #define T_EXPECT_GE_ULONG(lhs, rhs, msg, ...) \
537 T_EXPECT_BLOCK2(_ulong, "%lu", >=, lhs, rhs, msg, ## __VA_ARGS__)
538
539 #define T_ASSERT_EQ_ULONG(lhs, rhs, msg, ...) \
540 T_ASSERT_BLOCK2(_ulong, "%lu", ==, lhs, rhs, msg, ## __VA_ARGS__)
541 #define T_ASSERT_NE_ULONG(lhs, rhs, msg, ...) \
542 T_ASSERT_BLOCK2(_ulong, "%lu", !=, lhs, rhs, msg, ## __VA_ARGS__)
543 #define T_ASSERT_LT_ULONG(lhs, rhs, msg, ...) \
544 T_ASSERT_BLOCK2(_ulong, "%lu", <, lhs, rhs, msg, ## __VA_ARGS__)
545 #define T_ASSERT_GT_ULONG(lhs, rhs, msg, ...) \
546 T_ASSERT_BLOCK2(_ulong, "%lu", >, lhs, rhs, msg, ## __VA_ARGS__)
547 #define T_ASSERT_LE_ULONG(lhs, rhs, msg, ...) \
548 T_ASSERT_BLOCK2(_ulong, "%lu", <=, lhs, rhs, msg, ## __VA_ARGS__)
549 #define T_ASSERT_GE_ULONG(lhs, rhs, msg, ...) \
550 T_ASSERT_BLOCK2(_ulong, "%lu", >=, lhs, rhs, msg, ## __VA_ARGS__)
551
552 /* long long */
553
554 #define T_EXPECT_EQ_LLONG(lhs, rhs, msg, ...) \
555 T_EXPECT_BLOCK2(_llong, "%lli", ==, lhs, rhs, msg, ## __VA_ARGS__)
556 #define T_EXPECT_NE_LLONG(lhs, rhs, msg, ...) \
557 T_EXPECT_BLOCK2(_llong, "%lli", !=, lhs, rhs, msg, ## __VA_ARGS__)
558 #define T_EXPECT_LT_LLONG(lhs, rhs, msg, ...) \
559 T_EXPECT_BLOCK2(_llong, "%lli", <, lhs, rhs, msg, ## __VA_ARGS__)
560 #define T_EXPECT_GT_LLONG(lhs, rhs, msg, ...) \
561 T_EXPECT_BLOCK2(_llong, "%lli", >, lhs, rhs, msg, ## __VA_ARGS__)
562 #define T_EXPECT_LE_LLONG(lhs, rhs, msg, ...) \
563 T_EXPECT_BLOCK2(_llong, "%lli", <=, lhs, rhs, msg, ## __VA_ARGS__)
564 #define T_EXPECT_GE_LLONG(lhs, rhs, msg, ...) \
565 T_EXPECT_BLOCK2(_llong, "%lli", >=, lhs, rhs, msg, ## __VA_ARGS__)
566
567 #define T_ASSERT_EQ_LLONG(lhs, rhs, msg, ...) \
568 T_ASSERT_BLOCK2(_llong, "%lli", ==, lhs, rhs, msg, ## __VA_ARGS__)
569 #define T_ASSERT_NE_LLONG(lhs, rhs, msg, ...) \
570 T_ASSERT_BLOCK2(_llong, "%lli", !=, lhs, rhs, msg, ## __VA_ARGS__)
571 #define T_ASSERT_LT_LLONG(lhs, rhs, msg, ...) \
572 T_ASSERT_BLOCK2(_llong, "%lli", <, lhs, rhs, msg, ## __VA_ARGS__)
573 #define T_ASSERT_GT_LLONG(lhs, rhs, msg, ...) \
574 T_ASSERT_BLOCK2(_llong, "%lli", >, lhs, rhs, msg, ## __VA_ARGS__)
575 #define T_ASSERT_LE_LLONG(lhs, rhs, msg, ...) \
576 T_ASSERT_BLOCK2(_llong, "%lli", <=, lhs, rhs, msg, ## __VA_ARGS__)
577 #define T_ASSERT_GE_LLONG(lhs, rhs, msg, ...) \
578 T_ASSERT_BLOCK2(_llong, "%lli", >=, lhs, rhs, msg, ## __VA_ARGS__)
579
580 /* unsigned long long */
581
582 #define T_EXPECT_EQ_ULLONG(lhs, rhs, msg, ...) \
583 T_EXPECT_BLOCK2(_ullong, "%llu", ==, lhs, rhs, msg, ## __VA_ARGS__)
584 #define T_EXPECT_NE_ULLONG(lhs, rhs, msg, ...) \
585 T_EXPECT_BLOCK2(_ullong, "%llu", !=, lhs, rhs, msg, ## __VA_ARGS__)
586 #define T_EXPECT_LT_ULLONG(lhs, rhs, msg, ...) \
587 T_EXPECT_BLOCK2(_ullong, "%llu", <, lhs, rhs, msg, ## __VA_ARGS__)
588 #define T_EXPECT_GT_ULLONG(lhs, rhs, msg, ...) \
589 T_EXPECT_BLOCK2(_ullong, "%llu", >, lhs, rhs, msg, ## __VA_ARGS__)
590 #define T_EXPECT_LE_ULLONG(lhs, rhs, msg, ...) \
591 T_EXPECT_BLOCK2(_ullong, "%llu", <=, lhs, rhs, msg, ## __VA_ARGS__)
592 #define T_EXPECT_GE_ULLONG(lhs, rhs, msg, ...) \
593 T_EXPECT_BLOCK2(_ullong, "%llu", >=, lhs, rhs, msg, ## __VA_ARGS__)
594
595 #define T_ASSERT_EQ_ULLONG(lhs, rhs, msg, ...) \
596 T_ASSERT_BLOCK2(_ullong, "%llu", ==, lhs, rhs, msg, ## __VA_ARGS__)
597 #define T_ASSERT_NE_ULLONG(lhs, rhs, msg, ...) \
598 T_ASSERT_BLOCK2(_ullong, "%llu", !=, lhs, rhs, msg, ## __VA_ARGS__)
599 #define T_ASSERT_LT_ULLONG(lhs, rhs, msg, ...) \
600 T_ASSERT_BLOCK2(_ullong, "%llu", <, lhs, rhs, msg, ## __VA_ARGS__)
601 #define T_ASSERT_GT_ULLONG(lhs, rhs, msg, ...) \
602 T_ASSERT_BLOCK2(_ullong, "%llu", >, lhs, rhs, msg, ## __VA_ARGS__)
603 #define T_ASSERT_LE_ULLONG(lhs, rhs, msg, ...) \
604 T_ASSERT_BLOCK2(_ullong, "%llu", <=, lhs, rhs, msg, ## __VA_ARGS__)
605 #define T_ASSERT_GE_ULLONG(lhs, rhs, msg, ...) \
606 T_ASSERT_BLOCK2(_ullong, "%llu", >=, lhs, rhs, msg, ## __VA_ARGS__)
607
608 /* pointer */
609
610 #define T_EXPECT_EQ_PTR(lhs, rhs, msg, ...) \
611 T_EXPECT_BLOCK2(_ptr, "%p", ==, lhs, rhs, msg, ## __VA_ARGS__)
612 #define T_EXPECT_NE_PTR(lhs, rhs, msg, ...) \
613 T_EXPECT_BLOCK2(_ptr, "%p", !=, lhs, rhs, msg, ## __VA_ARGS__)
614 #define T_EXPECT_LT_PTR(lhs, rhs, msg, ...) \
615 T_EXPECT_BLOCK2(_ptr, "%p", <, lhs, rhs, msg, ## __VA_ARGS__)
616 #define T_EXPECT_GT_PTR(lhs, rhs, msg, ...) \
617 T_EXPECT_BLOCK2(_ptr, "%p", >, lhs, rhs, msg, ## __VA_ARGS__)
618 #define T_EXPECT_LE_PTR(lhs, rhs, msg, ...) \
619 T_EXPECT_BLOCK2(_ptr, "%p", <=, lhs, rhs, msg, ## __VA_ARGS__)
620 #define T_EXPECT_GE_PTR(lhs, rhs, msg, ...) \
621 T_EXPECT_BLOCK2(_ptr, "%p", >=, lhs, rhs, msg, ## __VA_ARGS__)
622
623 #define T_ASSERT_EQ_PTR(lhs, rhs, msg, ...) \
624 T_ASSERT_BLOCK2(_ptr, "%p", ==, lhs, rhs, msg, ## __VA_ARGS__)
625 #define T_ASSERT_NE_PTR(lhs, rhs, msg, ...) \
626 T_ASSERT_BLOCK2(_ptr, "%p", !=, lhs, rhs, msg, ## __VA_ARGS__)
627 #define T_ASSERT_LT_PTR(lhs, rhs, msg, ...) \
628 T_ASSERT_BLOCK2(_ptr, "%p", <, lhs, rhs, msg, ## __VA_ARGS__)
629 #define T_ASSERT_GT_PTR(lhs, rhs, msg, ...) \
630 T_ASSERT_BLOCK2(_ptr, "%p", >, lhs, rhs, msg, ## __VA_ARGS__)
631 #define T_ASSERT_LE_PTR(lhs, rhs, msg, ...) \
632 T_ASSERT_BLOCK2(_ptr, "%p", <=, lhs, rhs, msg, ## __VA_ARGS__)
633 #define T_ASSERT_GE_PTR(lhs, rhs, msg, ...) \
634 T_ASSERT_BLOCK2(_ptr, "%p", >=, lhs, rhs, msg, ## __VA_ARGS__)
635
636 /*
637 * Log a perfdata measurement. For example:
638 * T_PERF("name_of_metric", 3234, "nsec", "time since first test run")
639 */
640 #define T_PERF(metric, value, unit, desc) \
641 do { \
642 T_SAVEINFO; \
643 T_SYM(perf)(metric, unit, value, desc); \
644 } while (0)
645
646 #endif /* _TESTS_KTEST_H */