77#ifndef __CLAR_TEST_H__
88#define __CLAR_TEST_H__
99
10+ #include <inttypes.h>
1011#include <stdlib.h>
1112#include <limits.h>
1213
@@ -149,6 +150,7 @@ const char *cl_fixture_basename(const char *fixture_name);
149150 * Forced failure/warning
150151 */
151152#define cl_fail (desc ) clar__fail(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, "Test failed.", desc, 1)
153+ #define cl_failf (desc ,...) clar__failf(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, 1, "Test failed.", desc, __VA_ARGS__)
152154#define cl_warning (desc ) clar__fail(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, "Warning during test execution:", desc, 0)
153155
154156#define cl_skip () clar__skip()
@@ -168,9 +170,34 @@ const char *cl_fixture_basename(const char *fixture_name);
168170#define cl_assert_equal_wcsn (wcs1 ,wcs2 ,len ) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,"String mismatch: " #wcs1 " != " #wcs2, 1, "%.*ls", (wcs1), (wcs2), (int)(len))
169171#define cl_assert_equal_wcsn_ (wcs1 ,wcs2 ,len ,note ) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%.*ls", (wcs1), (wcs2), (int)(len))
170172
171- #define cl_assert_equal_i (i1 ,i2 ) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,#i1 " != " #i2, 1, "%d", (int)(i1), (int)(i2))
172- #define cl_assert_equal_i_ (i1 ,i2 ,note ) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,#i1 " != " #i2 " (" #note ")", 1, "%d", (i1), (i2))
173- #define cl_assert_equal_i_fmt (i1 ,i2 ,fmt ) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,#i1 " != " #i2, 1, (fmt), (int)(i1), (int)(i2))
173+ /* The following three macros are essentially deprecated now in favor of the macros in subsequent blocks. */
174+ #define cl_assert_equal_i (i1 ,i2 ) cl_assert_compare_i(i1,i2,CLAR_COMPARISON_EQ,#i1 " != " #i2,"%"PRIdMAX " != %"PRIdMAX,(intmax_t)(i1),(intmax_t)(i2))
175+ #define cl_assert_equal_i_ (i1 ,i2 ,note ) cl_assert_compare_i(i1,i2,CLAR_COMPARISON_EQ,#i1 " != " #i2 " (" #note ")","%"PRIdMAX " != %"PRIdMAX,(intmax_t)(i1),(intmax_t)(i2))
176+ #define cl_assert_equal_i_fmt (i1 ,i2 ,fmt ) cl_assert_compare_i(i1,i2,CLAR_COMPARISON_EQ,#i1 " != " #i2, fmt " != " fmt, (int)(i1), (int)(i2))
177+
178+ #define cl_assert_compare_i (i1 ,i2 ,cmp ,error ,description ,...) clar__assert_compare_i(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,1,cmp,(i1),(i2),error,description,__VA_ARGS__)
179+ #define cl_assert_eq_i_ (i1 ,i2 ,description ,...) cl_assert_compare_i(i1,i2,CLAR_COMPARISON_EQ,"Expected comparison to hold: " #i1 " == " #i2,description,__VA_ARGS__)
180+ #define cl_assert_eq_i (i1 ,i2 ) cl_assert_eq_i_(i1,i2,"%"PRIdMAX " != %"PRIdMAX,(intmax_t)(i1),(intmax_t)(i2))
181+ #define cl_assert_lt_i_ (i1 ,i2 ,description ,...) cl_assert_compare_i(i1,i2,CLAR_COMPARISON_LT,"Expected comparison to hold: " #i1 " < " #i2,description,__VA_ARGS__)
182+ #define cl_assert_lt_i (i1 ,i2 ) cl_assert_lt_i_(i1,i2,"%"PRIdMAX " >= %"PRIdMAX,(intmax_t)(i1),(intmax_t)(i2))
183+ #define cl_assert_le_i_ (i1 ,i2 ,description ,...) cl_assert_compare_i(i1,i2,CLAR_COMPARISON_LE,"Expected comparison to hold: " #i1 " <= " #i2,description,__VA_ARGS__)
184+ #define cl_assert_le_i (i1 ,i2 ) cl_assert_le_i_(i1,i2,"%"PRIdMAX " > %"PRIdMAX,(intmax_t)(i1),(intmax_t)(i2))
185+ #define cl_assert_gt_i_ (i1 ,i2 ,description ,...) cl_assert_compare_i(i1,i2,CLAR_COMPARISON_GT,"Expected comparison to hold: " #i1 " > " #i2,description,__VA_ARGS__)
186+ #define cl_assert_gt_i (i1 ,i2 ) cl_assert_gt_i_(i1,i2,"%"PRIdMAX " <= %"PRIdMAX,(intmax_t)(i1),(intmax_t)(i2))
187+ #define cl_assert_ge_i_ (i1 ,i2 ,description ,...) cl_assert_compare_i(i1,i2,CLAR_COMPARISON_GE,"Expected comparison to hold: " #i1 " >= " #i2,description,__VA_ARGS__)
188+ #define cl_assert_ge_i (i1 ,i2 ) cl_assert_ge_i_(i1,i2,"%"PRIdMAX " < %"PRIdMAX,(intmax_t)(i1),(intmax_t)(i2))
189+
190+ #define cl_assert_compare_u (u1 ,u2 ,cmp ,error ,description ,...) clar__assert_compare_u(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,1,cmp,(u1),(u2),error,description,__VA_ARGS__)
191+ #define cl_assert_eq_u_ (u1 ,u2 ,description ,...) cl_assert_compare_u(u1,u2,CLAR_COMPARISON_EQ,"Expected comparison to hold: " #u1 " == " #u2,description,__VA_ARGS__)
192+ #define cl_assert_eq_u (u1 ,u2 ) cl_assert_eq_u_(u1,u2,"%"PRIuMAX " != %"PRIuMAX,(uintmax_t)(u1),(uintmax_t)(u2))
193+ #define cl_assert_lt_u_ (u1 ,u2 ,description ,...) cl_assert_compare_u(u1,u2,CLAR_COMPARISON_LT,"Expected comparison to hold: " #u1 " < " #u2,description,__VA_ARGS__)
194+ #define cl_assert_lt_u (u1 ,u2 ) cl_assert_lt_u_(u1,u2,"%"PRIuMAX " >= %"PRIuMAX,(uintmax_t)(u1),(uintmax_t)(u2))
195+ #define cl_assert_le_u_ (u1 ,u2 ,description ,...) cl_assert_compare_u(u1,u2,CLAR_COMPARISON_LE,"Expected comparison to hold: " #u1 " <= " #u2,description,__VA_ARGS__)
196+ #define cl_assert_le_u (u1 ,u2 ) cl_assert_le_u_(u1,u2,"%"PRIuMAX " > %"PRIuMAX,(uintmax_t)(u1),(uintmax_t)(u2))
197+ #define cl_assert_gt_u_ (u1 ,u2 ,description ,...) cl_assert_compare_u(u1,u2,CLAR_COMPARISON_GT,"Expected comparison to hold: " #u1 " > " #u2,description,__VA_ARGS__)
198+ #define cl_assert_gt_u (u1 ,u2 ) cl_assert_gt_u_(u1,u2,"%"PRIuMAX " <= %"PRIuMAX,(uintmax_t)(u1),(uintmax_t)(u2))
199+ #define cl_assert_ge_u_ (u1 ,u2 ,description ,...) cl_assert_compare_u(u1,u2,CLAR_COMPARISON_GE,"Expected comparison to hold: " #u1 " >= " #u2,description,__VA_ARGS__)
200+ #define cl_assert_ge_u (u1 ,u2 ) cl_assert_ge_u_(u1,u2,"%"PRIuMAX " < %"PRIuMAX,(uintmax_t)(u1),(uintmax_t)(u2))
174201
175202#define cl_assert_equal_b (b1 ,b2 ) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,#b1 " != " #b2, 1, "%d", (int)((b1) != 0),(int)((b2) != 0))
176203
@@ -186,6 +213,15 @@ void clar__fail(
186213 const char * description ,
187214 int should_abort );
188215
216+ void clar__failf (
217+ const char * file ,
218+ const char * func ,
219+ size_t line ,
220+ int should_abort ,
221+ const char * error ,
222+ const char * description ,
223+ ...);
224+
189225void clar__assert (
190226 int condition ,
191227 const char * file ,
@@ -204,6 +240,38 @@ void clar__assert_equal(
204240 const char * fmt ,
205241 ...);
206242
243+ enum clar_comparison {
244+ CLAR_COMPARISON_EQ ,
245+ CLAR_COMPARISON_LT ,
246+ CLAR_COMPARISON_LE ,
247+ CLAR_COMPARISON_GT ,
248+ CLAR_COMPARISON_GE ,
249+ };
250+
251+ void clar__assert_compare_i (
252+ const char * file ,
253+ const char * func ,
254+ size_t line ,
255+ int should_abort ,
256+ enum clar_comparison cmp ,
257+ intmax_t value1 ,
258+ intmax_t value2 ,
259+ const char * error ,
260+ const char * description ,
261+ ...);
262+
263+ void clar__assert_compare_u (
264+ const char * file ,
265+ const char * func ,
266+ size_t line ,
267+ int should_abort ,
268+ enum clar_comparison cmp ,
269+ uintmax_t value1 ,
270+ uintmax_t value2 ,
271+ const char * error ,
272+ const char * description ,
273+ ...);
274+
207275void clar__set_invokepoint (
208276 const char * file ,
209277 const char * func ,
0 commit comments