cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

test.h (48363B)


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