LCOV - code coverage report
Current view: top level - include/kunit - test.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 4 75.0 %
Date: 2023-08-24 13:40:31 Functions: 0 0 -

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

Generated by: LCOV version 1.14