changeset 259:33652234f162

Work on tests.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 17 Feb 2016 12:36:06 +0200
parents d746fd5975f4
children ab18ebbb5529
files tests.c
diffstat 1 files changed, 80 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/tests.c	Tue Feb 16 23:11:38 2016 +0200
+++ b/tests.c	Wed Feb 17 12:36:06 2016 +0200
@@ -5,65 +5,89 @@
 
 #define SET_BUF_SIZE 128
 
-int failed, passed;
+char *test_str_header = NULL,
+     *test_str_res = NULL;
+
+int tests_failed, tests_passed, tests_total;
+
 char buf1[SET_BUF_SIZE+2], buf2[SET_BUF_SIZE+2];
 
 
-int test_snprintf_do2(size_t len, const char *fmt, va_list ap)
+void test_start_v(const char *fmt, va_list ap)
+{
+    tests_total++;
+
+    th_free_r(&test_str_header);
+    th_free_r(&test_str_res);
+
+    test_str_header = th_strdup_vprintf(fmt, ap);
+}
+
+
+void test_start(const char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+    test_start_v(fmt, ap);
+    va_end(ap);
+}
+
+
+void test_result_msg_v(BOOL check, const char *fmt, va_list ap)
 {
-    int ret1, ret2, ret = 0;
+    if (check)
+    {
+        THPRINT(1, "%s: OK\n", test_str_header);
+        tests_passed++;
+    }
+    else
+    {
+        THPRINT(0, "%s: ", test_str_header);
+        if (fmt != NULL)
+            THPRINT_V(0, fmt, ap);
+        THPRINT(0, "\n%s\n", test_str_res);
+        tests_failed++;
+    }
+}
+
+
+void test_result_msg(BOOL check, const char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+    test_result_msg_v(check, fmt, ap);
+    va_end(ap);
+}
+
+
+void test_result(BOOL check)
+{
+    test_result_msg_v(check, NULL, NULL);
+}
+
+
+#define SET_SENTINEL_BYTE 0x0e5
+
+void test_snprintf_do(size_t len, const char *fmt, va_list ap, const char *msg)
+{
+    int ret1, ret2;
     va_list tmp;
 
-    memset(buf1, 0xe5, SET_BUF_SIZE+2); buf1[SET_BUF_SIZE+1] = 0;
-    memset(buf2, 0xe5, SET_BUF_SIZE+2); buf2[SET_BUF_SIZE+1] = 0;
+    test_start("th_vsnprintf('%s', %s)", fmt, msg);
+
+    memset(buf1, SET_SENTINEL_BYTE, SET_BUF_SIZE+2); buf1[SET_BUF_SIZE+1] = 0;
+    memset(buf2, SET_SENTINEL_BYTE, SET_BUF_SIZE+2); buf2[SET_BUF_SIZE+1] = 0;
 
     va_copy(tmp, ap);
 
     ret1 = th_vsnprintf(buf1, len, fmt, ap);
     ret2 = vsnprintf(buf2, len, fmt, tmp);
 
-
-    if (ret1 != ret2)
-    {
-        THPRINT(1, "  retval mismatch (%d != %d)\n", ret1, ret2);
-        ret = -1;
-    }
-
-    if (strcmp(buf1, buf2))
-    {
-        THPRINT(1, "  result mismatch:\n'%s' VS\n'%s'\n", buf1, buf2);
-        ret = -2;
-    }
-
-    if ((unsigned char) buf1[len] != 0xe5)
-    {
-        THPRINT(1, "  buffer #1 overflow, sentinel 0x%02x\n", buf1[len]);
-        ret = -2;
-    }
-
-    if ((unsigned char) buf2[len] != 0xe5)
-    {
-        THPRINT(1, "  buffer #2 overflow, sentinel 0x%02x\n", buf2[len]);
-        ret = -2;
-    }
-
-    if (ret != 0)
-        THPRINT(1, "th_vsnprintf(%" TH_PRIu_SIZE_T ", '%s'): ", len, fmt);
-
-    if (ret == 0)
-        THPRINT(1, "OK\n");
-
-    return ret;
-}
-
-
-void test_snprintf_do(size_t len, const char *fmt, va_list ap)
-{
-    int ret = test_snprintf_do2(len, fmt, ap);
-    if (ret == 0)
-        passed++;
-    else
-        failed++;
+    test_result_msg(ret1 == ret2, "retval mismatch %d != %d", ret1, ret2);
+    test_result_msg(strcmp(buf1, buf2) == 0, "result mismatch '%s' != '%s'", buf1, buf2);
+    
+    test_result_msg((unsigned char) buf1[len] == SET_SENTINEL_BYTE, "buffer #1 overflow, sentinel 0x%02x", buf1[len]);
+    test_result_msg((unsigned char) buf2[len] == SET_SENTINEL_BYTE, "buffer #2 overflow, sentinel 0x%02x", buf2[len]);
 }
 
 
@@ -72,11 +96,11 @@
     va_list ap, tmp;
     THPRINT(1, "----------------------------------------------\n");
     va_start(ap, fmt);
-    va_copy(tmp, ap); test_snprintf_do(0, fmt, tmp);
-    va_copy(tmp, ap); test_snprintf_do(1, fmt, tmp);
-    va_copy(tmp, ap); test_snprintf_do(2, fmt, tmp);
-    va_copy(tmp, ap); test_snprintf_do(16, fmt, tmp);
-    va_copy(tmp, ap); test_snprintf_do(SET_BUF_SIZE, fmt, tmp);
+    va_copy(tmp, ap); test_snprintf_do(0, fmt, tmp, "0");
+    va_copy(tmp, ap); test_snprintf_do(1, fmt, tmp, "1");
+    va_copy(tmp, ap); test_snprintf_do(2, fmt, tmp, "2");
+    va_copy(tmp, ap); test_snprintf_do(16, fmt, tmp, "16");
+    va_copy(tmp, ap); test_snprintf_do(SET_BUF_SIZE, fmt, tmp, "SET_BUF_SIZE");
     va_end(ap); 
     THPRINT(1, "----------------------------------------------\n");
 }
@@ -91,7 +115,7 @@
     // Initialization
     //
     th_init("th-test", "th-libs unit tests", "0.0.1", NULL, NULL);
-    th_verbosityLevel = 0;
+    th_verbosityLevel = 1;
 
     if (sizeof(char) != sizeof(unsigned char))
     {
@@ -99,7 +123,7 @@
         return -1;
     }
 
-    failed = passed = 0;
+    tests_failed = tests_passed = tests_total = 0;
 
     //
     // Test series #1
@@ -126,8 +150,8 @@
     //
     // Print summary and exit
     //
-    THPRINT(0, "%d tests failed, %d passed.\n",
-        failed, passed);
+    THPRINT(0, "%d tests failed, %d passed (%d main tests).\n",
+        tests_failed, tests_passed, tests_total);
 
     return 0;
 }