Zephyr API Documentation  3.7.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
ztest_assert.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
13#ifndef ZEPHYR_TESTSUITE_ZTEST_ASSERT_H_
14#define ZEPHYR_TESTSUITE_ZTEST_ASSERT_H_
15
16#include <stdarg.h>
17#include <stdbool.h>
18#include <stdio.h>
19#include <string.h>
20
21#include <zephyr/ztest.h>
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27const char *ztest_relative_filename(const char *file);
28void ztest_test_fail(void);
29void ztest_test_skip(void);
32#if CONFIG_ZTEST_ASSERT_VERBOSE == 0
33
34static inline bool z_zassert_(bool cond, const char *file, int line)
35{
36 if (cond == false) {
37 PRINT("\n Assertion failed at %s:%d\n", ztest_relative_filename(file), line);
39 return false;
40 }
41
42 return true;
43}
44
45#define z_zassert(cond, default_msg, file, line, func, msg, ...) z_zassert_(cond, file, line)
46
47static inline bool z_zassume_(bool cond, const char *file, int line)
48{
49 if (cond == false) {
50 PRINT("\n Assumption failed at %s:%d\n", ztest_relative_filename(file), line);
52 return false;
53 }
54
55 return true;
56}
57
58#define z_zassume(cond, default_msg, file, line, func, msg, ...) z_zassume_(cond, file, line)
59
60static inline bool z_zexpect_(bool cond, const char *file, int line)
61{
62 if (cond == false) {
63 PRINT("\n Expectation failed at %s:%d\n", ztest_relative_filename(file), line);
65 return false;
66 }
67
68 return true;
69}
70
71#define z_zexpect(cond, default_msg, file, line, func, msg, ...) z_zexpect_(cond, file, line)
72
73#else /* CONFIG_ZTEST_ASSERT_VERBOSE != 0 */
74
75static inline bool z_zassert(bool cond, const char *default_msg, const char *file, int line,
76 const char *func, const char *msg, ...)
77{
78 if (cond == false) {
79 va_list vargs;
80
81 va_start(vargs, msg);
82 PRINT("\n Assertion failed at %s:%d: %s: %s\n", ztest_relative_filename(file),
83 line, func, default_msg);
84 vprintk(msg, vargs);
85 printk("\n");
86 va_end(vargs);
88 return false;
89 }
90#if CONFIG_ZTEST_ASSERT_VERBOSE == 2
91 else {
92 PRINT("\n Assertion succeeded at %s:%d (%s)\n", ztest_relative_filename(file),
93 line, func);
94 }
95#endif
96 return true;
97}
98
99static inline bool z_zassume(bool cond, const char *default_msg, const char *file, int line,
100 const char *func, const char *msg, ...)
101{
102 if (cond == false) {
103 va_list vargs;
104
105 va_start(vargs, msg);
106 PRINT("\n Assumption failed at %s:%d: %s: %s\n", ztest_relative_filename(file),
107 line, func, default_msg);
108 vprintk(msg, vargs);
109 printk("\n");
110 va_end(vargs);
112 return false;
113 }
114#if CONFIG_ZTEST_ASSERT_VERBOSE == 2
115 else {
116 PRINT("\n Assumption succeeded at %s:%d (%s)\n", ztest_relative_filename(file),
117 line, func);
118 }
119#endif
120 return true;
121}
122
123static inline bool z_zexpect(bool cond, const char *default_msg, const char *file, int line,
124 const char *func, const char *msg, ...)
125{
126 if (cond == false) {
127 va_list vargs;
128
129 va_start(vargs, msg);
130 PRINT("\n Expectation failed at %s:%d: %s: %s\n", ztest_relative_filename(file),
131 line, func, default_msg);
132 vprintk(msg, vargs);
133 printk("\n");
134 va_end(vargs);
136 return false;
137 }
138#if CONFIG_ZTEST_ASSERT_VERBOSE == 2
139 else {
140 PRINT("\n Expectation succeeded at %s:%d (%s)\n", ztest_relative_filename(file),
141 line, func);
142 }
143#endif
144 return true;
145}
146
147#endif /* CONFIG_ZTEST_ASSERT_VERBOSE */
148
172#define _zassert_base(cond, default_msg, msg, ...) \
173 do { \
174 bool _msg = (msg != NULL); \
175 bool _ret = z_zassert(cond, _msg ? ("(" default_msg ")") : (default_msg), __FILE__,\
176 __LINE__, __func__, _msg ? msg : "", ##__VA_ARGS__); \
177 (void)_msg; \
178 if (!_ret) { \
179 /* If kernel but without multithreading return. */ \
180 COND_CODE_1(KERNEL, (COND_CODE_1(CONFIG_MULTITHREADING, (), (return;))), \
181 ()) \
182 } \
183 } while (0)
184
185#define _zassert_va(cond, default_msg, msg, ...) \
186 _zassert_base(cond, default_msg, msg, ##__VA_ARGS__)
187
188#define zassert(cond, default_msg, ...) \
189 _zassert_va(cond, default_msg, COND_CODE_1(__VA_OPT__(1), (__VA_ARGS__), (NULL)))
190
209#define _zassume_base(cond, default_msg, msg, ...) \
210 do { \
211 bool _msg = (msg != NULL); \
212 bool _ret = z_zassume(cond, _msg ? ("(" default_msg ")") : (default_msg), __FILE__,\
213 __LINE__, __func__, _msg ? msg : "", ##__VA_ARGS__); \
214 (void)_msg; \
215 if (!_ret) { \
216 /* If kernel but without multithreading return. */ \
217 COND_CODE_1(KERNEL, (COND_CODE_1(CONFIG_MULTITHREADING, (), (return;))), \
218 ()) \
219 } \
220 } while (0)
221
222#define _zassume_va(cond, default_msg, msg, ...) \
223 _zassume_base(cond, default_msg, msg, ##__VA_ARGS__)
224
225#define zassume(cond, default_msg, ...) \
226 _zassume_va(cond, default_msg, COND_CODE_1(__VA_OPT__(1), (__VA_ARGS__), (NULL)))
227
238#define _zexpect_base(cond, default_msg, msg, ...) \
239 do { \
240 bool _msg = (msg != NULL); \
241 bool _ret = \
242 z_zexpect(cond, _msg ? ("(" default_msg ")") : (default_msg), __FILE__, \
243 __LINE__, __func__, _msg ? msg : "", ##__VA_ARGS__); \
244 (void)_msg; \
245 if (!_ret) { \
246 /* If kernel but without multithreading return. */ \
247 COND_CODE_1(KERNEL, (COND_CODE_1(CONFIG_MULTITHREADING, (), (return;))), \
248 ()) \
249 } \
250 } while (0)
251
252#define _zexpect_va(cond, default_msg, msg, ...) \
253 _zexpect_base(cond, default_msg, msg, ##__VA_ARGS__)
254
255#define zexpect(cond, default_msg, ...) \
256 _zexpect_va(cond, default_msg, COND_CODE_1(__VA_OPT__(1), (__VA_ARGS__), (NULL)))
257
262#define zassert_unreachable(...) zassert(0, "Reached unreachable code", ##__VA_ARGS__)
263
269#define zassert_true(cond, ...) zassert(cond, #cond " is false", ##__VA_ARGS__)
270
276#define zassert_false(cond, ...) zassert(!(cond), #cond " is true", ##__VA_ARGS__)
277
283#define zassert_ok(cond, ...) zassert(!(cond), #cond " is non-zero", ##__VA_ARGS__)
284
290#define zassert_not_ok(cond, ...) zassert(!!(cond), #cond " is zero", ##__VA_ARGS__)
291
297#define zassert_is_null(ptr, ...) zassert((ptr) == NULL, #ptr " is not NULL", ##__VA_ARGS__)
298
304#define zassert_not_null(ptr, ...) zassert((ptr) != NULL, #ptr " is NULL", ##__VA_ARGS__)
305
315#define zassert_equal(a, b, ...) zassert((a) == (b), #a " not equal to " #b, ##__VA_ARGS__)
316
326#define zassert_not_equal(a, b, ...) zassert((a) != (b), #a " equal to " #b, ##__VA_ARGS__)
327
337#define zassert_equal_ptr(a, b, ...) \
338 zassert((void *)(a) == (void *)(b), #a " not equal to " #b, ##__VA_ARGS__)
339
348#define zassert_within(a, b, d, ...) \
349 zassert(((a) >= ((b) - (d))) && ((a) <= ((b) + (d))), #a " not within " #b " +/- " #d, \
350 ##__VA_ARGS__)
351
361#define zassert_between_inclusive(a, l, u, ...) \
362 zassert(((a) >= (l)) && ((a) <= (u)), #a " not between " #l " and " #u " inclusive", \
363 ##__VA_ARGS__)
364
376#define zassert_mem_equal(...) zassert_mem_equal__(__VA_ARGS__)
377
389#define zassert_mem_equal__(buf, exp, size, ...) \
390 zassert(memcmp(buf, exp, size) == 0, #buf " not equal to " #exp, ##__VA_ARGS__)
391
399#define zassert_str_equal(s1, s2, ...) \
400 zassert(strcmp(s1, s2) == 0, #s1 " not equal to " #s2, ##__VA_ARGS__)
401
423#define zassume_true(cond, ...) zassume(cond, #cond " is false", ##__VA_ARGS__)
424
433#define zassume_false(cond, ...) zassume(!(cond), #cond " is true", ##__VA_ARGS__)
434
443#define zassume_ok(cond, ...) zassume(!(cond), #cond " is non-zero", ##__VA_ARGS__)
444
453#define zassume_not_ok(cond, ...) zassume(!!(cond), #cond " is zero", ##__VA_ARGS__)
454
463#define zassume_is_null(ptr, ...) zassume((ptr) == NULL, #ptr " is not NULL", ##__VA_ARGS__)
464
473#define zassume_not_null(ptr, ...) zassume((ptr) != NULL, #ptr " is NULL", ##__VA_ARGS__)
474
485#define zassume_equal(a, b, ...) zassume((a) == (b), #a " not equal to " #b, ##__VA_ARGS__)
486
497#define zassume_not_equal(a, b, ...) zassume((a) != (b), #a " equal to " #b, ##__VA_ARGS__)
498
509#define zassume_equal_ptr(a, b, ...) \
510 zassume((void *)(a) == (void *)(b), #a " not equal to " #b, ##__VA_ARGS__)
511
522#define zassume_within(a, b, d, ...) \
523 zassume(((a) >= ((b) - (d))) && ((a) <= ((b) + (d))), #a " not within " #b " +/- " #d, \
524 ##__VA_ARGS__)
525
537#define zassume_between_inclusive(a, l, u, ...) \
538 zassume(((a) >= (l)) && ((a) <= (u)), #a " not between " #l " and " #u " inclusive", \
539 ##__VA_ARGS__)
540
552#define zassume_mem_equal(...) zassume_mem_equal__(__VA_ARGS__)
553
567#define zassume_mem_equal__(buf, exp, size, ...) \
568 zassume(memcmp(buf, exp, size) == 0, #buf " not equal to " #exp, ##__VA_ARGS__)
569
577#define zassume_str_equal(s1, s2, ...) \
578 zassume(strcmp(s1, s2) == 0, #s1 " not equal to " #s2, ##__VA_ARGS__)
579
599#define zexpect_true(cond, ...) zexpect(cond, #cond " is false", ##__VA_ARGS__)
600
607#define zexpect_false(cond, ...) zexpect(!(cond), #cond " is true", ##__VA_ARGS__)
608
616#define zexpect_ok(cond, ...) zexpect(!(cond), #cond " is non-zero", ##__VA_ARGS__)
617
625#define zexpect_not_ok(cond, ...) zexpect(!!(cond), #cond " is zero", ##__VA_ARGS__)
626
633#define zexpect_is_null(ptr, ...) zexpect((ptr) == NULL, #ptr " is not NULL", ##__VA_ARGS__)
634
641#define zexpect_not_null(ptr, ...) zexpect((ptr) != NULL, #ptr " is NULL", ##__VA_ARGS__)
642
650#define zexpect_equal(a, b, ...) zexpect((a) == (b), #a " not equal to " #b, ##__VA_ARGS__)
651
662#define zexpect_not_equal(a, b, ...) zexpect((a) != (b), #a " equal to " #b, ##__VA_ARGS__)
663
673#define zexpect_equal_ptr(a, b, ...) \
674 zexpect((void *)(a) == (void *)(b), #a " not equal to " #b, ##__VA_ARGS__)
675
685#define zexpect_within(a, b, delta, ...) \
686 zexpect(((a) >= ((b) - (delta))) && ((a) <= ((b) + (delta))), \
687 #a " not within " #b " +/- " #delta, ##__VA_ARGS__)
688
698#define zexpect_between_inclusive(a, lower, upper, ...) \
699 zexpect(((a) >= (lower)) && ((a) <= (upper)), \
700 #a " not between " #lower " and " #upper " inclusive", ##__VA_ARGS__)
701
711#define zexpect_mem_equal(buf, exp, size, ...) \
712 zexpect(memcmp(buf, exp, size) == 0, #buf " not equal to " #exp, ##__VA_ARGS__)
713
722#define zexpect_str_equal(s1, s2, ...) \
723 zexpect(strcmp(s1, s2) == 0, #s1 " not equal to " #s2, ##__VA_ARGS__)
724
729#ifdef __cplusplus
730}
731#endif
732
733#endif /* ZEPHYR_TESTSUITE_ZTEST_ASSERT_H_ */
static void vprintk(const char *fmt, va_list ap)
Definition: printk.h:56
static void printk(const char *fmt,...)
Print kernel debugging message.
Definition: printk.h:51
Zephyr Testsuite.
#define PRINT
Definition: ztest.h:38
const char * ztest_relative_filename(const char *file)
void ztest_skip_failed_assumption(void)
void ztest_test_expect_fail(void)
void ztest_test_fail(void)
void ztest_test_skip(void)