/* * SPDX-License-Identifier: BSD-2-Clause * * Author: Ivan Orlov */ #ifdef CONFIG_SBIUNIT #ifndef __SBI_UNIT_H__ #define __SBI_UNIT_H__ #include #include #include struct sbiunit_test_case { const char *name; bool failed; void (*test_func)(struct sbiunit_test_case *test); }; struct sbiunit_test_suite { const char *name; struct sbiunit_test_case *cases; }; #define SBIUNIT_TEST_CASE(func) \ { \ .name = #func, \ .failed = false, \ .test_func = (func) \ } #define SBIUNIT_END_CASE { } #define SBIUNIT_TEST_SUITE(suite_name, cases_arr) \ struct sbiunit_test_suite suite_name = { \ .name = #suite_name, \ .cases = cases_arr \ } #define _sbiunit_msg(test, msg) "[SBIUnit] [%s:%d]: %s: %s", __FILE__, \ __LINE__, test->name, msg #define SBIUNIT_INFO(test, msg) sbi_printf(_sbiunit_msg(test, msg)) #define SBIUNIT_PANIC(test, msg) sbi_panic(_sbiunit_msg(test, msg)) #define SBIUNIT_EXPECT(test, cond) do { \ if (!(cond)) { \ test->failed = true; \ SBIUNIT_INFO(test, "Condition \"" #cond "\" expected to be true!\n"); \ } \ } while (0) #define SBIUNIT_ASSERT(test, cond) do { \ if (!(cond)) \ SBIUNIT_PANIC(test, "Condition \"" #cond "\" must be true!\n"); \ } while (0) #define SBIUNIT_EXPECT_EQ(test, a, b) SBIUNIT_EXPECT(test, (a) == (b)) #define SBIUNIT_ASSERT_EQ(test, a, b) SBIUNIT_ASSERT(test, (a) == (b)) #define SBIUNIT_EXPECT_NE(test, a, b) SBIUNIT_EXPECT(test, (a) != (b)) #define SBIUNIT_ASSERT_NE(test, a, b) SBIUNIT_ASSERT(test, (a) != (b)) #define SBIUNIT_EXPECT_MEMEQ(test, a, b, len) SBIUNIT_EXPECT(test, !sbi_memcmp(a, b, len)) #define SBIUNIT_ASSERT_MEMEQ(test, a, b, len) SBIUNIT_ASSERT(test, !sbi_memcmp(a, b, len)) #define SBIUNIT_EXPECT_STREQ(test, a, b, len) SBIUNIT_EXPECT(test, !sbi_strncmp(a, b, len)) #define SBIUNIT_ASSERT_STREQ(test, a, b, len) SBIUNIT_ASSERT(test, !sbi_strncmp(a, b, len)) void run_all_tests(void); #endif #else #define run_all_tests() #endif