Improvements to tinytest_macros.h

First, handle cases where we have %s in a tt_want or tt_assert.

Second, add tt_want_*_op that do a tt_*_op test, but do not exit the
test on failure.

We should push these upstream to tinytest some time.
This commit is contained in:
Nick Mathewson 2010-10-19 12:33:50 -04:00
parent eaa5f1d9ed
commit ad923a11f1

View File

@ -90,10 +90,10 @@
TT_STMT_BEGIN \ TT_STMT_BEGIN \
if (!(b)) { \ if (!(b)) { \
_tinytest_set_test_failed(); \ _tinytest_set_test_failed(); \
TT_GRIPE((msg)); \ TT_GRIPE(("%s",msg)); \
fail; \ fail; \
} else { \ } else { \
TT_BLATHER((msg)); \ TT_BLATHER(("%s",msg)); \
} \ } \
TT_STMT_END TT_STMT_END
@ -111,7 +111,7 @@
#define tt_assert(b) tt_assert_msg((b), "assert("#b")") #define tt_assert(b) tt_assert_msg((b), "assert("#b")")
#define tt_assert_test_fmt_type(a,b,str_test,type,test,printf_type,printf_fmt, \ #define tt_assert_test_fmt_type(a,b,str_test,type,test,printf_type,printf_fmt, \
setup_block,cleanup_block) \ setup_block,cleanup_block,die_on_fail) \
TT_STMT_BEGIN \ TT_STMT_BEGIN \
type _val1 = (type)(a); \ type _val1 = (type)(a); \
type _val2 = (type)(b); \ type _val2 = (type)(b); \
@ -135,33 +135,50 @@
cleanup_block; \ cleanup_block; \
if (!_tt_status) { \ if (!_tt_status) { \
_tinytest_set_test_failed(); \ _tinytest_set_test_failed(); \
TT_EXIT_TEST_FUNCTION; \ die_on_fail ; \
} \ } \
} \ } \
TT_STMT_END TT_STMT_END
#define tt_assert_test_type(a,b,str_test,type,test,fmt) \ #define tt_assert_test_type(a,b,str_test,type,test,fmt,die_on_fail) \
tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \ tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \
{_print=_value;},{}) {_print=_value;},{},die_on_fail)
/* Helper: assert that a op b, when cast to type. Format the values with /* Helper: assert that a op b, when cast to type. Format the values with
* printf format fmt on failure. */ * printf format fmt on failure. */
#define tt_assert_op_type(a,op,b,type,fmt) \ #define tt_assert_op_type(a,op,b,type,fmt) \
tt_assert_test_type(a,b,#a" "#op" "#b,type,(_val1 op _val2),fmt) tt_assert_test_type(a,b,#a" "#op" "#b,type,(_val1 op _val2),fmt, \
TT_EXIT_TEST_FUNCTION)
#define tt_int_op(a,op,b) \ #define tt_int_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,long,(_val1 op _val2),"%ld") tt_assert_test_type(a,b,#a" "#op" "#b,long,(_val1 op _val2), \
"%ld",TT_EXIT_TEST_FUNCTION)
#define tt_uint_op(a,op,b) \ #define tt_uint_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,unsigned long, \ tt_assert_test_type(a,b,#a" "#op" "#b,unsigned long, \
(_val1 op _val2),"%lu") (_val1 op _val2),"%lu",TT_EXIT_TEST_FUNCTION)
#define tt_ptr_op(a,op,b) \ #define tt_ptr_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,void*, \ tt_assert_test_type(a,b,#a" "#op" "#b,void*, \
(_val1 op _val2),"%p") (_val1 op _val2),"%p",TT_EXIT_TEST_FUNCTION)
#define tt_str_op(a,op,b) \ #define tt_str_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,const char *, \ tt_assert_test_type(a,b,#a" "#op" "#b,const char *, \
(strcmp(_val1,_val2) op 0),"<%s>") (strcmp(_val1,_val2) op 0),"<%s>",TT_EXIT_TEST_FUNCTION)
#define tt_want_int_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,long,(_val1 op _val2),"%ld",(void)0)
#define tt_want_uint_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,unsigned long, \
(_val1 op _val2),"%lu",(void)0)
#define tt_want_ptr_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,void*, \
(_val1 op _val2),"%p",(void)0)
#define tt_want_str_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,const char *, \
(strcmp(_val1,_val2) op 0),"<%s>",(void)0)
#endif #endif