-
- /**
- * @file kc_assert.h
- * @brief KC Assert モジュール
- * @copyright 2003 - 2023 Nomura Kei
- * @depends
- * kc.h
- */
- #ifndef KC_ASSERT_H
- #define KC_ASSERT_H
-
- #include <kc.h>
- #include <kc_overload.h>
-
- #ifdef __cplusplus
- extern "C"
- {
- namespace kc
- {
- using namespace std;
- #endif
-
- #ifdef NDEBUG
- // NDEBUG が定義されている場合は、assert と同様何もしない。
- #define assert_equals(...) KC_OVERLOAD(assert_equals_, __VA_ARGS__)
- #define assert_equals_2(expected, actual) ((void)expected, (void)actual)
- #define assert_equals_3(expected, actual, delta) ((void)expected, (void)actual, (void)delta)
- #define assert_null(condition) ((void)condition)
- #define assert_not_null(condition) ((void)condition)
- #define assert_false(condition) ((void)condition)
- #define assert_true(condition) ((void)condition)
- #define assert_fail() ((void)0)
-
- #else
- // DEBUG 有効
- #define assert_equals(...) KC_OVERLOAD(assert_equals_, __VA_ARGS__)
- #define assert_equals_2(expected, actual) \
- _Generic((expected), \
- int: assert_equals_long_, \
- long: assert_equals_long_, \
- char *: assert_equals_string_, \
- const char *: assert_equals_string_)(expected, actual, __FILE__, __func__, __LINE__)
-
- #define assert_equals_3(expected, actual, delta) \
- _Generic((expected), \
- float: assert_equals_double_, \
- double: assert_equals_double_, \
- default: assert_equals_binary_)(expected, actual, delta, __FILE__, __func__, __LINE__)
-
- #define assert_null(condition) assert_null_(condition, __FILE__, __func__, __LINE__)
- #define assert_not_null(condition) assert_not_null_(condition, __FILE__, __func__, __LINE__)
- #define assert_false(condition) assert_false_(condition, __FILE__, __func__, __LINE__)
- #define assert_true(condition) assert_true_(condition, __FILE__, __func__, __LINE__)
- #define assert_fail() assert_fail_(__FILE__, __func__, __LINE__)
- #endif // NDEBUG
-
- void assert_equals_long_(long expected, long actual, const char *file, const char *func, int line);
- void assert_equals_double_(double expected, double actual, double delta, const char *file, const char *func, int line);
- void assert_equals_string_(const char *expected, const char *actual, const char *file, const char *func, int line);
- void assert_equals_binary_(const void *expected, const void *actual, size_t size, const char *file, const char *func, int line);
- void assert_null_(const void *condition, const char *file, const char *func, int line);
- void assert_not_null_(const void *condition, const char *file, const char *func, int line);
- void assert_false_(bool condition, const char *file, const char *func, int line);
- void assert_true_(bool condition, const char *file, const char *func, int line);
- void assert_fail_(const char *file, const char *func, int line);
- extern void (*assert_handler)(const char *msg);
-
- #ifdef __cplusplus
- } // namespace kc
- } // extern "C"
- #endif
- #endif // KC_ASSERT_H