17#ifndef ZEPHYR_INCLUDE_SYS_ZASSERT_H_
18#define ZEPHYR_INCLUDE_SYS_ZASSERT_H_
47#define ZASSERT_LEVEL_OFF 0
49#define ZASSERT_LEVEL_TERSE 1
51#define ZASSERT_LEVEL_NORMAL 2
53#define ZASSERT_LEVEL_VERBOSE 3
73#ifndef CONFIG_ASSERT_TEST
77void
zassert_fail(const
char *cond, const
char *file,
unsigned int line, const
char *fmt, ...);
83#ifndef CONFIG_ASSERT_TEST
123#define ZASSERT_IMPL_MODULE_LEVEL(module) UTIL_CAT(UTIL_CAT(CONFIG_ASSERT_MODULE_, module), _LEVEL)
129#define ZASSERT_IMPL_LEVEL_RESOLVE(...) \
130 GET_ARG_N(2, __VA_ARGS__, ZASSERT_IMPL_MODULE_LEVEL(GET_ARG_N(1, __VA_ARGS__)), _)
133#define ZASSERT_IMPL(_level, _test, ...)
134#define ZASSERT_IMPL_MODULE(...)
136#define ZASSERT_IMPL(_level, _test, ...) \
138 if ((_level) != ZASSERT_LEVEL_OFF && unlikely(!(_test))) { \
139 switch ((_level)) { \
140 case ZASSERT_LEVEL_VERBOSE: \
141 zassert_fail(Z_STRINGIFY(_test), __FILE__, __LINE__, \
142 COND_CODE_1(IS_EMPTY(__VA_ARGS__), \
143 (NULL), (__VA_ARGS__))); \
145 case ZASSERT_LEVEL_NORMAL: \
146 zassert_fail(NULL, __FILE__, __LINE__, NULL); \
148 case ZASSERT_LEVEL_TERSE: \
149 zassert_fail(NULL, NULL, 0, NULL); \
157#define ZASSERT_IMPL_MODULE(...) \
158 BUILD_ASSERT((ZASSERT_IMPL_LEVEL_RESOLVE(__VA_ARGS__)) >= ZASSERT_LEVEL_OFF && \
159 (ZASSERT_IMPL_LEVEL_RESOLVE(__VA_ARGS__)) <= ZASSERT_LEVEL_VERBOSE,\
160 "Invalid assert level"); \
161 static const int zassert_impl_level __unused = \
162 IS_ENABLED(CONFIG_ASSERT) ? (ZASSERT_IMPL_LEVEL_RESOLVE(__VA_ARGS__)) \
166#define ZASSERT_IMPL_LEVEL(_level, _test, ...) \
168 BUILD_ASSERT((_level) >= ZASSERT_LEVEL_OFF && (_level) <= ZASSERT_LEVEL_VERBOSE,\
169 "Invalid assert level"); \
170 ZASSERT_IMPL(_level, _test, ##__VA_ARGS__); \
180#define ZASSERT_TERSE(_test, ...) ZASSERT_IMPL_LEVEL(ZASSERT_LEVEL_TERSE, (_test), ##__VA_ARGS__)
188#define ZASSERT_NORMAL(_test, ...) ZASSERT_IMPL_LEVEL(ZASSERT_LEVEL_NORMAL, (_test), ##__VA_ARGS__)
196#define ZASSERT_VERBOSE(_test, ...) \
197 ZASSERT_IMPL_LEVEL(ZASSERT_LEVEL_VERBOSE, (_test), ##__VA_ARGS__)
217#define ZASSERT_MODULE(...) ZASSERT_IMPL_MODULE(__VA_ARGS__)
230#define ZASSERT(_test, ...) ZASSERT_IMPL(zassert_impl_level, _test, ##__VA_ARGS__)
FUNC_NORETURN void zassert_fail(const char *cond, const char *file, unsigned int line, const char *fmt,...)
Report a failed assertion and take terminal action.
FUNC_NORETURN void zassert_post_action(const char *file, unsigned int line)
Terminal action taken on assertion failure.
void zassert_vprint(const char *fmt, va_list ap)
Emit assertion text (va_list form).
static void zassert_print(const char *fmt,...)
Emit assertion text (printf like), routed through zassert_vprint().
Definition zassert.h:108