/** * @file ut_asserrt.h * @brief テスト用アサーション * @copyright 2023 Nomura Kei */ #ifndef UT_ASSERT_H #define UT_ASSERT_H #include <ut.h> // #define add(...) UT_OVERLOAD(add_, __VA_ARGS__) #define UT_OVERLOAD(func, ...) UT_OVERLOAD_SUB(func, UT_ARGS_LENGTH(__VA_ARGS__))(__VA_ARGS__) #define UT_OVERLOAD_SUB(func, args_length) UT_STRCAT(func, args_length) #define UT_ARGS_LENGTH(...) UT_ARGS_LENGTH_SUB(__VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1) #define UT_ARGS_LENGTH_SUB(v1, v2, v3, v4, v5, v6, v7, v8, v9, LENGTH, ...) LENGTH #define UT_STRCAT(s1, s2) s1 ## s2 #define _ut_assert_equals_2(expected, actual) \ _Generic((expected), \ int : _Generic((actual), \ int : ut_assert_equals_l_l_2, \ long : ut_assert_equals_l_l_2, \ float : ut_assert_equals_d_d_2, \ double : ut_assert_equals_d_d_2 \ ), \ long : _Generic((actual), \ int : ut_assert_equals_l_l_2, \ long : ut_assert_equals_l_l_2, \ float : ut_assert_equals_d_d_2, \ double : ut_assert_equals_d_d_2 \ ), \ float : ut_assert_equals_d_d_2, \ double : ut_assert_equals_d_d_2, \ char* : ut_assert_equals_s_s_2 \ )(expected, actual) #define Ut_assert_null(condition) ut_assert_null(object, __FILE__, __func__, __LINE__) #define Ut_assert_not_null(condition) ut_assert_false(object, __FILE__, __func__, __LINE__) #define Ut_assert_false(condition) ut_assert_false(condition, __FILE__, __func__, __LINE__) #define Ut_assert_true(condition) ut_assert_true( condition, __FILE__, __func__, __LINE__) #define Ut_fail() ut_assert_true( __FILE__, __func__, __LINE__) void _ut_assert_equals_double(double expected, double actual); void _ut_assert_equals_long(long expected, long actual); void _ut_assert_equals_string(const char* expected, const char* actual); void _ut_assert_equals_memory(void* expected, void* actual, size_t size); void ut_assert_null(void* object, const char* file, const char* func, int line); void ut_assert_not_null(void* object, const char* file, const char* func, int line); void ut_assert_false(bool condition, const char* file, const char* func, int line); void ut_assert_true( bool condition, const char* file, const char* func, int line); void ut_fail( const char* file, const char* func, int line); #endif // UT_ASSERT_H