1 /*
2 * Copyright (c) 2016 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 /**
8 * @file
9 *
10 * @brief Zephyr testing framework assertion macros
11 */
12
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
24 extern "C" {
25 #endif
26
27 const char *ztest_relative_filename(const char *file);
28 void ztest_test_fail(void);
29 void ztest_test_skip(void);
30 void ztest_test_expect_fail(void);
31 void ztest_skip_failed_assumption(void);
32 #if CONFIG_ZTEST_ASSERT_VERBOSE == 0
33
z_zassert_(bool cond,const char * file,int line)34 static 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);
38 ztest_test_fail();
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
z_zassume_(bool cond,const char * file,int line)47 static 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);
51 ztest_skip_failed_assumption();
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
z_zexpect_(bool cond,const char * file,int line)60 static 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);
64 ztest_test_expect_fail();
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
z_zassert(bool cond,const char * default_msg,const char * file,int line,const char * func,const char * msg,...)75 static 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);
87 ztest_test_fail();
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
z_zassume(bool cond,const char * default_msg,const char * file,int line,const char * func,const char * msg,...)99 static 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);
111 ztest_skip_failed_assumption();
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
z_zexpect(bool cond,const char * default_msg,const char * file,int line,const char * func,const char * msg,...)123 static 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);
135 ztest_test_expect_fail();
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
149 /**
150 * @defgroup ztest_assert Ztest assertion macros
151 * @ingroup ztest
152 *
153 * This module provides assertions when using Ztest.
154 *
155 * @{
156 */
157
158 /**
159 * @brief Fail the test, if @a cond is false
160 *
161 * You probably don't need to call this macro directly. You should
162 * instead use zassert_{condition} macros below.
163 *
164 * Note that when CONFIG_MULTITHREADING=n macro returns from the function. It is
165 * then expected that in that case ztest asserts will be used only in the
166 * context of the test function.
167 *
168 * @param cond Condition to check
169 * @param default_msg Message to print if @a cond is false
170 * @param msg Optional, can be NULL. Message to print if @a cond is false.
171 */
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
191 /**
192 * @brief Skip the test, if @a cond is false
193 *
194 * You probably don't need to call this macro directly. You should
195 * instead use zassume_{condition} macros below.
196 *
197 * Note that when CONFIG_MULTITHREADING=n macro returns from the function. It's then expected that
198 * in that case ztest assumes will be used only in the context of the test function.
199 *
200 * NOTE: zassume should not be used to replace zassert, the goal of zassume is to skip tests that
201 * would otherwise fail due to a zassert on some other dependent behavior that is *not* under test,
202 * thus reducing what could be tens to hundreds of assertion failures to investigate down to a few
203 * failures only.
204 *
205 * @param cond Condition to check
206 * @param default_msg Message to print if @a cond is false
207 * @param msg Optional, can be NULL. Message to print if @a cond is false.
208 */
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
228 /**
229 * @brief If @a cond is false, fail the test but continue its execution.
230 *
231 * You probably don't need to call this macro directly. You should
232 * instead use zexpect_{condition} macros below.
233 *
234 * @param cond Condition to check
235 * @param default_msg Message to print if @a cond is false
236 * @param msg Optional, can be NULL. Message to print if @a cond is false.
237 */
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
258 /**
259 * @brief Assert that this function call won't be reached
260 * @param ... Optional message and variables to print if the assertion fails
261 */
262 #define zassert_unreachable(...) zassert(0, "Reached unreachable code", ##__VA_ARGS__)
263
264 /**
265 * @brief Assert that @a cond is true
266 * @param cond Condition to check
267 * @param ... Optional message and variables to print if the assertion fails
268 */
269 #define zassert_true(cond, ...) zassert(cond, #cond " is false", ##__VA_ARGS__)
270
271 /**
272 * @brief Assert that @a cond is false
273 * @param cond Condition to check
274 * @param ... Optional message and variables to print if the assertion fails
275 */
276 #define zassert_false(cond, ...) zassert(!(cond), #cond " is true", ##__VA_ARGS__)
277
278 /**
279 * @brief Assert that @a cond is 0 (success)
280 * @param cond Condition to check
281 * @param ... Optional message and variables to print if the assertion fails
282 */
283 #define zassert_ok(cond, ...) zassert(!(cond), #cond " is non-zero", ##__VA_ARGS__)
284
285 /**
286 * @brief Assert that @a cond is not 0 (failure)
287 * @param cond Condition to check
288 * @param ... Optional message and variables to print if the assertion fails
289 */
290 #define zassert_not_ok(cond, ...) zassert(!!(cond), #cond " is zero", ##__VA_ARGS__)
291
292 /**
293 * @brief Assert that @a ptr is NULL
294 * @param ptr Pointer to compare
295 * @param ... Optional message and variables to print if the assertion fails
296 */
297 #define zassert_is_null(ptr, ...) zassert((ptr) == NULL, #ptr " is not NULL", ##__VA_ARGS__)
298
299 /**
300 * @brief Assert that @a ptr is not NULL
301 * @param ptr Pointer to compare
302 * @param ... Optional message and variables to print if the assertion fails
303 */
304 #define zassert_not_null(ptr, ...) zassert((ptr) != NULL, #ptr " is NULL", ##__VA_ARGS__)
305
306 /**
307 * @brief Assert that @a a equals @a b
308 *
309 * @a a and @a b won't be converted and will be compared directly.
310 *
311 * @param a Value to compare
312 * @param b Value to compare
313 * @param ... Optional message and variables to print if the assertion fails
314 */
315 #define zassert_equal(a, b, ...) zassert((a) == (b), #a " not equal to " #b, ##__VA_ARGS__)
316
317 /**
318 * @brief Assert that @a a does not equal @a b
319 *
320 * @a a and @a b won't be converted and will be compared directly.
321 *
322 * @param a Value to compare
323 * @param b Value to compare
324 * @param ... Optional message and variables to print if the assertion fails
325 */
326 #define zassert_not_equal(a, b, ...) zassert((a) != (b), #a " equal to " #b, ##__VA_ARGS__)
327
328 /**
329 * @brief Assert that @a a equals @a b
330 *
331 * @a a and @a b will be converted to `void *` before comparing.
332 *
333 * @param a Value to compare
334 * @param b Value to compare
335 * @param ... Optional message and variables to print if the assertion fails
336 */
337 #define zassert_equal_ptr(a, b, ...) \
338 zassert((void *)(a) == (void *)(b), #a " not equal to " #b, ##__VA_ARGS__)
339
340 /**
341 * @brief Assert that @a a is within @a b with delta @a d
342 *
343 * @param a Value to compare
344 * @param b Value to compare
345 * @param d Delta
346 * @param ... Optional message and variables to print if the assertion fails
347 */
348 #define zassert_within(a, b, d, ...) \
349 zassert(((a) >= ((b) - (d))) && ((a) <= ((b) + (d))), #a " not within " #b " +/- " #d, \
350 ##__VA_ARGS__)
351
352 /**
353 * @brief Assert that @a a is greater than or equal to @a l and less
354 * than or equal to @a u
355 *
356 * @param a Value to compare
357 * @param l Lower limit
358 * @param u Upper limit
359 * @param ... Optional message and variables to print if the assertion fails
360 */
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
365 /**
366 * @brief Assert that 2 memory buffers have the same contents
367 *
368 * This macro calls the final memory comparison assertion macro.
369 * Using double expansion allows providing some arguments by macros that
370 * would expand to more than one values (ANSI-C99 defines that all the macro
371 * arguments have to be expanded before macro call).
372 *
373 * @param ... Arguments, see @ref zassert_mem_equal__
374 * for real arguments accepted.
375 */
376 #define zassert_mem_equal(...) zassert_mem_equal__(__VA_ARGS__)
377
378 /**
379 * @brief Internal assert that 2 memory buffers have the same contents
380 *
381 * @note This is internal macro, to be used as a second expansion.
382 * See @ref zassert_mem_equal.
383 *
384 * @param buf Buffer to compare
385 * @param exp Buffer with expected contents
386 * @param size Size of buffers
387 * @param ... Optional message and variables to print if the assertion fails
388 */
389 #define zassert_mem_equal__(buf, exp, size, ...) \
390 zassert(memcmp(buf, exp, size) == 0, #buf " not equal to " #exp, ##__VA_ARGS__)
391
392 /**
393 * @brief Assert that 2 strings have the same contents
394 *
395 * @param s1 The first string
396 * @param s2 The second string
397 * @param ... Optional message and variables to print if the expectation fails
398 */
399 #define zassert_str_equal(s1, s2, ...) \
400 zassert(strcmp(s1, s2) == 0, #s1 " not equal to " #s2, ##__VA_ARGS__)
401
402 /**
403 * @}
404 */
405
406 /**
407 * @defgroup ztest_assume Ztest assumption macros
408 * @ingroup ztest
409 *
410 * This module provides assumptions when using Ztest.
411 *
412 * @{
413 */
414
415 /**
416 * @brief Assume that @a cond is true
417 *
418 * If the assumption fails, the test will be marked as "skipped".
419 *
420 * @param cond Condition to check
421 * @param ... Optional message and variables to print if the assumption fails
422 */
423 #define zassume_true(cond, ...) zassume(cond, #cond " is false", ##__VA_ARGS__)
424
425 /**
426 * @brief Assume that @a cond is false
427 *
428 * If the assumption fails, the test will be marked as "skipped".
429 *
430 * @param cond Condition to check
431 * @param ... Optional message and variables to print if the assumption fails
432 */
433 #define zassume_false(cond, ...) zassume(!(cond), #cond " is true", ##__VA_ARGS__)
434
435 /**
436 * @brief Assume that @a cond is 0 (success)
437 *
438 * If the assumption fails, the test will be marked as "skipped".
439 *
440 * @param cond Condition to check
441 * @param ... Optional message and variables to print if the assumption fails
442 */
443 #define zassume_ok(cond, ...) zassume(!(cond), #cond " is non-zero", ##__VA_ARGS__)
444
445 /**
446 * @brief Assume that @a cond is not 0 (failure)
447 *
448 * If the assumption fails, the test will be marked as "skipped".
449 *
450 * @param cond Condition to check
451 * @param ... Optional message and variables to print if the assumption fails
452 */
453 #define zassume_not_ok(cond, ...) zassume(!!(cond), #cond " is zero", ##__VA_ARGS__)
454
455 /**
456 * @brief Assume that @a ptr is NULL
457 *
458 * If the assumption fails, the test will be marked as "skipped".
459 *
460 * @param ptr Pointer to compare
461 * @param ... Optional message and variables to print if the assumption fails
462 */
463 #define zassume_is_null(ptr, ...) zassume((ptr) == NULL, #ptr " is not NULL", ##__VA_ARGS__)
464
465 /**
466 * @brief Assume that @a ptr is not NULL
467 *
468 * If the assumption fails, the test will be marked as "skipped".
469 *
470 * @param ptr Pointer to compare
471 * @param ... Optional message and variables to print if the assumption fails
472 */
473 #define zassume_not_null(ptr, ...) zassume((ptr) != NULL, #ptr " is NULL", ##__VA_ARGS__)
474
475 /**
476 * @brief Assume that @a a equals @a b
477 *
478 * @a a and @a b won't be converted and will be compared directly. If the
479 * assumption fails, the test will be marked as "skipped".
480 *
481 * @param a Value to compare
482 * @param b Value to compare
483 * @param ... Optional message and variables to print if the assumption fails
484 */
485 #define zassume_equal(a, b, ...) zassume((a) == (b), #a " not equal to " #b, ##__VA_ARGS__)
486
487 /**
488 * @brief Assume that @a a does not equal @a b
489 *
490 * @a a and @a b won't be converted and will be compared directly. If the
491 * assumption fails, the test will be marked as "skipped".
492 *
493 * @param a Value to compare
494 * @param b Value to compare
495 * @param ... Optional message and variables to print if the assumption fails
496 */
497 #define zassume_not_equal(a, b, ...) zassume((a) != (b), #a " equal to " #b, ##__VA_ARGS__)
498
499 /**
500 * @brief Assume that @a a equals @a b
501 *
502 * @a a and @a b will be converted to `void *` before comparing. If the
503 * assumption fails, the test will be marked as "skipped".
504 *
505 * @param a Value to compare
506 * @param b Value to compare
507 * @param ... Optional message and variables to print if the assumption fails
508 */
509 #define zassume_equal_ptr(a, b, ...) \
510 zassume((void *)(a) == (void *)(b), #a " not equal to " #b, ##__VA_ARGS__)
511
512 /**
513 * @brief Assume that @a a is within @a b with delta @a d
514 *
515 * If the assumption fails, the test will be marked as "skipped".
516 *
517 * @param a Value to compare
518 * @param b Value to compare
519 * @param d Delta
520 * @param ... Optional message and variables to print if the assumption fails
521 */
522 #define zassume_within(a, b, d, ...) \
523 zassume(((a) >= ((b) - (d))) && ((a) <= ((b) + (d))), #a " not within " #b " +/- " #d, \
524 ##__VA_ARGS__)
525
526 /**
527 * @brief Assume that @a a is greater than or equal to @a l and less
528 * than or equal to @a u
529 *
530 * If the assumption fails, the test will be marked as "skipped".
531 *
532 * @param a Value to compare
533 * @param l Lower limit
534 * @param u Upper limit
535 * @param ... Optional message and variables to print if the assumption fails
536 */
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
541 /**
542 * @brief Assume that 2 memory buffers have the same contents
543 *
544 * This macro calls the final memory comparison assumption macro.
545 * Using double expansion allows providing some arguments by macros that
546 * would expand to more than one values (ANSI-C99 defines that all the macro
547 * arguments have to be expanded before macro call).
548 *
549 * @param ... Arguments, see @ref zassume_mem_equal__
550 * for real arguments accepted.
551 */
552 #define zassume_mem_equal(...) zassume_mem_equal__(__VA_ARGS__)
553
554 /**
555 * @brief Internal assume that 2 memory buffers have the same contents
556 *
557 * If the assumption fails, the test will be marked as "skipped".
558 *
559 * @note This is internal macro, to be used as a second expansion.
560 * See @ref zassume_mem_equal.
561 *
562 * @param buf Buffer to compare
563 * @param exp Buffer with expected contents
564 * @param size Size of buffers
565 * @param ... Optional message and variables to print if the assumption fails
566 */
567 #define zassume_mem_equal__(buf, exp, size, ...) \
568 zassume(memcmp(buf, exp, size) == 0, #buf " not equal to " #exp, ##__VA_ARGS__)
569
570 /**
571 * @brief Assumes that 2 strings have the same contents
572 *
573 * @param s1 The first string
574 * @param s2 The second string
575 * @param ... Optional message and variables to print if the expectation fails
576 */
577 #define zassume_str_equal(s1, s2, ...) \
578 zassume(strcmp(s1, s2) == 0, #s1 " not equal to " #s2, ##__VA_ARGS__)
579
580 /**
581 * @}
582 */
583
584 /**
585 * @defgroup ztest_expect Ztest expectation macros
586 * @ingroup ztest
587 *
588 * This module provides expectations when using Ztest.
589 *
590 * @{
591 */
592
593 /**
594 * @brief Expect that @a cond is true, otherwise mark test as failed but continue its execution.
595 *
596 * @param cond Condition to check
597 * @param ... Optional message and variables to print if the expectation fails
598 */
599 #define zexpect_true(cond, ...) zexpect(cond, #cond " is false", ##__VA_ARGS__)
600
601 /**
602 * @brief Expect that @a cond is false, otherwise mark test as failed but continue its execution.
603 *
604 * @param cond Condition to check
605 * @param ... Optional message and variables to print if the expectation fails
606 */
607 #define zexpect_false(cond, ...) zexpect(!(cond), #cond " is true", ##__VA_ARGS__)
608
609 /**
610 * @brief Expect that @a cond is 0 (success), otherwise mark test as failed but continue its
611 * execution.
612 *
613 * @param cond Condition to check
614 * @param ... Optional message and variables to print if the expectation fails
615 */
616 #define zexpect_ok(cond, ...) zexpect(!(cond), #cond " is non-zero", ##__VA_ARGS__)
617
618 /**
619 * @brief Expect that @a cond is not 0 (failure), otherwise mark test as failed but continue its
620 * execution.
621 *
622 * @param cond Condition to check
623 * @param ... Optional message and variables to print if the expectation fails
624 */
625 #define zexpect_not_ok(cond, ...) zexpect(!!(cond), #cond " is zero", ##__VA_ARGS__)
626
627 /**
628 * @brief Expect that @a ptr is NULL, otherwise mark test as failed but continue its execution.
629 *
630 * @param ptr Pointer to compare
631 * @param ... Optional message and variables to print if the expectation fails
632 */
633 #define zexpect_is_null(ptr, ...) zexpect((ptr) == NULL, #ptr " is not NULL", ##__VA_ARGS__)
634
635 /**
636 * @brief Expect that @a ptr is not NULL, otherwise mark test as failed but continue its execution.
637 *
638 * @param ptr Pointer to compare
639 * @param ... Optional message and variables to print if the expectation fails
640 */
641 #define zexpect_not_null(ptr, ...) zexpect((ptr) != NULL, #ptr " is NULL", ##__VA_ARGS__)
642
643 /**
644 * @brief Expect that @a a equals @a b, otherwise mark test as failed but continue its execution.
645 *
646 * @param a Value to compare
647 * @param b Value to compare
648 * @param ... Optional message and variables to print if the expectation fails
649 */
650 #define zexpect_equal(a, b, ...) zexpect((a) == (b), #a " not equal to " #b, ##__VA_ARGS__)
651
652 /**
653 * @brief Expect that @a a does not equal @a b, otherwise mark test as failed but continue its
654 * execution.
655 *
656 * @a a and @a b won't be converted and will be compared directly.
657 *
658 * @param a Value to compare
659 * @param b Value to compare
660 * @param ... Optional message and variables to print if the expectation fails
661 */
662 #define zexpect_not_equal(a, b, ...) zexpect((a) != (b), #a " equal to " #b, ##__VA_ARGS__)
663
664 /**
665 * @brief Expect that @a a equals @a b, otherwise mark test as failed but continue its execution.
666 *
667 * @a a and @a b will be converted to `void *` before comparing.
668 *
669 * @param a Value to compare
670 * @param b Value to compare
671 * @param ... Optional message and variables to print if the expectation fails
672 */
673 #define zexpect_equal_ptr(a, b, ...) \
674 zexpect((void *)(a) == (void *)(b), #a " not equal to " #b, ##__VA_ARGS__)
675
676 /**
677 * @brief Expect that @a a is within @a b with delta @a d, otherwise mark test as failed but
678 * continue its execution.
679 *
680 * @param a Value to compare
681 * @param b Value to compare
682 * @param delta Difference between a and b
683 * @param ... Optional message and variables to print if the expectation fails
684 */
685 #define zexpect_within(a, b, delta, ...) \
686 zexpect(((a) >= ((b) - (delta))) && ((a) <= ((b) + (delta))), \
687 #a " not within " #b " +/- " #delta, ##__VA_ARGS__)
688
689 /**
690 * @brief Expect that @a a is greater than or equal to @a l and less
691 * than or equal to @a u, otherwise mark test as failed but continue its execution.
692 *
693 * @param a Value to compare
694 * @param lower Lower limit
695 * @param upper Upper limit
696 * @param ... Optional message and variables to print if the expectation fails
697 */
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
702 /**
703 * @brief Expect that 2 memory buffers have the same contents, otherwise mark test as failed but
704 * continue its execution.
705 *
706 * @param buf Buffer to compare
707 * @param exp Buffer with expected contents
708 * @param size Size of buffers
709 * @param ... Optional message and variables to print if the expectation fails
710 */
711 #define zexpect_mem_equal(buf, exp, size, ...) \
712 zexpect(memcmp(buf, exp, size) == 0, #buf " not equal to " #exp, ##__VA_ARGS__)
713
714 /**
715 * @brief Expect that 2 strings have the same contents, otherwise mark test as failed but
716 * continue its execution.
717 *
718 * @param s1 The first string
719 * @param s2 The second string
720 * @param ... Optional message and variables to print if the expectation fails
721 */
722 #define zexpect_str_equal(s1, s2, ...) \
723 zexpect(strcmp(s1, s2) == 0, #s1 " not equal to " #s2, ##__VA_ARGS__)
724
725 /**
726 * @}
727 */
728
729 #ifdef __cplusplus
730 }
731 #endif
732
733 #endif /* ZEPHYR_TESTSUITE_ZTEST_ASSERT_H_ */
734