Merge tag 'ext4_for_linus_urgent' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-block.git] / include / kunit / test.h
CommitLineData
914cc63e
BH
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Base unit test (KUnit) API.
4 *
5 * Copyright (C) 2019, Google LLC.
6 * Author: Brendan Higgins <brendanhiggins@google.com>
7 */
8
9#ifndef _KUNIT_TEST_H
10#define _KUNIT_TEST_H
11
73cda7bb 12#include <kunit/assert.h>
5f3e0620 13#include <kunit/try-catch.h>
ec54c289 14
4fdacef8 15#include <linux/compiler.h>
ec54c289
AS
16#include <linux/container_of.h>
17#include <linux/err.h>
18#include <linux/init.h>
908d0c17 19#include <linux/jump_label.h>
ec54c289
AS
20#include <linux/kconfig.h>
21#include <linux/kref.h>
22#include <linux/list.h>
c475c77d 23#include <linux/module.h>
0a756853 24#include <linux/slab.h>
ec54c289
AS
25#include <linux/spinlock.h>
26#include <linux/string.h>
914cc63e 27#include <linux/types.h>
ec54c289
AS
28
29#include <asm/rwonce.h>
914cc63e 30
908d0c17
DG
31/* Static key: true if any KUnit tests are currently running */
32DECLARE_STATIC_KEY_FALSE(kunit_running);
33
914cc63e
BH
34struct kunit;
35
e2219db2
AM
36/* Size of log associated with test. */
37#define KUNIT_LOG_SIZE 512
38
fadb08e7
AR
39/* Maximum size of parameter description string. */
40#define KUNIT_PARAM_DESC_SIZE 128
41
6d2426b2
DG
42/* Maximum size of a status comment. */
43#define KUNIT_STATUS_COMMENT_SIZE 256
44
c3bba690
AM
45/*
46 * TAP specifies subtest stream indentation of 4 spaces, 8 spaces for a
47 * sub-subtest. See the "Subtests" section in
48 * https://node-tap.org/tap-protocol/
49 */
50#define KUNIT_SUBTEST_INDENT " "
51#define KUNIT_SUBSUBTEST_INDENT " "
52
6d2426b2
DG
53/**
54 * enum kunit_status - Type of result for a test or test suite
55 * @KUNIT_SUCCESS: Denotes the test suite has not failed nor been skipped
56 * @KUNIT_FAILURE: Denotes the test has failed.
57 * @KUNIT_SKIPPED: Denotes the test has been skipped.
58 */
59enum kunit_status {
60 KUNIT_SUCCESS,
61 KUNIT_FAILURE,
62 KUNIT_SKIPPED,
63};
64
914cc63e
BH
65/**
66 * struct kunit_case - represents an individual test case.
67 *
68 * @run_case: the function representing the actual test case.
69 * @name: the name of the test case.
fadb08e7 70 * @generate_params: the generator function for parameterized tests.
914cc63e
BH
71 *
72 * A test case is a function with the signature,
e4aea8f8
BH
73 * ``void (*)(struct kunit *)``
74 * that makes expectations and assertions (see KUNIT_EXPECT_TRUE() and
75 * KUNIT_ASSERT_TRUE()) about code under test. Each test case is associated
914cc63e
BH
76 * with a &struct kunit_suite and will be run after the suite's init
77 * function and followed by the suite's exit function.
78 *
79 * A test case should be static and should only be created with the
80 * KUNIT_CASE() macro; additionally, every array of test cases should be
81 * terminated with an empty test case.
82 *
83 * Example:
84 *
85 * .. code-block:: c
86 *
87 * void add_test_basic(struct kunit *test)
88 * {
89 * KUNIT_EXPECT_EQ(test, 1, add(1, 0));
90 * KUNIT_EXPECT_EQ(test, 2, add(1, 1));
91 * KUNIT_EXPECT_EQ(test, 0, add(-1, 1));
92 * KUNIT_EXPECT_EQ(test, INT_MAX, add(0, INT_MAX));
93 * KUNIT_EXPECT_EQ(test, -1, add(INT_MAX, INT_MIN));
94 * }
95 *
96 * static struct kunit_case example_test_cases[] = {
97 * KUNIT_CASE(add_test_basic),
98 * {}
99 * };
100 *
101 */
102struct kunit_case {
103 void (*run_case)(struct kunit *test);
104 const char *name;
fadb08e7 105 const void* (*generate_params)(const void *prev, char *desc);
914cc63e
BH
106
107 /* private: internal use only. */
6d2426b2 108 enum kunit_status status;
e2219db2 109 char *log;
914cc63e
BH
110};
111
6d2426b2 112static inline char *kunit_status_to_ok_not_ok(enum kunit_status status)
e2219db2 113{
6d2426b2
DG
114 switch (status) {
115 case KUNIT_SKIPPED:
116 case KUNIT_SUCCESS:
117 return "ok";
118 case KUNIT_FAILURE:
119 return "not ok";
120 }
121 return "invalid";
e2219db2
AM
122}
123
914cc63e
BH
124/**
125 * KUNIT_CASE - A helper for creating a &struct kunit_case
126 *
127 * @test_name: a reference to a test case function.
128 *
129 * Takes a symbol for a function representing a test case and creates a
130 * &struct kunit_case object from it. See the documentation for
131 * &struct kunit_case for an example on how to use it.
132 */
133#define KUNIT_CASE(test_name) { .run_case = test_name, .name = #test_name }
134
fadb08e7
AR
135/**
136 * KUNIT_CASE_PARAM - A helper for creation a parameterized &struct kunit_case
137 *
138 * @test_name: a reference to a test case function.
139 * @gen_params: a reference to a parameter generator function.
140 *
141 * The generator function::
142 *
143 * const void* gen_params(const void *prev, char *desc)
144 *
145 * is used to lazily generate a series of arbitrarily typed values that fit into
146 * a void*. The argument @prev is the previously returned value, which should be
147 * used to derive the next value; @prev is set to NULL on the initial generator
148 * call. When no more values are available, the generator must return NULL.
149 * Optionally write a string into @desc (size of KUNIT_PARAM_DESC_SIZE)
150 * describing the parameter.
151 */
152#define KUNIT_CASE_PARAM(test_name, gen_params) \
153 { .run_case = test_name, .name = #test_name, \
154 .generate_params = gen_params }
155
914cc63e
BH
156/**
157 * struct kunit_suite - describes a related collection of &struct kunit_case
158 *
159 * @name: the name of the test. Purely informational.
1cdba21d
DL
160 * @suite_init: called once per test suite before the test cases.
161 * @suite_exit: called once per test suite after all test cases.
914cc63e
BH
162 * @init: called before every test case.
163 * @exit: called after every test case.
164 * @test_cases: a null terminated array of test cases.
165 *
166 * A kunit_suite is a collection of related &struct kunit_case s, such that
167 * @init is called before every test case and @exit is called after every
168 * test case, similar to the notion of a *test fixture* or a *test class*
169 * in other unit testing frameworks like JUnit or Googletest.
170 *
171 * Every &struct kunit_case must be associated with a kunit_suite for KUnit
172 * to run it.
173 */
174struct kunit_suite {
175 const char name[256];
1cdba21d
DL
176 int (*suite_init)(struct kunit_suite *suite);
177 void (*suite_exit)(struct kunit_suite *suite);
914cc63e
BH
178 int (*init)(struct kunit *test);
179 void (*exit)(struct kunit *test);
180 struct kunit_case *test_cases;
e2219db2 181
c4714b00 182 /* private: internal use only */
6d2426b2 183 char status_comment[KUNIT_STATUS_COMMENT_SIZE];
e2219db2
AM
184 struct dentry *debugfs;
185 char *log;
1cdba21d 186 int suite_init_err;
914cc63e
BH
187};
188
189/**
190 * struct kunit - represents a running instance of a test.
191 *
192 * @priv: for user to store arbitrary data. Commonly used to pass data
193 * created in the init function (see &struct kunit_suite).
194 *
195 * Used to store information about the current context under which the test
196 * is running. Most of this data is private and should only be accessed
197 * indirectly via public functions; the one exception is @priv which can be
198 * used by the test writer to store arbitrary data.
199 */
200struct kunit {
201 void *priv;
202
203 /* private: internal use only. */
204 const char *name; /* Read only after initialization! */
e2219db2 205 char *log; /* Points at case log after initialization */
5f3e0620 206 struct kunit_try_catch try_catch;
fadb08e7
AR
207 /* param_value is the current parameter value for a test case. */
208 const void *param_value;
209 /* param_index stores the index of the parameter in parameterized tests. */
210 int param_index;
914cc63e
BH
211 /*
212 * success starts as true, and may only be set to false during a
213 * test case; thus, it is safe to update this across multiple
214 * threads using WRITE_ONCE; however, as a consequence, it may only
215 * be read after the test case finishes once all threads associated
216 * with the test case have terminated.
217 */
0a756853 218 spinlock_t lock; /* Guards all mutable test state. */
6d2426b2 219 enum kunit_status status; /* Read only after test_case finishes! */
0a756853
BH
220 /*
221 * Because resources is a list that may be updated multiple times (with
222 * new resources) from any thread associated with a test case, we must
223 * protect it with some type of lock.
224 */
225 struct list_head resources; /* Protected by lock. */
6d2426b2
DG
226
227 char status_comment[KUNIT_STATUS_COMMENT_SIZE];
914cc63e
BH
228};
229
83c4e7a0
PA
230static inline void kunit_set_failure(struct kunit *test)
231{
6d2426b2 232 WRITE_ONCE(test->status, KUNIT_FAILURE);
83c4e7a0
PA
233}
234
d20a6ba5
JF
235bool kunit_enabled(void);
236
e2219db2 237void kunit_init_test(struct kunit *test, const char *name, char *log);
914cc63e
BH
238
239int kunit_run_tests(struct kunit_suite *suite);
240
e2219db2
AM
241size_t kunit_suite_num_test_cases(struct kunit_suite *suite);
242
243unsigned int kunit_test_case_num(struct kunit_suite *suite,
244 struct kunit_case *test_case);
245
e5857d39 246int __kunit_test_suites_init(struct kunit_suite * const * const suites, int num_suites);
e2219db2 247
e5857d39 248void __kunit_test_suites_exit(struct kunit_suite **suites, int num_suites);
e2219db2 249
8c0d8849
BH
250#if IS_BUILTIN(CONFIG_KUNIT)
251int kunit_run_all_tests(void);
252#else
253static inline int kunit_run_all_tests(void)
254{
255 return 0;
256}
257#endif /* IS_BUILTIN(CONFIG_KUNIT) */
258
e5857d39 259#define __kunit_test_suites(unique_array, ...) \
e5857d39
DL
260 static struct kunit_suite *unique_array[] \
261 __aligned(sizeof(struct kunit_suite *)) \
262 __used __section(".kunit_test_suites") = { __VA_ARGS__ }
aac35468
AM
263
264/**
265 * kunit_test_suites() - used to register one or more &struct kunit_suite
266 * with KUnit.
267 *
7f32b10c 268 * @__suites: a statically allocated list of &struct kunit_suite.
aac35468 269 *
3d6e4462
JK
270 * Registers @suites with the test framework.
271 * This is done by placing the array of struct kunit_suite * in the
272 * .kunit_test_suites ELF section.
aac35468 273 *
3d6e4462
JK
274 * When builtin, KUnit tests are all run via the executor at boot, and when
275 * built as a module, they run on module load.
aac35468
AM
276 *
277 */
7f32b10c 278#define kunit_test_suites(__suites...) \
aac35468 279 __kunit_test_suites(__UNIQUE_ID(array), \
7f32b10c 280 ##__suites)
c475c77d
AM
281
282#define kunit_test_suite(suite) kunit_test_suites(&suite)
914cc63e 283
9bf2eed9
BH
284/**
285 * kunit_test_init_section_suites() - used to register one or more &struct
286 * kunit_suite containing init functions or
287 * init data.
288 *
289 * @__suites: a statically allocated list of &struct kunit_suite.
290 *
7b237945 291 * This functions identically as kunit_test_suites() except that it suppresses
9bf2eed9
BH
292 * modpost warnings for referencing functions marked __init or data marked
293 * __initdata; this is OK because currently KUnit only runs tests upon boot
294 * during the init phase or upon loading a module during the init phase.
295 *
296 * NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these
297 * tests must be excluded.
298 *
299 * The only thing this macro does that's different from kunit_test_suites is
300 * that it suffixes the array and suite declarations it makes with _probe;
301 * modpost suppresses warnings about referencing init data for symbols named in
302 * this manner.
303 */
304#define kunit_test_init_section_suites(__suites...) \
305 __kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \
9bf2eed9
BH
306 ##__suites)
307
308#define kunit_test_init_section_suite(suite) \
309 kunit_test_init_section_suites(&suite)
310
e2219db2
AM
311#define kunit_suite_for_each_test_case(suite, test_case) \
312 for (test_case = suite->test_cases; test_case->run_case; test_case++)
313
6d2426b2 314enum kunit_status kunit_suite_has_succeeded(struct kunit_suite *suite);
e2219db2 315
0a756853 316/**
7122debb 317 * kunit_kmalloc_array() - Like kmalloc_array() except the allocation is *test managed*.
0a756853 318 * @test: The test context object.
7122debb 319 * @n: number of elements.
0a756853
BH
320 * @size: The size in bytes of the desired memory.
321 * @gfp: flags passed to underlying kmalloc().
322 *
7122debb 323 * Just like `kmalloc_array(...)`, except the allocation is managed by the test case
0a756853
BH
324 * and is automatically cleaned up after the test case concludes. See &struct
325 * kunit_resource for more information.
326 */
361b57df 327void *kunit_kmalloc_array(struct kunit *test, size_t n, size_t size, gfp_t gfp);
7122debb
DL
328
329/**
330 * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
331 * @test: The test context object.
332 * @size: The size in bytes of the desired memory.
333 * @gfp: flags passed to underlying kmalloc().
334 *
335 * See kmalloc() and kunit_kmalloc_array() for more information.
336 */
337static inline void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
338{
339 return kunit_kmalloc_array(test, 1, size, gfp);
340}
0a756853
BH
341
342/**
343 * kunit_kfree() - Like kfree except for allocations managed by KUnit.
344 * @test: The test case to which the resource belongs.
345 * @ptr: The memory allocation to free.
346 */
347void kunit_kfree(struct kunit *test, const void *ptr);
348
349/**
350 * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
351 * @test: The test context object.
352 * @size: The size in bytes of the desired memory.
353 * @gfp: flags passed to underlying kmalloc().
354 *
7122debb 355 * See kzalloc() and kunit_kmalloc_array() for more information.
0a756853
BH
356 */
357static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
358{
359 return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
360}
361
7122debb
DL
362/**
363 * kunit_kcalloc() - Just like kunit_kmalloc_array(), but zeroes the allocation.
364 * @test: The test context object.
365 * @n: number of elements.
366 * @size: The size in bytes of the desired memory.
367 * @gfp: flags passed to underlying kmalloc().
368 *
369 * See kcalloc() and kunit_kmalloc_array() for more information.
370 */
361b57df 371static inline void *kunit_kcalloc(struct kunit *test, size_t n, size_t size, gfp_t gfp)
7122debb 372{
361b57df 373 return kunit_kmalloc_array(test, n, size, gfp | __GFP_ZERO);
7122debb
DL
374}
375
0a756853
BH
376void kunit_cleanup(struct kunit *test);
377
44acdbb2 378void __printf(2, 3) kunit_log_append(char *log, const char *fmt, ...);
e2219db2 379
6d2426b2
DG
380/**
381 * kunit_mark_skipped() - Marks @test_or_suite as skipped
382 *
383 * @test_or_suite: The test context object.
384 * @fmt: A printk() style format string.
385 *
386 * Marks the test as skipped. @fmt is given output as the test status
387 * comment, typically the reason the test was skipped.
388 *
389 * Test execution continues after kunit_mark_skipped() is called.
390 */
391#define kunit_mark_skipped(test_or_suite, fmt, ...) \
392 do { \
393 WRITE_ONCE((test_or_suite)->status, KUNIT_SKIPPED); \
394 scnprintf((test_or_suite)->status_comment, \
395 KUNIT_STATUS_COMMENT_SIZE, \
396 fmt, ##__VA_ARGS__); \
397 } while (0)
398
399/**
400 * kunit_skip() - Marks @test_or_suite as skipped
401 *
402 * @test_or_suite: The test context object.
403 * @fmt: A printk() style format string.
404 *
405 * Skips the test. @fmt is given output as the test status
406 * comment, typically the reason the test was skipped.
407 *
408 * Test execution is halted after kunit_skip() is called.
409 */
410#define kunit_skip(test_or_suite, fmt, ...) \
411 do { \
412 kunit_mark_skipped((test_or_suite), fmt, ##__VA_ARGS__);\
413 kunit_try_catch_throw(&((test_or_suite)->try_catch)); \
414 } while (0)
e2219db2
AM
415
416/*
417 * printk and log to per-test or per-suite log buffer. Logging only done
418 * if CONFIG_KUNIT_DEBUGFS is 'y'; if it is 'n', no log is allocated/used.
419 */
420#define kunit_log(lvl, test_or_suite, fmt, ...) \
421 do { \
422 printk(lvl fmt, ##__VA_ARGS__); \
423 kunit_log_append((test_or_suite)->log, fmt "\n", \
424 ##__VA_ARGS__); \
425 } while (0)
426
427#define kunit_printk(lvl, test, fmt, ...) \
c3bba690
AM
428 kunit_log(lvl, test, KUNIT_SUBTEST_INDENT "# %s: " fmt, \
429 (test)->name, ##__VA_ARGS__)
914cc63e
BH
430
431/**
432 * kunit_info() - Prints an INFO level message associated with @test.
433 *
434 * @test: The test context object.
435 * @fmt: A printk() style format string.
436 *
437 * Prints an info level message associated with the test suite being run.
438 * Takes a variable number of format parameters just like printk().
439 */
440#define kunit_info(test, fmt, ...) \
441 kunit_printk(KERN_INFO, test, fmt, ##__VA_ARGS__)
442
443/**
444 * kunit_warn() - Prints a WARN level message associated with @test.
445 *
446 * @test: The test context object.
447 * @fmt: A printk() style format string.
448 *
449 * Prints a warning level message.
450 */
451#define kunit_warn(test, fmt, ...) \
452 kunit_printk(KERN_WARNING, test, fmt, ##__VA_ARGS__)
453
454/**
455 * kunit_err() - Prints an ERROR level message associated with @test.
456 *
457 * @test: The test context object.
458 * @fmt: A printk() style format string.
459 *
460 * Prints an error level message.
461 */
462#define kunit_err(test, fmt, ...) \
463 kunit_printk(KERN_ERR, test, fmt, ##__VA_ARGS__)
464
73cda7bb
BH
465/**
466 * KUNIT_SUCCEED() - A no-op expectation. Only exists for code clarity.
467 * @test: The test context object.
468 *
469 * The opposite of KUNIT_FAIL(), it is an expectation that cannot fail. In other
470 * words, it does nothing and only exists for code clarity. See
471 * KUNIT_EXPECT_TRUE() for more information.
472 */
473#define KUNIT_SUCCEED(test) do {} while (0)
474
4fdacef8 475void kunit_do_failed_assertion(struct kunit *test,
21957f90
DL
476 const struct kunit_loc *loc,
477 enum kunit_assert_type type,
7466886b 478 const struct kunit_assert *assert,
a8495ad8 479 assert_format_t assert_format,
4fdacef8 480 const char *fmt, ...);
73cda7bb 481
97d453bc
DL
482#define _KUNIT_FAILED(test, assert_type, assert_class, assert_format, INITIALIZER, fmt, ...) do { \
483 static const struct kunit_loc __loc = KUNIT_CURRENT_LOC; \
c1144e01 484 const struct assert_class __assertion = INITIALIZER; \
97d453bc
DL
485 kunit_do_failed_assertion(test, \
486 &__loc, \
487 assert_type, \
488 &__assertion.assert, \
489 assert_format, \
490 fmt, \
491 ##__VA_ARGS__); \
73cda7bb
BH
492} while (0)
493
494
495#define KUNIT_FAIL_ASSERTION(test, assert_type, fmt, ...) \
97d453bc
DL
496 _KUNIT_FAILED(test, \
497 assert_type, \
498 kunit_fail_assert, \
499 kunit_fail_assert_format, \
500 {}, \
501 fmt, \
502 ##__VA_ARGS__)
73cda7bb
BH
503
504/**
505 * KUNIT_FAIL() - Always causes a test to fail when evaluated.
506 * @test: The test context object.
507 * @fmt: an informational message to be printed when the assertion is made.
508 * @...: string format arguments.
509 *
510 * The opposite of KUNIT_SUCCEED(), it is an expectation that always fails. In
511 * other words, it always results in a failed expectation, and consequently
512 * always causes the test case to fail when evaluated. See KUNIT_EXPECT_TRUE()
513 * for more information.
514 */
515#define KUNIT_FAIL(test, fmt, ...) \
516 KUNIT_FAIL_ASSERTION(test, \
517 KUNIT_EXPECTATION, \
518 fmt, \
519 ##__VA_ARGS__)
520
697365c0
DL
521/* Helper to safely pass around an initializer list to other macros. */
522#define KUNIT_INIT_ASSERT(initializers...) { initializers }
523
73cda7bb
BH
524#define KUNIT_UNARY_ASSERTION(test, \
525 assert_type, \
697365c0
DL
526 condition_, \
527 expected_true_, \
73cda7bb
BH
528 fmt, \
529 ...) \
97d453bc 530do { \
697365c0 531 if (likely(!!(condition_) == !!expected_true_)) \
97d453bc
DL
532 break; \
533 \
534 _KUNIT_FAILED(test, \
535 assert_type, \
536 kunit_unary_assert, \
537 kunit_unary_assert_format, \
697365c0
DL
538 KUNIT_INIT_ASSERT(.condition = #condition_, \
539 .expected_true = expected_true_), \
97d453bc
DL
540 fmt, \
541 ##__VA_ARGS__); \
542} while (0)
73cda7bb
BH
543
544#define KUNIT_TRUE_MSG_ASSERTION(test, assert_type, condition, fmt, ...) \
545 KUNIT_UNARY_ASSERTION(test, \
546 assert_type, \
547 condition, \
548 true, \
549 fmt, \
550 ##__VA_ARGS__)
551
73cda7bb
BH
552#define KUNIT_FALSE_MSG_ASSERTION(test, assert_type, condition, fmt, ...) \
553 KUNIT_UNARY_ASSERTION(test, \
554 assert_type, \
555 condition, \
556 false, \
557 fmt, \
558 ##__VA_ARGS__)
559
73cda7bb
BH
560/*
561 * A factory macro for defining the assertions and expectations for the basic
562 * comparisons defined for the built in types.
563 *
564 * Unfortunately, there is no common type that all types can be promoted to for
565 * which all the binary operators behave the same way as for the actual types
566 * (for example, there is no type that long long and unsigned long long can
567 * both be cast to where the comparison result is preserved for all values). So
568 * the best we can do is do the comparison in the original types and then coerce
569 * everything to long long for printing; this way, the comparison behaves
570 * correctly and the printed out value usually makes sense without
571 * interpretation, but can always be interpreted to figure out the actual
572 * value.
573 */
574#define KUNIT_BASE_BINARY_ASSERTION(test, \
575 assert_class, \
064ff292 576 format_func, \
73cda7bb
BH
577 assert_type, \
578 left, \
579 op, \
580 right, \
581 fmt, \
582 ...) \
583do { \
c2741453
DL
584 const typeof(left) __left = (left); \
585 const typeof(right) __right = (right); \
2b6861e2
DL
586 static const struct kunit_binary_assert_text __text = { \
587 .operation = #op, \
588 .left_text = #left, \
589 .right_text = #right, \
590 }; \
73cda7bb 591 \
97d453bc
DL
592 if (likely(__left op __right)) \
593 break; \
594 \
595 _KUNIT_FAILED(test, \
596 assert_type, \
597 assert_class, \
598 format_func, \
697365c0
DL
599 KUNIT_INIT_ASSERT(.text = &__text, \
600 .left_value = __left, \
601 .right_value = __right), \
97d453bc
DL
602 fmt, \
603 ##__VA_ARGS__); \
73cda7bb
BH
604} while (0)
605
40f39777
DL
606#define KUNIT_BINARY_INT_ASSERTION(test, \
607 assert_type, \
608 left, \
609 op, \
610 right, \
611 fmt, \
73cda7bb
BH
612 ...) \
613 KUNIT_BASE_BINARY_ASSERTION(test, \
73cda7bb 614 kunit_binary_assert, \
064ff292 615 kunit_binary_assert_format, \
73cda7bb 616 assert_type, \
40f39777 617 left, op, right, \
73cda7bb
BH
618 fmt, \
619 ##__VA_ARGS__)
620
6125a5c7
DL
621#define KUNIT_BINARY_PTR_ASSERTION(test, \
622 assert_type, \
623 left, \
624 op, \
625 right, \
626 fmt, \
627 ...) \
628 KUNIT_BASE_BINARY_ASSERTION(test, \
73cda7bb 629 kunit_binary_ptr_assert, \
064ff292 630 kunit_binary_ptr_assert_format, \
73cda7bb 631 assert_type, \
6125a5c7 632 left, op, right, \
73cda7bb
BH
633 fmt, \
634 ##__VA_ARGS__)
635
73cda7bb
BH
636#define KUNIT_BINARY_STR_ASSERTION(test, \
637 assert_type, \
638 left, \
639 op, \
640 right, \
641 fmt, \
642 ...) \
643do { \
3747b5c0 644 const char *__left = (left); \
2b6861e2
DL
645 const char *__right = (right); \
646 static const struct kunit_binary_assert_text __text = { \
647 .operation = #op, \
648 .left_text = #left, \
649 .right_text = #right, \
650 }; \
73cda7bb 651 \
97d453bc
DL
652 if (likely(strcmp(__left, __right) op 0)) \
653 break; \
654 \
655 \
656 _KUNIT_FAILED(test, \
657 assert_type, \
658 kunit_binary_str_assert, \
659 kunit_binary_str_assert_format, \
697365c0
DL
660 KUNIT_INIT_ASSERT(.text = &__text, \
661 .left_value = __left, \
662 .right_value = __right), \
97d453bc
DL
663 fmt, \
664 ##__VA_ARGS__); \
73cda7bb
BH
665} while (0)
666
b8a926be
MC
667#define KUNIT_MEM_ASSERTION(test, \
668 assert_type, \
669 left, \
670 op, \
671 right, \
34c68f43 672 size_, \
b8a926be
MC
673 fmt, \
674 ...) \
675do { \
676 const void *__left = (left); \
677 const void *__right = (right); \
34c68f43 678 const size_t __size = (size_); \
b8a926be
MC
679 static const struct kunit_binary_assert_text __text = { \
680 .operation = #op, \
681 .left_text = #left, \
682 .right_text = #right, \
683 }; \
684 \
dd2f0a0a
RM
685 if (likely(__left && __right)) \
686 if (likely(memcmp(__left, __right, __size) op 0)) \
687 break; \
b8a926be
MC
688 \
689 _KUNIT_FAILED(test, \
690 assert_type, \
691 kunit_mem_assert, \
692 kunit_mem_assert_format, \
34c68f43
DL
693 KUNIT_INIT_ASSERT(.text = &__text, \
694 .left_value = __left, \
695 .right_value = __right, \
696 .size = __size), \
b8a926be
MC
697 fmt, \
698 ##__VA_ARGS__); \
699} while (0)
700
73cda7bb
BH
701#define KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
702 assert_type, \
703 ptr, \
704 fmt, \
705 ...) \
706do { \
c2741453 707 const typeof(ptr) __ptr = (ptr); \
73cda7bb 708 \
97d453bc
DL
709 if (!IS_ERR_OR_NULL(__ptr)) \
710 break; \
711 \
712 _KUNIT_FAILED(test, \
713 assert_type, \
714 kunit_ptr_not_err_assert, \
715 kunit_ptr_not_err_assert_format, \
697365c0 716 KUNIT_INIT_ASSERT(.text = #ptr, .value = __ptr), \
97d453bc
DL
717 fmt, \
718 ##__VA_ARGS__); \
73cda7bb
BH
719} while (0)
720
73cda7bb
BH
721/**
722 * KUNIT_EXPECT_TRUE() - Causes a test failure when the expression is not true.
723 * @test: The test context object.
724 * @condition: an arbitrary boolean expression. The test fails when this does
725 * not evaluate to true.
726 *
727 * This and expectations of the form `KUNIT_EXPECT_*` will cause the test case
728 * to fail when the specified condition is not met; however, it will not prevent
729 * the test case from continuing to run; this is otherwise known as an
730 * *expectation failure*.
731 */
732#define KUNIT_EXPECT_TRUE(test, condition) \
6709d0fe 733 KUNIT_EXPECT_TRUE_MSG(test, condition, NULL)
73cda7bb
BH
734
735#define KUNIT_EXPECT_TRUE_MSG(test, condition, fmt, ...) \
736 KUNIT_TRUE_MSG_ASSERTION(test, \
737 KUNIT_EXPECTATION, \
738 condition, \
739 fmt, \
740 ##__VA_ARGS__)
741
742/**
743 * KUNIT_EXPECT_FALSE() - Makes a test failure when the expression is not false.
744 * @test: The test context object.
745 * @condition: an arbitrary boolean expression. The test fails when this does
746 * not evaluate to false.
747 *
748 * Sets an expectation that @condition evaluates to false. See
749 * KUNIT_EXPECT_TRUE() for more information.
750 */
751#define KUNIT_EXPECT_FALSE(test, condition) \
6709d0fe 752 KUNIT_EXPECT_FALSE_MSG(test, condition, NULL)
73cda7bb
BH
753
754#define KUNIT_EXPECT_FALSE_MSG(test, condition, fmt, ...) \
755 KUNIT_FALSE_MSG_ASSERTION(test, \
756 KUNIT_EXPECTATION, \
757 condition, \
758 fmt, \
759 ##__VA_ARGS__)
760
761/**
762 * KUNIT_EXPECT_EQ() - Sets an expectation that @left and @right are equal.
763 * @test: The test context object.
764 * @left: an arbitrary expression that evaluates to a primitive C type.
765 * @right: an arbitrary expression that evaluates to a primitive C type.
766 *
767 * Sets an expectation that the values that @left and @right evaluate to are
768 * equal. This is semantically equivalent to
769 * KUNIT_EXPECT_TRUE(@test, (@left) == (@right)). See KUNIT_EXPECT_TRUE() for
770 * more information.
771 */
772#define KUNIT_EXPECT_EQ(test, left, right) \
6709d0fe 773 KUNIT_EXPECT_EQ_MSG(test, left, right, NULL)
73cda7bb
BH
774
775#define KUNIT_EXPECT_EQ_MSG(test, left, right, fmt, ...) \
6125a5c7
DL
776 KUNIT_BINARY_INT_ASSERTION(test, \
777 KUNIT_EXPECTATION, \
778 left, ==, right, \
779 fmt, \
780 ##__VA_ARGS__)
73cda7bb
BH
781
782/**
783 * KUNIT_EXPECT_PTR_EQ() - Expects that pointers @left and @right are equal.
784 * @test: The test context object.
785 * @left: an arbitrary expression that evaluates to a pointer.
786 * @right: an arbitrary expression that evaluates to a pointer.
787 *
788 * Sets an expectation that the values that @left and @right evaluate to are
789 * equal. This is semantically equivalent to
790 * KUNIT_EXPECT_TRUE(@test, (@left) == (@right)). See KUNIT_EXPECT_TRUE() for
791 * more information.
792 */
793#define KUNIT_EXPECT_PTR_EQ(test, left, right) \
6709d0fe 794 KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, NULL)
73cda7bb
BH
795
796#define KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, fmt, ...) \
6125a5c7
DL
797 KUNIT_BINARY_PTR_ASSERTION(test, \
798 KUNIT_EXPECTATION, \
799 left, ==, right, \
800 fmt, \
801 ##__VA_ARGS__)
73cda7bb
BH
802
803/**
804 * KUNIT_EXPECT_NE() - An expectation that @left and @right are not equal.
805 * @test: The test context object.
806 * @left: an arbitrary expression that evaluates to a primitive C type.
807 * @right: an arbitrary expression that evaluates to a primitive C type.
808 *
809 * Sets an expectation that the values that @left and @right evaluate to are not
810 * equal. This is semantically equivalent to
811 * KUNIT_EXPECT_TRUE(@test, (@left) != (@right)). See KUNIT_EXPECT_TRUE() for
812 * more information.
813 */
814#define KUNIT_EXPECT_NE(test, left, right) \
6709d0fe 815 KUNIT_EXPECT_NE_MSG(test, left, right, NULL)
73cda7bb
BH
816
817#define KUNIT_EXPECT_NE_MSG(test, left, right, fmt, ...) \
6125a5c7
DL
818 KUNIT_BINARY_INT_ASSERTION(test, \
819 KUNIT_EXPECTATION, \
820 left, !=, right, \
821 fmt, \
822 ##__VA_ARGS__)
73cda7bb
BH
823
824/**
825 * KUNIT_EXPECT_PTR_NE() - Expects that pointers @left and @right are not equal.
826 * @test: The test context object.
827 * @left: an arbitrary expression that evaluates to a pointer.
828 * @right: an arbitrary expression that evaluates to a pointer.
829 *
830 * Sets an expectation that the values that @left and @right evaluate to are not
831 * equal. This is semantically equivalent to
832 * KUNIT_EXPECT_TRUE(@test, (@left) != (@right)). See KUNIT_EXPECT_TRUE() for
833 * more information.
834 */
835#define KUNIT_EXPECT_PTR_NE(test, left, right) \
6709d0fe 836 KUNIT_EXPECT_PTR_NE_MSG(test, left, right, NULL)
73cda7bb
BH
837
838#define KUNIT_EXPECT_PTR_NE_MSG(test, left, right, fmt, ...) \
6125a5c7
DL
839 KUNIT_BINARY_PTR_ASSERTION(test, \
840 KUNIT_EXPECTATION, \
841 left, !=, right, \
842 fmt, \
843 ##__VA_ARGS__)
73cda7bb
BH
844
845/**
846 * KUNIT_EXPECT_LT() - An expectation that @left is less than @right.
847 * @test: The test context object.
848 * @left: an arbitrary expression that evaluates to a primitive C type.
849 * @right: an arbitrary expression that evaluates to a primitive C type.
850 *
851 * Sets an expectation that the value that @left evaluates to is less than the
852 * value that @right evaluates to. This is semantically equivalent to
853 * KUNIT_EXPECT_TRUE(@test, (@left) < (@right)). See KUNIT_EXPECT_TRUE() for
854 * more information.
855 */
856#define KUNIT_EXPECT_LT(test, left, right) \
6709d0fe 857 KUNIT_EXPECT_LT_MSG(test, left, right, NULL)
73cda7bb
BH
858
859#define KUNIT_EXPECT_LT_MSG(test, left, right, fmt, ...) \
40f39777
DL
860 KUNIT_BINARY_INT_ASSERTION(test, \
861 KUNIT_EXPECTATION, \
862 left, <, right, \
863 fmt, \
864 ##__VA_ARGS__)
73cda7bb
BH
865
866/**
867 * KUNIT_EXPECT_LE() - Expects that @left is less than or equal to @right.
868 * @test: The test context object.
869 * @left: an arbitrary expression that evaluates to a primitive C type.
870 * @right: an arbitrary expression that evaluates to a primitive C type.
871 *
872 * Sets an expectation that the value that @left evaluates to is less than or
873 * equal to the value that @right evaluates to. Semantically this is equivalent
874 * to KUNIT_EXPECT_TRUE(@test, (@left) <= (@right)). See KUNIT_EXPECT_TRUE() for
875 * more information.
876 */
877#define KUNIT_EXPECT_LE(test, left, right) \
6709d0fe 878 KUNIT_EXPECT_LE_MSG(test, left, right, NULL)
73cda7bb
BH
879
880#define KUNIT_EXPECT_LE_MSG(test, left, right, fmt, ...) \
40f39777 881 KUNIT_BINARY_INT_ASSERTION(test, \
aded3cad 882 KUNIT_EXPECTATION, \
40f39777
DL
883 left, <=, right, \
884 fmt, \
885 ##__VA_ARGS__)
73cda7bb
BH
886
887/**
888 * KUNIT_EXPECT_GT() - An expectation that @left is greater than @right.
889 * @test: The test context object.
890 * @left: an arbitrary expression that evaluates to a primitive C type.
891 * @right: an arbitrary expression that evaluates to a primitive C type.
892 *
893 * Sets an expectation that the value that @left evaluates to is greater than
894 * the value that @right evaluates to. This is semantically equivalent to
895 * KUNIT_EXPECT_TRUE(@test, (@left) > (@right)). See KUNIT_EXPECT_TRUE() for
896 * more information.
897 */
898#define KUNIT_EXPECT_GT(test, left, right) \
6709d0fe 899 KUNIT_EXPECT_GT_MSG(test, left, right, NULL)
73cda7bb
BH
900
901#define KUNIT_EXPECT_GT_MSG(test, left, right, fmt, ...) \
40f39777
DL
902 KUNIT_BINARY_INT_ASSERTION(test, \
903 KUNIT_EXPECTATION, \
904 left, >, right, \
905 fmt, \
906 ##__VA_ARGS__)
73cda7bb
BH
907
908/**
909 * KUNIT_EXPECT_GE() - Expects that @left is greater than or equal to @right.
910 * @test: The test context object.
911 * @left: an arbitrary expression that evaluates to a primitive C type.
912 * @right: an arbitrary expression that evaluates to a primitive C type.
913 *
914 * Sets an expectation that the value that @left evaluates to is greater than
915 * the value that @right evaluates to. This is semantically equivalent to
916 * KUNIT_EXPECT_TRUE(@test, (@left) >= (@right)). See KUNIT_EXPECT_TRUE() for
917 * more information.
918 */
919#define KUNIT_EXPECT_GE(test, left, right) \
6709d0fe 920 KUNIT_EXPECT_GE_MSG(test, left, right, NULL)
73cda7bb
BH
921
922#define KUNIT_EXPECT_GE_MSG(test, left, right, fmt, ...) \
40f39777
DL
923 KUNIT_BINARY_INT_ASSERTION(test, \
924 KUNIT_EXPECTATION, \
925 left, >=, right, \
926 fmt, \
927 ##__VA_ARGS__)
73cda7bb
BH
928
929/**
930 * KUNIT_EXPECT_STREQ() - Expects that strings @left and @right are equal.
931 * @test: The test context object.
932 * @left: an arbitrary expression that evaluates to a null terminated string.
933 * @right: an arbitrary expression that evaluates to a null terminated string.
934 *
935 * Sets an expectation that the values that @left and @right evaluate to are
936 * equal. This is semantically equivalent to
937 * KUNIT_EXPECT_TRUE(@test, !strcmp((@left), (@right))). See KUNIT_EXPECT_TRUE()
938 * for more information.
939 */
940#define KUNIT_EXPECT_STREQ(test, left, right) \
6709d0fe 941 KUNIT_EXPECT_STREQ_MSG(test, left, right, NULL)
73cda7bb
BH
942
943#define KUNIT_EXPECT_STREQ_MSG(test, left, right, fmt, ...) \
955df7d8
DL
944 KUNIT_BINARY_STR_ASSERTION(test, \
945 KUNIT_EXPECTATION, \
946 left, ==, right, \
947 fmt, \
948 ##__VA_ARGS__)
73cda7bb
BH
949
950/**
951 * KUNIT_EXPECT_STRNEQ() - Expects that strings @left and @right are not equal.
952 * @test: The test context object.
953 * @left: an arbitrary expression that evaluates to a null terminated string.
954 * @right: an arbitrary expression that evaluates to a null terminated string.
955 *
956 * Sets an expectation that the values that @left and @right evaluate to are
957 * not equal. This is semantically equivalent to
958 * KUNIT_EXPECT_TRUE(@test, strcmp((@left), (@right))). See KUNIT_EXPECT_TRUE()
959 * for more information.
960 */
961#define KUNIT_EXPECT_STRNEQ(test, left, right) \
6709d0fe 962 KUNIT_EXPECT_STRNEQ_MSG(test, left, right, NULL)
73cda7bb
BH
963
964#define KUNIT_EXPECT_STRNEQ_MSG(test, left, right, fmt, ...) \
955df7d8
DL
965 KUNIT_BINARY_STR_ASSERTION(test, \
966 KUNIT_EXPECTATION, \
967 left, !=, right, \
968 fmt, \
969 ##__VA_ARGS__)
b8a926be
MC
970
971/**
972 * KUNIT_EXPECT_MEMEQ() - Expects that the first @size bytes of @left and @right are equal.
973 * @test: The test context object.
974 * @left: An arbitrary expression that evaluates to the specified size.
975 * @right: An arbitrary expression that evaluates to the specified size.
976 * @size: Number of bytes compared.
977 *
978 * Sets an expectation that the values that @left and @right evaluate to are
979 * equal. This is semantically equivalent to
980 * KUNIT_EXPECT_TRUE(@test, !memcmp((@left), (@right), (@size))). See
981 * KUNIT_EXPECT_TRUE() for more information.
982 *
983 * Although this expectation works for any memory block, it is not recommended
984 * for comparing more structured data, such as structs. This expectation is
985 * recommended for comparing, for example, data arrays.
986 */
987#define KUNIT_EXPECT_MEMEQ(test, left, right, size) \
988 KUNIT_EXPECT_MEMEQ_MSG(test, left, right, size, NULL)
989
990#define KUNIT_EXPECT_MEMEQ_MSG(test, left, right, size, fmt, ...) \
991 KUNIT_MEM_ASSERTION(test, \
992 KUNIT_EXPECTATION, \
993 left, ==, right, \
994 size, \
995 fmt, \
996 ##__VA_ARGS__)
997
998/**
999 * KUNIT_EXPECT_MEMNEQ() - Expects that the first @size bytes of @left and @right are not equal.
1000 * @test: The test context object.
1001 * @left: An arbitrary expression that evaluates to the specified size.
1002 * @right: An arbitrary expression that evaluates to the specified size.
1003 * @size: Number of bytes compared.
1004 *
1005 * Sets an expectation that the values that @left and @right evaluate to are
1006 * not equal. This is semantically equivalent to
1007 * KUNIT_EXPECT_TRUE(@test, memcmp((@left), (@right), (@size))). See
1008 * KUNIT_EXPECT_TRUE() for more information.
1009 *
1010 * Although this expectation works for any memory block, it is not recommended
1011 * for comparing more structured data, such as structs. This expectation is
1012 * recommended for comparing, for example, data arrays.
1013 */
1014#define KUNIT_EXPECT_MEMNEQ(test, left, right, size) \
1015 KUNIT_EXPECT_MEMNEQ_MSG(test, left, right, size, NULL)
1016
1017#define KUNIT_EXPECT_MEMNEQ_MSG(test, left, right, size, fmt, ...) \
1018 KUNIT_MEM_ASSERTION(test, \
1019 KUNIT_EXPECTATION, \
1020 left, !=, right, \
1021 size, \
1022 fmt, \
1023 ##__VA_ARGS__)
73cda7bb 1024
caae9458
RR
1025/**
1026 * KUNIT_EXPECT_NULL() - Expects that @ptr is null.
1027 * @test: The test context object.
1028 * @ptr: an arbitrary pointer.
1029 *
1030 * Sets an expectation that the value that @ptr evaluates to is null. This is
1031 * semantically equivalent to KUNIT_EXPECT_PTR_EQ(@test, ptr, NULL).
1032 * See KUNIT_EXPECT_TRUE() for more information.
1033 */
1034#define KUNIT_EXPECT_NULL(test, ptr) \
1035 KUNIT_EXPECT_NULL_MSG(test, \
1036 ptr, \
1037 NULL)
1038
1039#define KUNIT_EXPECT_NULL_MSG(test, ptr, fmt, ...) \
1040 KUNIT_BINARY_PTR_ASSERTION(test, \
1041 KUNIT_EXPECTATION, \
1042 ptr, ==, NULL, \
1043 fmt, \
1044 ##__VA_ARGS__)
1045
1046/**
1047 * KUNIT_EXPECT_NOT_NULL() - Expects that @ptr is not null.
1048 * @test: The test context object.
1049 * @ptr: an arbitrary pointer.
1050 *
1051 * Sets an expectation that the value that @ptr evaluates to is not null. This
1052 * is semantically equivalent to KUNIT_EXPECT_PTR_NE(@test, ptr, NULL).
1053 * See KUNIT_EXPECT_TRUE() for more information.
1054 */
1055#define KUNIT_EXPECT_NOT_NULL(test, ptr) \
1056 KUNIT_EXPECT_NOT_NULL_MSG(test, \
1057 ptr, \
1058 NULL)
1059
1060#define KUNIT_EXPECT_NOT_NULL_MSG(test, ptr, fmt, ...) \
1061 KUNIT_BINARY_PTR_ASSERTION(test, \
1062 KUNIT_EXPECTATION, \
1063 ptr, !=, NULL, \
1064 fmt, \
1065 ##__VA_ARGS__)
1066
73cda7bb
BH
1067/**
1068 * KUNIT_EXPECT_NOT_ERR_OR_NULL() - Expects that @ptr is not null and not err.
1069 * @test: The test context object.
1070 * @ptr: an arbitrary pointer.
1071 *
1072 * Sets an expectation that the value that @ptr evaluates to is not null and not
1073 * an errno stored in a pointer. This is semantically equivalent to
1074 * KUNIT_EXPECT_TRUE(@test, !IS_ERR_OR_NULL(@ptr)). See KUNIT_EXPECT_TRUE() for
1075 * more information.
1076 */
1077#define KUNIT_EXPECT_NOT_ERR_OR_NULL(test, ptr) \
6709d0fe 1078 KUNIT_EXPECT_NOT_ERR_OR_NULL_MSG(test, ptr, NULL)
73cda7bb
BH
1079
1080#define KUNIT_EXPECT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...) \
1081 KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
1082 KUNIT_EXPECTATION, \
1083 ptr, \
1084 fmt, \
1085 ##__VA_ARGS__)
1086
e4aea8f8
BH
1087#define KUNIT_ASSERT_FAILURE(test, fmt, ...) \
1088 KUNIT_FAIL_ASSERTION(test, KUNIT_ASSERTION, fmt, ##__VA_ARGS__)
1089
1090/**
1091 * KUNIT_ASSERT_TRUE() - Sets an assertion that @condition is true.
1092 * @test: The test context object.
1093 * @condition: an arbitrary boolean expression. The test fails and aborts when
1094 * this does not evaluate to true.
1095 *
1096 * This and assertions of the form `KUNIT_ASSERT_*` will cause the test case to
1097 * fail *and immediately abort* when the specified condition is not met. Unlike
1098 * an expectation failure, it will prevent the test case from continuing to run;
1099 * this is otherwise known as an *assertion failure*.
1100 */
1101#define KUNIT_ASSERT_TRUE(test, condition) \
6709d0fe 1102 KUNIT_ASSERT_TRUE_MSG(test, condition, NULL)
e4aea8f8
BH
1103
1104#define KUNIT_ASSERT_TRUE_MSG(test, condition, fmt, ...) \
1105 KUNIT_TRUE_MSG_ASSERTION(test, \
1106 KUNIT_ASSERTION, \
1107 condition, \
1108 fmt, \
1109 ##__VA_ARGS__)
1110
1111/**
1112 * KUNIT_ASSERT_FALSE() - Sets an assertion that @condition is false.
1113 * @test: The test context object.
1114 * @condition: an arbitrary boolean expression.
1115 *
1116 * Sets an assertion that the value that @condition evaluates to is false. This
1117 * is the same as KUNIT_EXPECT_FALSE(), except it causes an assertion failure
1118 * (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1119 */
1120#define KUNIT_ASSERT_FALSE(test, condition) \
6709d0fe 1121 KUNIT_ASSERT_FALSE_MSG(test, condition, NULL)
e4aea8f8
BH
1122
1123#define KUNIT_ASSERT_FALSE_MSG(test, condition, fmt, ...) \
1124 KUNIT_FALSE_MSG_ASSERTION(test, \
1125 KUNIT_ASSERTION, \
1126 condition, \
1127 fmt, \
1128 ##__VA_ARGS__)
1129
1130/**
1131 * KUNIT_ASSERT_EQ() - Sets an assertion that @left and @right are equal.
1132 * @test: The test context object.
1133 * @left: an arbitrary expression that evaluates to a primitive C type.
1134 * @right: an arbitrary expression that evaluates to a primitive C type.
1135 *
1136 * Sets an assertion that the values that @left and @right evaluate to are
1137 * equal. This is the same as KUNIT_EXPECT_EQ(), except it causes an assertion
1138 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1139 */
1140#define KUNIT_ASSERT_EQ(test, left, right) \
6709d0fe 1141 KUNIT_ASSERT_EQ_MSG(test, left, right, NULL)
e4aea8f8
BH
1142
1143#define KUNIT_ASSERT_EQ_MSG(test, left, right, fmt, ...) \
6125a5c7
DL
1144 KUNIT_BINARY_INT_ASSERTION(test, \
1145 KUNIT_ASSERTION, \
1146 left, ==, right, \
1147 fmt, \
1148 ##__VA_ARGS__)
e4aea8f8
BH
1149
1150/**
1151 * KUNIT_ASSERT_PTR_EQ() - Asserts that pointers @left and @right are equal.
1152 * @test: The test context object.
1153 * @left: an arbitrary expression that evaluates to a pointer.
1154 * @right: an arbitrary expression that evaluates to a pointer.
1155 *
1156 * Sets an assertion that the values that @left and @right evaluate to are
1157 * equal. This is the same as KUNIT_EXPECT_EQ(), except it causes an assertion
1158 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1159 */
1160#define KUNIT_ASSERT_PTR_EQ(test, left, right) \
6709d0fe 1161 KUNIT_ASSERT_PTR_EQ_MSG(test, left, right, NULL)
e4aea8f8
BH
1162
1163#define KUNIT_ASSERT_PTR_EQ_MSG(test, left, right, fmt, ...) \
6125a5c7
DL
1164 KUNIT_BINARY_PTR_ASSERTION(test, \
1165 KUNIT_ASSERTION, \
1166 left, ==, right, \
1167 fmt, \
1168 ##__VA_ARGS__)
e4aea8f8
BH
1169
1170/**
1171 * KUNIT_ASSERT_NE() - An assertion that @left and @right are not equal.
1172 * @test: The test context object.
1173 * @left: an arbitrary expression that evaluates to a primitive C type.
1174 * @right: an arbitrary expression that evaluates to a primitive C type.
1175 *
1176 * Sets an assertion that the values that @left and @right evaluate to are not
1177 * equal. This is the same as KUNIT_EXPECT_NE(), except it causes an assertion
1178 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1179 */
1180#define KUNIT_ASSERT_NE(test, left, right) \
6709d0fe 1181 KUNIT_ASSERT_NE_MSG(test, left, right, NULL)
e4aea8f8
BH
1182
1183#define KUNIT_ASSERT_NE_MSG(test, left, right, fmt, ...) \
6125a5c7
DL
1184 KUNIT_BINARY_INT_ASSERTION(test, \
1185 KUNIT_ASSERTION, \
1186 left, !=, right, \
1187 fmt, \
1188 ##__VA_ARGS__)
e4aea8f8
BH
1189
1190/**
1191 * KUNIT_ASSERT_PTR_NE() - Asserts that pointers @left and @right are not equal.
1192 * KUNIT_ASSERT_PTR_EQ() - Asserts that pointers @left and @right are equal.
1193 * @test: The test context object.
1194 * @left: an arbitrary expression that evaluates to a pointer.
1195 * @right: an arbitrary expression that evaluates to a pointer.
1196 *
1197 * Sets an assertion that the values that @left and @right evaluate to are not
1198 * equal. This is the same as KUNIT_EXPECT_NE(), except it causes an assertion
1199 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1200 */
1201#define KUNIT_ASSERT_PTR_NE(test, left, right) \
6709d0fe 1202 KUNIT_ASSERT_PTR_NE_MSG(test, left, right, NULL)
e4aea8f8
BH
1203
1204#define KUNIT_ASSERT_PTR_NE_MSG(test, left, right, fmt, ...) \
6125a5c7
DL
1205 KUNIT_BINARY_PTR_ASSERTION(test, \
1206 KUNIT_ASSERTION, \
1207 left, !=, right, \
1208 fmt, \
1209 ##__VA_ARGS__)
e4aea8f8
BH
1210/**
1211 * KUNIT_ASSERT_LT() - An assertion that @left is less than @right.
1212 * @test: The test context object.
1213 * @left: an arbitrary expression that evaluates to a primitive C type.
1214 * @right: an arbitrary expression that evaluates to a primitive C type.
1215 *
1216 * Sets an assertion that the value that @left evaluates to is less than the
1217 * value that @right evaluates to. This is the same as KUNIT_EXPECT_LT(), except
1218 * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
1219 * is not met.
1220 */
1221#define KUNIT_ASSERT_LT(test, left, right) \
6709d0fe 1222 KUNIT_ASSERT_LT_MSG(test, left, right, NULL)
e4aea8f8
BH
1223
1224#define KUNIT_ASSERT_LT_MSG(test, left, right, fmt, ...) \
40f39777 1225 KUNIT_BINARY_INT_ASSERTION(test, \
aded3cad 1226 KUNIT_ASSERTION, \
40f39777
DL
1227 left, <, right, \
1228 fmt, \
1229 ##__VA_ARGS__)
e4aea8f8
BH
1230/**
1231 * KUNIT_ASSERT_LE() - An assertion that @left is less than or equal to @right.
1232 * @test: The test context object.
1233 * @left: an arbitrary expression that evaluates to a primitive C type.
1234 * @right: an arbitrary expression that evaluates to a primitive C type.
1235 *
1236 * Sets an assertion that the value that @left evaluates to is less than or
1237 * equal to the value that @right evaluates to. This is the same as
1238 * KUNIT_EXPECT_LE(), except it causes an assertion failure (see
1239 * KUNIT_ASSERT_TRUE()) when the assertion is not met.
1240 */
1241#define KUNIT_ASSERT_LE(test, left, right) \
6709d0fe 1242 KUNIT_ASSERT_LE_MSG(test, left, right, NULL)
e4aea8f8
BH
1243
1244#define KUNIT_ASSERT_LE_MSG(test, left, right, fmt, ...) \
40f39777
DL
1245 KUNIT_BINARY_INT_ASSERTION(test, \
1246 KUNIT_ASSERTION, \
1247 left, <=, right, \
1248 fmt, \
1249 ##__VA_ARGS__)
e4aea8f8
BH
1250
1251/**
1252 * KUNIT_ASSERT_GT() - An assertion that @left is greater than @right.
1253 * @test: The test context object.
1254 * @left: an arbitrary expression that evaluates to a primitive C type.
1255 * @right: an arbitrary expression that evaluates to a primitive C type.
1256 *
1257 * Sets an assertion that the value that @left evaluates to is greater than the
1258 * value that @right evaluates to. This is the same as KUNIT_EXPECT_GT(), except
1259 * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
1260 * is not met.
1261 */
1262#define KUNIT_ASSERT_GT(test, left, right) \
6709d0fe 1263 KUNIT_ASSERT_GT_MSG(test, left, right, NULL)
e4aea8f8
BH
1264
1265#define KUNIT_ASSERT_GT_MSG(test, left, right, fmt, ...) \
40f39777 1266 KUNIT_BINARY_INT_ASSERTION(test, \
aded3cad 1267 KUNIT_ASSERTION, \
40f39777
DL
1268 left, >, right, \
1269 fmt, \
1270 ##__VA_ARGS__)
e4aea8f8
BH
1271
1272/**
1273 * KUNIT_ASSERT_GE() - Assertion that @left is greater than or equal to @right.
1274 * @test: The test context object.
1275 * @left: an arbitrary expression that evaluates to a primitive C type.
1276 * @right: an arbitrary expression that evaluates to a primitive C type.
1277 *
1278 * Sets an assertion that the value that @left evaluates to is greater than the
1279 * value that @right evaluates to. This is the same as KUNIT_EXPECT_GE(), except
1280 * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
1281 * is not met.
1282 */
1283#define KUNIT_ASSERT_GE(test, left, right) \
6709d0fe 1284 KUNIT_ASSERT_GE_MSG(test, left, right, NULL)
e4aea8f8
BH
1285
1286#define KUNIT_ASSERT_GE_MSG(test, left, right, fmt, ...) \
40f39777
DL
1287 KUNIT_BINARY_INT_ASSERTION(test, \
1288 KUNIT_ASSERTION, \
1289 left, >=, right, \
1290 fmt, \
1291 ##__VA_ARGS__)
e4aea8f8
BH
1292
1293/**
1294 * KUNIT_ASSERT_STREQ() - An assertion that strings @left and @right are equal.
1295 * @test: The test context object.
1296 * @left: an arbitrary expression that evaluates to a null terminated string.
1297 * @right: an arbitrary expression that evaluates to a null terminated string.
1298 *
1299 * Sets an assertion that the values that @left and @right evaluate to are
1300 * equal. This is the same as KUNIT_EXPECT_STREQ(), except it causes an
1301 * assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1302 */
1303#define KUNIT_ASSERT_STREQ(test, left, right) \
6709d0fe 1304 KUNIT_ASSERT_STREQ_MSG(test, left, right, NULL)
e4aea8f8
BH
1305
1306#define KUNIT_ASSERT_STREQ_MSG(test, left, right, fmt, ...) \
955df7d8
DL
1307 KUNIT_BINARY_STR_ASSERTION(test, \
1308 KUNIT_ASSERTION, \
1309 left, ==, right, \
1310 fmt, \
1311 ##__VA_ARGS__)
e4aea8f8
BH
1312
1313/**
1314 * KUNIT_ASSERT_STRNEQ() - Expects that strings @left and @right are not equal.
1315 * @test: The test context object.
1316 * @left: an arbitrary expression that evaluates to a null terminated string.
1317 * @right: an arbitrary expression that evaluates to a null terminated string.
1318 *
1319 * Sets an expectation that the values that @left and @right evaluate to are
1320 * not equal. This is semantically equivalent to
1321 * KUNIT_ASSERT_TRUE(@test, strcmp((@left), (@right))). See KUNIT_ASSERT_TRUE()
1322 * for more information.
1323 */
1324#define KUNIT_ASSERT_STRNEQ(test, left, right) \
6709d0fe 1325 KUNIT_ASSERT_STRNEQ_MSG(test, left, right, NULL)
e4aea8f8
BH
1326
1327#define KUNIT_ASSERT_STRNEQ_MSG(test, left, right, fmt, ...) \
955df7d8
DL
1328 KUNIT_BINARY_STR_ASSERTION(test, \
1329 KUNIT_ASSERTION, \
1330 left, !=, right, \
1331 fmt, \
1332 ##__VA_ARGS__)
e4aea8f8 1333
caae9458
RR
1334/**
1335 * KUNIT_ASSERT_NULL() - Asserts that pointers @ptr is null.
1336 * @test: The test context object.
1337 * @ptr: an arbitrary pointer.
1338 *
1339 * Sets an assertion that the values that @ptr evaluates to is null. This is
1340 * the same as KUNIT_EXPECT_NULL(), except it causes an assertion
1341 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1342 */
1343#define KUNIT_ASSERT_NULL(test, ptr) \
1344 KUNIT_ASSERT_NULL_MSG(test, \
1345 ptr, \
1346 NULL)
1347
1348#define KUNIT_ASSERT_NULL_MSG(test, ptr, fmt, ...) \
1349 KUNIT_BINARY_PTR_ASSERTION(test, \
1350 KUNIT_ASSERTION, \
1351 ptr, ==, NULL, \
1352 fmt, \
1353 ##__VA_ARGS__)
1354
1355/**
1356 * KUNIT_ASSERT_NOT_NULL() - Asserts that pointers @ptr is not null.
1357 * @test: The test context object.
1358 * @ptr: an arbitrary pointer.
1359 *
1360 * Sets an assertion that the values that @ptr evaluates to is not null. This
1361 * is the same as KUNIT_EXPECT_NOT_NULL(), except it causes an assertion
1362 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1363 */
1364#define KUNIT_ASSERT_NOT_NULL(test, ptr) \
1365 KUNIT_ASSERT_NOT_NULL_MSG(test, \
1366 ptr, \
1367 NULL)
1368
1369#define KUNIT_ASSERT_NOT_NULL_MSG(test, ptr, fmt, ...) \
1370 KUNIT_BINARY_PTR_ASSERTION(test, \
1371 KUNIT_ASSERTION, \
1372 ptr, !=, NULL, \
1373 fmt, \
1374 ##__VA_ARGS__)
1375
e4aea8f8
BH
1376/**
1377 * KUNIT_ASSERT_NOT_ERR_OR_NULL() - Assertion that @ptr is not null and not err.
1378 * @test: The test context object.
1379 * @ptr: an arbitrary pointer.
1380 *
1381 * Sets an assertion that the value that @ptr evaluates to is not null and not
1382 * an errno stored in a pointer. This is the same as
1383 * KUNIT_EXPECT_NOT_ERR_OR_NULL(), except it causes an assertion failure (see
1384 * KUNIT_ASSERT_TRUE()) when the assertion is not met.
1385 */
1386#define KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr) \
6709d0fe 1387 KUNIT_ASSERT_NOT_ERR_OR_NULL_MSG(test, ptr, NULL)
e4aea8f8
BH
1388
1389#define KUNIT_ASSERT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...) \
1390 KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
1391 KUNIT_ASSERTION, \
1392 ptr, \
1393 fmt, \
1394 ##__VA_ARGS__)
1395
fadb08e7
AR
1396/**
1397 * KUNIT_ARRAY_PARAM() - Define test parameter generator from an array.
1398 * @name: prefix for the test parameter generator function.
1399 * @array: array of test parameters.
1400 * @get_desc: function to convert param to description; NULL to use default
1401 *
1402 * Define function @name_gen_params which uses @array to generate parameters.
1403 */
1404#define KUNIT_ARRAY_PARAM(name, array, get_desc) \
1405 static const void *name##_gen_params(const void *prev, char *desc) \
1406 { \
1407 typeof((array)[0]) *__next = prev ? ((typeof(__next)) prev) + 1 : (array); \
1408 if (__next - (array) < ARRAY_SIZE((array))) { \
1409 void (*__get_desc)(typeof(__next), char *) = get_desc; \
1410 if (__get_desc) \
1411 __get_desc(__next, desc); \
1412 return __next; \
1413 } \
1414 return NULL; \
1415 }
1416
61695f8c
DL
1417// TODO(dlatypov@google.com): consider eventually migrating users to explicitly
1418// include resource.h themselves if they need it.
1419#include <kunit/resource.h>
1420
914cc63e 1421#endif /* _KUNIT_TEST_H */