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

Generated by: LCOV version 1.14