24#ifndef CRITERION_INTERNAL_ASSERT_H_
25#define CRITERION_INTERNAL_ASSERT_H_
83#define CR_GET_CONDITION(Condition, ...) Condition
84#define CR_GET_CONDITION_STR(Condition, ...) #Condition
85#define CR_VA_SKIP(_, ...) __VA_ARGS__
87#define CR_TRANSLATE_DEF_MSG__(Arg) \
90#define CR_TRANSLATE_DEF_MSG_(...) \
91 CR_EXPAND(cr_translate_assert_msg( \
92 CR_VA_HEAD(__VA_ARGS__), \
93 "" CR_TRANSLATE_DEF_MSG__(CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__))) \
96#define CR_INIT_STATS_(MsgVar, Shifted, ...) \
99 char *cr_def_msg__ = CR_EXPAND(CR_TRANSLATE_DEF_MSG_(__VA_ARGS__)); \
100 char *cr_fmt_msg__ = NULL; \
101 cr_asprintf(&cr_fmt_msg__, "x" CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))); \
102 if (cr_fmt_msg__ && cr_fmt_msg__[1]) { \
103 MsgVar = cr_fmt_msg__ + 1; \
105 cr_asprintf_free(cr_def_msg__); \
107 MsgVar = cr_def_msg__; \
108 cr_asprintf_free(cr_fmt_msg__); \
112#define CR_FAIL_ABORT_ criterion_abort_test
113#define CR_FAIL_CONTINUES_ criterion_continue_test
115#define cr_assert_impl(Fail, Condition, ...) \
117 bool cr_passed__ = !!(Condition); \
118 char *cr_msg__ = NULL; \
119 int cr_shifted__ = 0; \
121 if (!cr_passed__ || criterion_options.full_stats) { \
122 CR_EXPAND(CR_INIT_STATS_(cr_msg__, cr_shifted__, \
123 CR_VA_TAIL(__VA_ARGS__))); \
124 struct criterion_assert_stats cr_stat__; \
125 cr_stat__.passed = cr_passed__; \
126 cr_stat__.file = __FILE__; \
127 cr_stat__.line = __LINE__; \
128 cr_stat__.message = cr_msg__; \
129 criterion_send_assert(&cr_stat__); \
131 cr_asprintf_free(cr_msg__ - cr_shifted__); \
136 cri_asserts_passed_incr(); \
139#define cr_fail(Fail, ...) \
140 CR_EXPAND(cr_assert_impl( \
144 CRITERION_ASSERT_MSG_FAIL, \
149#define cr_skip(...) \
150 criterion_skip_test("" __VA_ARGS__)
152#define cr_assert_(...) \
153 CR_EXPAND(cr_assert_impl( \
155 CR_VA_HEAD(__VA_ARGS__), \
157 CRITERION_ASSERT_MSG_EXPR_FALSE, \
158 (CR_STR(CR_VA_HEAD(__VA_ARGS__))), \
159 CR_VA_TAIL(__VA_ARGS__) \
162#define cr_expect_(...) \
163 CR_EXPAND(cr_assert_impl( \
164 CR_FAIL_CONTINUES_, \
165 CR_VA_HEAD(__VA_ARGS__), \
167 CRITERION_ASSERT_MSG_EXPR_FALSE, \
168 (CR_STR(CR_VA_HEAD(__VA_ARGS__))), \
169 CR_VA_TAIL(__VA_ARGS__) \
172#define cr_assert_not_(...) \
173 CR_EXPAND(cr_assert_impl( \
175 !(CR_VA_HEAD(__VA_ARGS__)), \
177 CRITERION_ASSERT_MSG_EXPR_FALSE, \
178 (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \
179 CR_VA_TAIL(__VA_ARGS__) \
182#define cr_expect_not_(...) \
183 CR_EXPAND(cr_assert_impl( \
184 CR_FAIL_CONTINUES_, \
185 !(CR_VA_HEAD(__VA_ARGS__)), \
187 CRITERION_ASSERT_MSG_EXPR_FALSE, \
188 (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \
189 CR_VA_TAIL(__VA_ARGS__) \
194#define cr_assert_op_(Fail, Op, Actual, Expected, ...) \
195 CR_EXPAND(cr_assert_impl( \
197 (Actual) Op (Expected), \
199 CRITERION_ASSERT_MSG_EXPR_FALSE, \
200 (CR_STR((Actual) Op (Expected))), \
204#define cr_assert_op_va_(Fail, Op, ...) \
205 CR_EXPAND(cr_assert_op_( \
208 CR_VA_HEAD(__VA_ARGS__), \
209 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
210 CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \
215#define cr_assert_null_op_(Fail, Op, Msg, Value, ...) \
216 CR_EXPAND(cr_assert_impl( \
225#define cr_assert_null_op_va_(Fail, Op, Msg, ...) \
226 CR_EXPAND(cr_assert_null_op_( \
230 CR_VA_HEAD(__VA_ARGS__), \
231 CR_VA_TAIL(__VA_ARGS__) \
236#define cr_assert_float_eq_op_(Actual, Expected, Epsilon) \
237 (Expected) - (Actual) <= (Epsilon) && (Actual) - (Expected) <= (Epsilon)
239#define cr_assert_float_neq_op_(Actual, Expected, Epsilon) \
240 (Expected) - (Actual) > (Epsilon) || (Actual) - (Expected) > (Epsilon)
242#define cr_assert_float_op_(Fail, Op, Actual, Expected, Epsilon, ...) \
243 CR_EXPAND(cr_assert_impl( \
245 Op (Actual, Expected, Epsilon), \
247 CRITERION_ASSERT_MSG_EXPR_FALSE, \
248 (CR_STR(Op (Actual, Expected, Epsilon))), \
252#define cr_assert_float_op_va_(Fail, Op, ...) \
253 CR_EXPAND(cr_assert_float_op_( \
256 CR_VA_HEAD(__VA_ARGS__), \
257 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
258 CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \
259 CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \
264#define cr_assert_str_op_empty_(Fail, Op, Msg, Value, ...) \
266 const char *cr_str_value__ = (Value); \
267 CR_EXPAND(cr_assert_impl( \
269 ((cr_str_value__) != NULL) && (cr_str_value__)[0] Op '\0', \
271 ((cr_str_value__) != NULL) ? Msg : CRITERION_ASSERT_MSG_IS_NULL, \
272 (CR_STR(Value), cr_str_value__), \
277#define cr_assert_str_op_empty_va_(Fail, Op, Msg, ...) \
278 CR_EXPAND(cr_assert_str_op_empty_( \
282 CR_VA_HEAD(__VA_ARGS__), \
283 CR_VA_TAIL(__VA_ARGS__) \
286#define cr_assert_str_op_(Fail, Op, Actual, Expected, ...) \
288 const char *cr_str_actual__ = (Actual); \
289 const char *cr_str_expected__ = (Expected); \
290 CR_EXPAND(cr_assert_impl( \
292 ((cr_str_actual__) != NULL) && ((cr_str_expected__) != NULL) \
293 && CR_STDN strcmp((cr_str_actual__), (cr_str_expected__)) Op 0, \
295 CRITERION_ASSERT_MSG_EXPR_AS_STRINGS_FALSE, \
296 (CR_STR((Actual) Op (Expected)), cr_str_actual__, cr_str_expected__), \
301#define cr_assert_str_op_va_(Fail, Op, ...) \
302 CR_EXPAND(cr_assert_str_op_( \
305 CR_VA_HEAD(__VA_ARGS__), \
306 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
307 CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \
312#define cr_assert_wcs_op_empty_(Fail, Op, Msg, Value, ...) \
314 const wchar_t *cr_wcs_value__ = (Value); \
315 CR_EXPAND(cr_assert_impl( \
317 ((cr_wcs_value__) != NULL) && (cr_wcs_value__)[0] Op L'\0', \
319 ((cr_wcs_value__) != NULL) ? Msg : CRITERION_ASSERT_MSG_IS_NULL, \
320 (CR_STR(Value), cr_wcs_value__), \
325#define cr_assert_wcs_op_empty_va_(Fail, Op, Msg, ...) \
326 CR_EXPAND(cr_assert_wcs_op_empty_( \
330 CR_VA_HEAD(__VA_ARGS__), \
331 CR_VA_TAIL(__VA_ARGS__) \
334#define cr_assert_wcs_op_(Fail, Op, Actual, Expected, ...) \
336 const wchar_t *cr_wcs_actual__ = (Actual); \
337 const wchar_t *cr_wcs_expected__ = (Expected); \
338 CR_EXPAND(cr_assert_impl( \
340 ((cr_wcs_actual__) != NULL) && ((cr_wcs_expected__) != NULL) \
341 && CR_STDN wcscmp((cr_wcs_actual__), (cr_wcs_expected__)) Op 0, \
343 CRITERION_ASSERT_MSG_EXPR_FALSE, \
344 (CR_STR((Actual) Op (Expected))), \
349#define cr_assert_wcs_op_va_(Fail, Op, ...) \
350 CR_EXPAND(cr_assert_wcs_op_( \
353 CR_VA_HEAD(__VA_ARGS__), \
354 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
355 CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \
360#define cr_assert_mem_op_(Fail, Op, Actual, Expected, Size, ...) \
361 CR_EXPAND(cr_assert_impl( \
363 CR_STDN memcmp((Actual), (Expected), (Size)) Op 0, \
365 CRITERION_ASSERT_MSG_EXPR_FALSE, \
366 (CR_STR((Actual)[0..Size] Op (Expected)[0..Size])), \
370#define cr_assert_mem_op_va_(Fail, Op, ...) \
371 CR_EXPAND(cr_assert_mem_op_( \
374 CR_VA_HEAD(__VA_ARGS__), \
375 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
376 CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \
377 CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \
383# define CR_ARR_COMPARE_(A, B, Size, Cmp, Result) \
384 int Result = std::lexicographical_compare((A), (A) + Size, (B), (B) + Size, Cmp)
386# define CR_ARR_COMPARE_(A, B, Size, Cmp, Result) \
387 __typeof__ (&(A)[0])first = (A); \
388 __typeof__ (&(B)[0])second = (B); \
391 for (i = 0, size = (Size); !Result && i < size; ++i) \
392 Result = Cmp(first + i, second + i)
395#define cr_assert_arr_op_cmp_(Fail, Op, Actual, Expected, Size, Cmp, ...) \
397 CR_ARR_COMPARE_(Actual, Expected, Size, Cmp, order); \
398 CR_EXPAND(cr_assert_impl( \
402 CRITERION_ASSERT_MSG_EXPR_FALSE, \
403 (CR_STR((Actual)[0..Size] Op (Expected)[0..Size])), \
408#define cr_assert_arr_op_cmp_va_(Fail, Op, ...) \
409 CR_EXPAND(cr_assert_arr_op_cmp_( \
412 CR_VA_HEAD(__VA_ARGS__), \
413 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
414 CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \
415 CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)))), \
416 CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)))) \
421#define cr_assert_throw_abort_(Fail, Msg, MsgArgs, ...) \
422 CR_EXPAND(cr_assert_impl( \
428 CR_VA_TAIL(__VA_ARGS__) \
431#define cr_assert_throw_(Fail, Statement, Exception, ...) \
434 CR_EXPAND(cr_assert_throw_abort_( \
436 CRITERION_ASSERT_MSG_NO_THROW, \
437 (CR_STR(Statement), CR_STR(Exception)), \
439 } catch (Exception const &) { \
442 CR_EXPAND(cr_assert_throw_abort_( \
444 CRITERION_ASSERT_MSG_NO_THROW, \
445 (CR_STR(Statement), CR_STR(Exception)), \
449#define cr_assert_throw_va_(...) \
450 CR_EXPAND(cr_assert_throw_( \
451 CR_VA_HEAD(__VA_ARGS__), \
452 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
453 CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \
455 CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \
458#define cr_assert_no_throw_(Fail, Statement, Exception, ...) \
461 } catch (Exception const &) { \
462 CR_EXPAND(cr_assert_throw_abort_( \
464 CRITERION_ASSERT_MSG_THROW, \
465 (CR_STR(Statement), CR_STR(Exception)), \
469#define cr_assert_no_throw_va_(...) \
470 CR_EXPAND(cr_assert_no_throw_( \
471 CR_VA_HEAD(__VA_ARGS__), \
472 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
473 CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \
475 CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \
478#define cr_assert_any_throw_(Fail, Statement, ...) \
481 CR_EXPAND(cr_assert_throw_abort_( \
483 CRITERION_ASSERT_MSG_ANY_THROW, \
484 (CR_STR(Statement)), \
488#define cr_assert_any_throw_va_(...) \
489 CR_EXPAND(cr_assert_any_throw_( \
490 CR_VA_HEAD(__VA_ARGS__), \
491 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
493 CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \
496#define cr_assert_none_throw_(Fail, Statement, ...) \
500 CR_EXPAND(cr_assert_throw_abort_( \
502 CRITERION_ASSERT_MSG_NONE_THROW, \
503 (CR_STR(Statement)), \
507#define cr_assert_none_throw_va_(...) \
508 CR_EXPAND(cr_assert_none_throw_( \
509 CR_VA_HEAD(__VA_ARGS__), \
510 CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \
512 CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \
517#define CRITERION_GNUC_WARN__(Msg) \
520#define CRITERION_GNUC_WARN_(Name) \
521 CRITERION_GNUC_WARN__( \
523 "The `" #Name "` macro is only available on GNU C compilers." \
529#define cr_skip_test(...) CR_EXPAND(cr_skip(__VA_ARGS__))
531#define cr_assert_fail(...) CR_EXPAND(cr_fail(CR_FAIL_ABORT_, __VA_ARGS__))
533#define cr_expect_fail(...) CR_EXPAND(cr_fail(CR_FAIL_CONTINUES_, __VA_ARGS__))
535#define cr_assert(...) CR_EXPAND(cr_assert_(__VA_ARGS__))
537#define cr_expect(...) CR_EXPAND(cr_expect_(__VA_ARGS__))
539#define cr_assert_not(...) CR_EXPAND(cr_assert_not_(__VA_ARGS__))
541#define cr_expect_not(...) CR_EXPAND(cr_expect_not_(__VA_ARGS__))
543#define cr_assert_eq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__))
545#define cr_expect_eq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__))
547#define cr_assert_neq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__))
549#define cr_expect_neq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__))
551#define cr_assert_lt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, <, __VA_ARGS__))
553#define cr_expect_lt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, <, __VA_ARGS__))
555#define cr_assert_leq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, <=, __VA_ARGS__))
557#define cr_expect_leq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, <=, __VA_ARGS__))
559#define cr_assert_gt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, >, __VA_ARGS__))
561#define cr_expect_gt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, >, __VA_ARGS__))
563#define cr_assert_geq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, >=, __VA_ARGS__))
565#define cr_expect_geq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, >=, __VA_ARGS__))
567#define cr_assert_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_NULL, __VA_ARGS__))
569#define cr_expect_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_NULL, __VA_ARGS__))
570#undef cr_assert_not_null
571#define cr_assert_not_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_ABORT_, !=, CRITERION_ASSERT_MSG_IS_NULL, __VA_ARGS__))
572#undef cr_expect_not_null
573#define cr_expect_not_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_CONTINUES_, !=, CRITERION_ASSERT_MSG_IS_NULL, __VA_ARGS__))
574#undef cr_assert_float_eq
575#define cr_assert_float_eq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_ABORT_, cr_assert_float_eq_op_, __VA_ARGS__))
576#undef cr_expect_float_eq
577#define cr_expect_float_eq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_CONTINUES_, cr_assert_float_eq_op_, __VA_ARGS__))
578#undef cr_assert_float_neq
579#define cr_assert_float_neq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_ABORT_, cr_assert_float_neq_op_, __VA_ARGS__))
580#undef cr_expect_float_neq
581#define cr_expect_float_neq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_CONTINUES_, cr_assert_float_neq_op_, __VA_ARGS__))
582#undef cr_assert_str_empty
583#define cr_assert_str_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__))
584#undef cr_expect_str_empty
585#define cr_expect_str_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__))
586#undef cr_assert_str_not_empty
587#define cr_assert_str_not_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_ABORT_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__))
588#undef cr_expect_str_not_empty
589#define cr_expect_str_not_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_CONTINUES_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__))
590#undef cr_assert_str_eq
591#define cr_assert_str_eq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__))
592#undef cr_expect_str_eq
593#define cr_expect_str_eq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__))
594#undef cr_assert_str_neq
595#define cr_assert_str_neq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__))
596#undef cr_expect_str_neq
597#define cr_expect_str_neq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__))
598#undef cr_assert_str_lt
599#define cr_assert_str_lt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, <, __VA_ARGS__))
600#undef cr_expect_str_lt
601#define cr_expect_str_lt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, <, __VA_ARGS__))
602#undef cr_assert_str_leq
603#define cr_assert_str_leq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, <=, __VA_ARGS__))
604#undef cr_expect_str_leq
605#define cr_expect_str_leq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, <=, __VA_ARGS__))
606#undef cr_assert_str_gt
607#define cr_assert_str_gt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, >, __VA_ARGS__))
608#undef cr_expect_str_gt
609#define cr_expect_str_gt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, >, __VA_ARGS__))
610#undef cr_assert_str_geq
611#define cr_assert_str_geq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, >=, __VA_ARGS__))
612#undef cr_expect_str_geq
613#define cr_expect_str_geq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, >=, __VA_ARGS__))
614#undef cr_assert_wcs_empty
615#define cr_assert_wcs_empty(...) CR_EXPAND(cr_assert_wcs_op_empty_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__))
616#undef cr_expect_wcs_empty
617#define cr_expect_wcs_empty(...) CR_EXPAND(cr_assert_wcs_op_empty_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__))
618#undef cr_assert_wcs_not_empty
619#define cr_assert_wcs_not_empty(...) CR_EXPAND(cr_assert_wcs_op_empty_va_(CR_FAIL_ABORT_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__))
620#undef cr_expect_wcs_not_empty
621#define cr_expect_wcs_not_empty(...) CR_EXPAND(cr_assert_wcs_op_empty_va_(CR_FAIL_CONTINUES_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__))
622#undef cr_assert_wcs_eq
623#define cr_assert_wcs_eq(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__))
624#undef cr_expect_wcs_eq
625#define cr_expect_wcs_eq(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__))
626#undef cr_assert_wcs_neq
627#define cr_assert_wcs_neq(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__))
628#undef cr_expect_wcs_neq
629#define cr_expect_wcs_neq(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__))
630#undef cr_assert_wcs_lt
631#define cr_assert_wcs_lt(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_ABORT_, <, __VA_ARGS__))
632#undef cr_expect_wcs_lt
633#define cr_expect_wcs_lt(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_CONTINUES_, <, __VA_ARGS__))
634#undef cr_assert_wcs_leq
635#define cr_assert_wcs_leq(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_ABORT_, <=, __VA_ARGS__))
636#undef cr_expect_wcs_leq
637#define cr_expect_wcs_leq(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_CONTINUES_, <=, __VA_ARGS__))
638#undef cr_assert_wcs_gt
639#define cr_assert_wcs_gt(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_ABORT_, >, __VA_ARGS__))
640#undef cr_expect_wcs_gt
641#define cr_expect_wcs_gt(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_CONTINUES_, >, __VA_ARGS__))
642#undef cr_assert_wcs_geq
643#define cr_assert_wcs_geq(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_ABORT_, >=, __VA_ARGS__))
644#undef cr_expect_wcs_geq
645#define cr_expect_wcs_geq(...) CR_EXPAND(cr_assert_wcs_op_va_(CR_FAIL_CONTINUES_, >=, __VA_ARGS__))
646#undef cr_assert_arr_eq
647#define cr_assert_arr_eq(...) CR_EXPAND(cr_assert_mem_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__))
648#undef cr_expect_arr_eq
649#define cr_expect_arr_eq(...) CR_EXPAND(cr_assert_mem_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__))
650#undef cr_assert_arr_neq
651#define cr_assert_arr_neq(...) CR_EXPAND(cr_assert_mem_op_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__))
652#undef cr_expect_arr_neq
653#define cr_expect_arr_neq(...) CR_EXPAND(cr_assert_mem_op_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__))
655#if defined (__GNUC__) || defined (__clang__) || defined (__cplusplus)
657# undef cr_assert_arr_eq_cmp
658# define cr_assert_arr_eq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__))
659# undef cr_expect_arr_eq_cmp
660# define cr_expect_arr_eq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__))
661# undef cr_assert_arr_neq_cmp
662# define cr_assert_arr_neq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__))
663# undef cr_expect_arr_neq_cmp
664# define cr_expect_arr_neq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__))
665# undef cr_assert_arr_lt_cmp
666# define cr_assert_arr_lt_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_ABORT_, <, __VA_ARGS__))
667# undef cr_expect_arr_lt_cmp
668# define cr_expect_arr_lt_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_CONTINUES_, <, __VA_ARGS__))
669# undef cr_assert_arr_leq_cmp
670# define cr_assert_arr_leq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_ABORT_, <=, __VA_ARGS__))
671# undef cr_expect_arr_leq_cmp
672# define cr_expect_arr_leq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_CONTINUES_, <=, __VA_ARGS__))
673# undef cr_assert_arr_gt_cmp
674# define cr_assert_arr_gt_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_ABORT_, >, __VA_ARGS__))
675# undef cr_expect_arr_gt_cmp
676# define cr_expect_arr_gt_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_CONTINUES_, >, __VA_ARGS__))
677# undef cr_assert_arr_geq_cmp
678# define cr_assert_arr_geq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_ABORT_, >=, __VA_ARGS__))
679# undef cr_expect_arr_geq_cmp
680# define cr_expect_arr_geq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_CONTINUES_, >=, __VA_ARGS__))
684# undef cr_assert_arr_eq_cmp
685# define cr_assert_arr_eq_cmp(...) CRITERION_GNUC_WARN_(cr_assert_arr_eq_cmp) CR_NOOP
686# undef cr_expect_arr_eq_cmp
687# define cr_expect_arr_eq_cmp(...) CRITERION_GNUC_WARN_(cr_expect_arr_eq_cmp) CR_NOOP
688# undef cr_assert_arr_neq_cmp
689# define cr_assert_arr_neq_cmp(...) CRITERION_GNUC_WARN_(cr_assert_arr_neq_cmp) CR_NOOP
690# undef cr_expect_arr_neq_cmp
691# define cr_expect_arr_neq_cmp(...) CRITERION_GNUC_WARN_(cr_expect_arr_neq_cmp) CR_NOOP
692# undef cr_assert_arr_lt_cmp
693# define cr_assert_arr_lt_cmp(...) CRITERION_GNUC_WARN_(cr_assert_arr_lt_cmp) CR_NOOP
694# undef cr_expect_arr_lt_cmp
695# define cr_expect_arr_lt_cmp(...) CRITERION_GNUC_WARN_(cr_expect_arr_lt_cmp) CR_NOOP
696# undef cr_assert_arr_leq_cmp
697# define cr_assert_arr_leq_cmp(...) CRITERION_GNUC_WARN_(cr_assert_arr_leq_cmp) CR_NOOP
698# undef cr_expect_arr_leq_cmp
699# define cr_expect_arr_leq_cmp(...) CRITERION_GNUC_WARN_(cr_expect_arr_leq_cmp) CR_NOOP
700# undef cr_assert_arr_gt_cmp
701# define cr_assert_arr_gt_cmp(...) CRITERION_GNUC_WARN_(cr_assert_arr_gt_cmp) CR_NOOP
702# undef cr_expect_arr_gt_cmp
703# define cr_expect_arr_gt_cmp(...) CRITERION_GNUC_WARN_(cr_expect_arr_gt_cmp) CR_NOOP
704# undef cr_assert_arr_geq_cmp
705# define cr_assert_arr_geq_cmp(...) CRITERION_GNUC_WARN_(cr_assert_arr_geq_cmp) CR_NOOP
706# undef cr_expect_arr_geq_cmp
707# define cr_expect_arr_geq_cmp(...) CRITERION_GNUC_WARN_(cr_expect_arr_geq_cmp) CR_NOOP
711#undef cr_assert_throw
712#define cr_assert_throw(...) CR_EXPAND(cr_assert_throw_va_(CR_FAIL_ABORT_, __VA_ARGS__))
713#undef cr_expect_throw
714#define cr_expect_throw(...) CR_EXPAND(cr_assert_throw_va_(CR_FAIL_CONTINUES_, __VA_ARGS__))
715#undef cr_assert_no_throw
716#define cr_assert_no_throw(...) CR_EXPAND(cr_assert_no_throw_va_(CR_FAIL_ABORT_, __VA_ARGS__))
717#undef cr_expect_no_throw
718#define cr_expect_no_throw(...) CR_EXPAND(cr_assert_no_throw_va_(CR_FAIL_CONTINUES_, __VA_ARGS__))
719#undef cr_assert_any_throw
720#define cr_assert_any_throw(...) CR_EXPAND(cr_assert_any_throw_va_(CR_FAIL_ABORT_, __VA_ARGS__))
721#undef cr_expect_any_throw
722#define cr_expect_any_throw(...) CR_EXPAND(cr_assert_any_throw_va_(CR_FAIL_CONTINUES_, __VA_ARGS__))
723#undef cr_assert_none_throw
724#define cr_assert_none_throw(...) CR_EXPAND(cr_assert_none_throw_va_(CR_FAIL_ABORT_, __VA_ARGS__))
725#undef cr_expect_none_throw
726#define cr_expect_none_throw(...) CR_EXPAND(cr_assert_none_throw_va_(CR_FAIL_CONTINUES_, __VA_ARGS__))
Functions to abort and continue tests.
CR_API void cri_asserts_passed_incr(void)
criterion_assert_messages
@ CRITERION_ASSERT_MSG_NONE_THROW
@ CRITERION_ASSERT_MSG_THROW
@ CRITERION_ASSERT_MSG_FAIL
@ CRITERION_ASSERT_MSG_FILE_MATCH
@ CRITERION_ASSERT_MSG_FILE_STR_MATCH
@ CRITERION_ASSERT_MSG_EXPR_FALSE
@ CRITERION_ASSERT_MSG_IS_NULL
@ CRITERION_ASSERT_MSG_IS_NOT_EMPTY
@ CRITERION_ASSERT_MSG_ANY_THROW
@ CRITERION_ASSERT_MSG_EXPR_AS_STRINGS_FALSE
@ CRITERION_ASSERT_MSG_NO_THROW
@ CRITERION_ASSERT_MSG_IS_NOT_NULL
@ CRITERION_ASSERT_MSG_IS_EMPTY
CR_BEGIN_C_API CR_API char * cr_translate_assert_msg(int msg_index,...)