]> granicus.if.org Git - check/commitdiff
Add unit tests for memory location comparison macros (ck_assert_mem_*)
authorPavol Rusnak <stick@gk2.sk>
Wed, 26 Oct 2016 13:23:14 +0000 (15:23 +0200)
committerPavol Rusnak <stick@gk2.sk>
Mon, 31 Oct 2016 11:02:36 +0000 (12:02 +0100)
src/check.h.in
tests/check_check_master.c
tests/check_check_sub.c

index ccd409f35a74beacc26c2f94d5bcf580e006e615..3b29d546bfa95ebc3a13dbdf91d1e0d84f88472a 100644 (file)
@@ -772,6 +772,12 @@ CK_DLL_EXP void CK_EXPORT _ck_assert_failed(const char *file, int line,
   } \
   _ck_x_str[_ck_i * 2] = 0; \
   _ck_y_str[_ck_i * 2] = 0; \
+  if (_ck_maxl != _ck_l) { \
+    _ck_x_str[_ck_i * 2 - 2] = '.'; \
+    _ck_y_str[_ck_i * 2 - 2] = '.'; \
+    _ck_x_str[_ck_i * 2 - 1] = '.'; \
+    _ck_y_str[_ck_i * 2 - 1] = '.'; \
+  } \
   ck_assert_msg(0 OP memcmp(_ck_y, _ck_x, _ck_l), \
     "Assertion '%s' failed: %s == \"%s\", %s == \"%s\"", #X" "#OP" "#Y, #X, _ck_x_str, #Y, _ck_y_str); \
 } while (0)
index 85dd9f666a94899e4b72a3bb3a07668082f15180..605c50d090e7a0b341ae5e4d94f46dcaa34ae20d 100644 (file)
@@ -114,6 +114,15 @@ static master_test_t master_tests[] = {
   { "Simple Tests", CK_PASS,    "Passed" },
   { "Simple Tests", CK_FAILURE, "Assertion 'x == y' failed: x == 0x1, y == 0x2" },
   { "Simple Tests", CK_FAILURE, "Assertion 'x != z' failed: x == 0x1, z == 0x1" },
+  { "Simple Tests", CK_FAILURE, "Assertion '\"\\x00\\x00\\x00\\x00\\x01\" == s' failed: \"\\x00\\x00\\x00\\x00\\x01\" == \"0000000001\", s == \"0000000002\"" },
+  { "Simple Tests", CK_FAILURE, "Assertion 't != s' failed: t == \"0000000002\", s == \"0000000002\"" },
+  { "Simple Tests", CK_FAILURE, "Assertion 's < s' failed: s == \"0000000001\", s == \"0000000001\"" },
+  { "Simple Tests", CK_FAILURE, "Assertion 't <= s' failed: t == \"0000000002\", s == \"0000000001\"" },
+  { "Simple Tests", CK_FAILURE, "Assertion 't > t' failed: t == \"0000000002\", t == \"0000000002\"" },
+  { "Simple Tests", CK_FAILURE, "Assertion 's >= t' failed: s == \"0000000001\", t == \"0000000002\"" },
+  { "Simple Tests", CK_PASS,    "Passed" },
+  { "Simple Tests", CK_FAILURE, "Assertion 't == s' failed: t == \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\", s == \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\"" },
+  { "Simple Tests", CK_FAILURE, "Assertion 't == s' failed: t == \"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000..\", s == \"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000..\"" },
   
 #if defined(HAVE_FORK) && HAVE_FORK==1
   { "Signal Tests", CK_ERROR,   signal_11_str },
index 3ad40517362cc9955363557295b576a738ae01b3..27a15cac4b90aa835a046803e19f36cb05afb8c2 100644 (file)
@@ -553,6 +553,94 @@ START_TEST(test_ck_assert_ptr_ne)
 }
 END_TEST
 
+START_TEST(test_ck_assert_mem_eq)
+{
+  const char *s = "\x00\x00\x00\x00\x02";
+  ck_assert_mem_eq("\x00\x00\x00\x00\x02", s, 5);
+  record_failure_line_num(__LINE__);
+  ck_assert_mem_eq("\x00\x00\x00\x00\x01", s, 5);
+}
+END_TEST
+
+START_TEST(test_ck_assert_mem_ne)
+{
+  const char *s = "\x00\x00\x00\x00\x02";
+  const char *t = "\x00\x00\x00\x00\x01";
+  ck_assert_mem_ne(t, s, 5);
+  t = "\x00\x00\x00\x00\x02";
+  record_failure_line_num(__LINE__);
+  ck_assert_mem_ne(t, s, 5);
+}
+END_TEST
+
+START_TEST(test_ck_assert_mem_lt)
+{
+  const char *s = "\x00\x00\x00\x00\x01";
+  const char *t = "\x00\x00\x00\x00\x02";
+  ck_assert_mem_lt(s, t, 5);
+  record_failure_line_num(__LINE__);
+  ck_assert_mem_lt(s, s, 5);
+}
+END_TEST
+
+START_TEST(test_ck_assert_mem_le)
+{
+  const char *s = "\x00\x00\x00\x00\x01";
+  const char *t = "\x00\x00\x00\x00\x02";
+  ck_assert_mem_le(s, t, 5);
+  ck_assert_mem_le(s, s, 5);
+  record_failure_line_num(__LINE__);
+  ck_assert_mem_le(t, s, 5);
+}
+END_TEST
+
+START_TEST(test_ck_assert_mem_gt)
+{
+  const char *s = "\x00\x00\x00\x00\x01";
+  const char *t = "\x00\x00\x00\x00\x02";
+  ck_assert_mem_gt(t, s, 5);
+  record_failure_line_num(__LINE__);
+  ck_assert_mem_gt(t, t, 5);
+}
+END_TEST
+
+START_TEST(test_ck_assert_mem_ge)
+{
+  const char *s = "\x00\x00\x00\x00\x01";
+  const char *t = "\x00\x00\x00\x00\x02";
+  ck_assert_mem_ge(t, s, 5);
+  ck_assert_mem_ge(t, t, 5);
+  record_failure_line_num(__LINE__);
+  ck_assert_mem_ge(s, t, 5);
+}
+END_TEST
+
+START_TEST(test_ck_assert_mem_zerolen)
+{
+  const char *s = "\x00\x00\x00\x00\x02";
+  const char *t = "\x00\x00\x00\x00\x01";
+  ck_assert_mem_eq(t, s, 0);
+}
+END_TEST
+
+START_TEST(test_ck_assert_mem_eq_exact)
+{
+  const char *s = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02";
+  const char *t = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01";
+  record_failure_line_num(__LINE__);
+  ck_assert_mem_eq(t, s, 64);
+}
+END_TEST
+
+START_TEST(test_ck_assert_mem_eq_longer)
+{
+  const char *s = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02";
+  const char *t = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01";
+  record_failure_line_num(__LINE__);
+  ck_assert_mem_eq(t, s, 65);
+}
+END_TEST
+
 #if defined(HAVE_FORK) && HAVE_FORK == 1
 START_TEST(test_segv_pass)
 {
@@ -1095,6 +1183,15 @@ Suite *make_sub_suite(void)
   tcase_add_test (tc_simple, test_ck_assert_str_expr);
   tcase_add_test (tc_simple, test_ck_assert_ptr_eq);
   tcase_add_test (tc_simple, test_ck_assert_ptr_ne);
+  tcase_add_test (tc_simple, test_ck_assert_mem_eq);
+  tcase_add_test (tc_simple, test_ck_assert_mem_ne);
+  tcase_add_test (tc_simple, test_ck_assert_mem_lt);
+  tcase_add_test (tc_simple, test_ck_assert_mem_le);
+  tcase_add_test (tc_simple, test_ck_assert_mem_gt);
+  tcase_add_test (tc_simple, test_ck_assert_mem_ge);
+  tcase_add_test (tc_simple, test_ck_assert_mem_zerolen);
+  tcase_add_test (tc_simple, test_ck_assert_mem_eq_exact);
+  tcase_add_test (tc_simple, test_ck_assert_mem_eq_longer);
 
 #if defined(HAVE_FORK) && HAVE_FORK==1
   tcase_add_test (tc_signal, test_segv);