Loading test/README +13 −1 Original line number Diff line number Diff line Loading @@ -134,4 +134,16 @@ conditions. These macros produce an error message in a standard format if the condition is not met (and nothing if the condition is met). Additional information can be presented with the TEST_info macro that takes a printf format string and arguments. TEST_error is useful for complicated conditions, it also takes a printf format string and argument. it also takes a printf format string and argument. In all cases the TEST_xxx macros are guaranteed to evaluate their arguments exactly once. This means that expressions with side effects are allowed as parameters. Thus, if (!TEST_ptr(ptr = OPENSSL_malloc(..))) works fine and can be used in place of: ptr = OPENSSL_malloc(..); if (!TEST_ptr(ptr)) The former produces a more meaningful message on failure than the latter. test/test_test.c +56 −0 Original line number Diff line number Diff line Loading @@ -259,6 +259,61 @@ static int test_messages(void) return 1; } static int test_single_eval(void) { int i = 4; long l = -9000; char c = 'd'; unsigned char uc = 22; unsigned long ul = 500; size_t st = 1234; char buf[4] = { 0 }, *p = buf; /* int */ return TEST_int_eq(i++, 4) && TEST_int_eq(i, 5) && TEST_int_gt(++i, 5) && TEST_int_le(5, i++) && TEST_int_ne(--i, 5) && TEST_int_eq(12, i *= 2) /* Long */ && TEST_long_eq(l--, -9000L) && TEST_long_eq(++l, -9000L) && TEST_long_ne(-9000L, l /= 2) && TEST_long_lt(--l, -4500L) /* char */ && TEST_char_eq(++c, 'e') && TEST_char_eq('e', c--) && TEST_char_ne('d', --c) && TEST_char_le('b', --c) && TEST_char_lt(c++, 'c') /* unsigned char */ && TEST_uchar_eq(22, uc++) && TEST_uchar_eq(uc /= 2, 11) && TEST_ulong_eq(ul ^= 1, 501) && TEST_ulong_eq(502, ul ^= 3) && TEST_ulong_eq(ul = ul * 3 - 6, 1500) /* size_t */ && TEST_size_t_eq((--i, st++), 1234) && TEST_size_t_eq(st, 1235) && TEST_int_eq(11, i) /* pointers */ && TEST_ptr_eq(p++, buf) && TEST_ptr_eq(buf + 2, ++p) && TEST_ptr_eq(buf, p -= 2) && TEST_ptr(++p) && TEST_ptr_eq(p, buf + 1) && TEST_ptr_null(p = NULL) /* strings */ && TEST_str_eq(p = "123456" + 1, "23456") && TEST_str_eq("3456", ++p) && TEST_str_ne(p++, "456") /* memory */ && TEST_mem_eq(--p, sizeof("3456"), "3456", sizeof("3456")) && TEST_mem_ne(p++, sizeof("456"), "456", sizeof("456")) && TEST_mem_eq(p--, sizeof("456"), "456", sizeof("456")); } void register_tests(void) { ADD_TEST(test_int); Loading @@ -273,4 +328,5 @@ void register_tests(void) ADD_TEST(test_string); ADD_TEST(test_memory); ADD_TEST(test_messages); ADD_TEST(test_single_eval); } test/testutil.h +48 −42 Original line number Diff line number Diff line Loading @@ -223,6 +223,12 @@ void test_info_c90(const char *desc, ...) PRINTF_FORMAT(1, 2); /* * The following macros provide wrapper calls to the test functions with * a default description that indicates the file and line number of the error. * * The following macros guarantee to evaluate each argument exactly once. * This allows constructs such as: if(!TEST_ptr(ptr = OPENSSL_malloc(..))) * to produce better contextual output than: * ptr = OPENSSL_malloc(..); * if (!TEST_ptr(ptr)) */ # define TEST_int_eq(a, b) test_int_eq(__FILE__, __LINE__, #a, #b, a, b) # define TEST_int_ne(a, b) test_int_ne(__FILE__, __LINE__, #a, #b, a, b) Loading Loading
test/README +13 −1 Original line number Diff line number Diff line Loading @@ -134,4 +134,16 @@ conditions. These macros produce an error message in a standard format if the condition is not met (and nothing if the condition is met). Additional information can be presented with the TEST_info macro that takes a printf format string and arguments. TEST_error is useful for complicated conditions, it also takes a printf format string and argument. it also takes a printf format string and argument. In all cases the TEST_xxx macros are guaranteed to evaluate their arguments exactly once. This means that expressions with side effects are allowed as parameters. Thus, if (!TEST_ptr(ptr = OPENSSL_malloc(..))) works fine and can be used in place of: ptr = OPENSSL_malloc(..); if (!TEST_ptr(ptr)) The former produces a more meaningful message on failure than the latter.
test/test_test.c +56 −0 Original line number Diff line number Diff line Loading @@ -259,6 +259,61 @@ static int test_messages(void) return 1; } static int test_single_eval(void) { int i = 4; long l = -9000; char c = 'd'; unsigned char uc = 22; unsigned long ul = 500; size_t st = 1234; char buf[4] = { 0 }, *p = buf; /* int */ return TEST_int_eq(i++, 4) && TEST_int_eq(i, 5) && TEST_int_gt(++i, 5) && TEST_int_le(5, i++) && TEST_int_ne(--i, 5) && TEST_int_eq(12, i *= 2) /* Long */ && TEST_long_eq(l--, -9000L) && TEST_long_eq(++l, -9000L) && TEST_long_ne(-9000L, l /= 2) && TEST_long_lt(--l, -4500L) /* char */ && TEST_char_eq(++c, 'e') && TEST_char_eq('e', c--) && TEST_char_ne('d', --c) && TEST_char_le('b', --c) && TEST_char_lt(c++, 'c') /* unsigned char */ && TEST_uchar_eq(22, uc++) && TEST_uchar_eq(uc /= 2, 11) && TEST_ulong_eq(ul ^= 1, 501) && TEST_ulong_eq(502, ul ^= 3) && TEST_ulong_eq(ul = ul * 3 - 6, 1500) /* size_t */ && TEST_size_t_eq((--i, st++), 1234) && TEST_size_t_eq(st, 1235) && TEST_int_eq(11, i) /* pointers */ && TEST_ptr_eq(p++, buf) && TEST_ptr_eq(buf + 2, ++p) && TEST_ptr_eq(buf, p -= 2) && TEST_ptr(++p) && TEST_ptr_eq(p, buf + 1) && TEST_ptr_null(p = NULL) /* strings */ && TEST_str_eq(p = "123456" + 1, "23456") && TEST_str_eq("3456", ++p) && TEST_str_ne(p++, "456") /* memory */ && TEST_mem_eq(--p, sizeof("3456"), "3456", sizeof("3456")) && TEST_mem_ne(p++, sizeof("456"), "456", sizeof("456")) && TEST_mem_eq(p--, sizeof("456"), "456", sizeof("456")); } void register_tests(void) { ADD_TEST(test_int); Loading @@ -273,4 +328,5 @@ void register_tests(void) ADD_TEST(test_string); ADD_TEST(test_memory); ADD_TEST(test_messages); ADD_TEST(test_single_eval); }
test/testutil.h +48 −42 Original line number Diff line number Diff line Loading @@ -223,6 +223,12 @@ void test_info_c90(const char *desc, ...) PRINTF_FORMAT(1, 2); /* * The following macros provide wrapper calls to the test functions with * a default description that indicates the file and line number of the error. * * The following macros guarantee to evaluate each argument exactly once. * This allows constructs such as: if(!TEST_ptr(ptr = OPENSSL_malloc(..))) * to produce better contextual output than: * ptr = OPENSSL_malloc(..); * if (!TEST_ptr(ptr)) */ # define TEST_int_eq(a, b) test_int_eq(__FILE__, __LINE__, #a, #b, a, b) # define TEST_int_ne(a, b) test_int_ne(__FILE__, __LINE__, #a, #b, a, b) Loading