# HG changeset patch # User Matti Hamalainen # Date 1455652854 -7200 # Node ID 7549e279fe1814e5ee5ad4e6a8722f481bcb3673 # Parent 3d1e2af4e4e6a3e9e9c3ab226e5090750c1f77ce Work on tests. diff -r 3d1e2af4e4e6 -r 7549e279fe18 tests.c --- a/tests.c Tue Feb 16 21:28:00 2016 +0200 +++ b/tests.c Tue Feb 16 22:00:54 2016 +0200 @@ -14,52 +14,52 @@ int ret1, ret2, ret = 0; va_list tmp; - printf("th_vsnprintf(%" TH_PRIu_SIZE_T ", '%s'): ", len, fmt); + 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; va_copy(tmp, ap); ret1 = th_vsnprintf(buf1, len, fmt, ap); ret2 = vsnprintf(buf2, len, fmt, tmp); + if (ret1 != ret2) { - printf("ret mismatch (%d != %d)\n", ret1, ret2); + THPRINT(1, " retval mismatch (%d != %d)\n", ret1, ret2); ret = -1; } if (strcmp(buf1, buf2)) { - printf("result mismatch:\n'%s' VS\n'%s'\n", 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) - printf("OK\n"); + THPRINT(1, "OK\n"); + return ret; } void test_snprintf_do(size_t len, const char *fmt, va_list ap) { - int ret; - - 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; - - ret = test_snprintf_do2(len, fmt, ap); - - if ((unsigned char) buf1[len] != 0xe5) - { - printf(" buffer #1 overflow, sentinel 0x%02x\n", buf1[len]); - ret = -2; - } - - if ((unsigned char) buf2[len] != 0xe5) - { - printf(" buffer #2 overflow, sentinel 0x%02x\n", buf2[len]); - ret = -2; - } - + int ret = test_snprintf_do2(len, fmt, ap); if (ret == 0) passed++; else @@ -70,15 +70,15 @@ void test_snprintf(const char *fmt, ...) { va_list ap, tmp; - printf("----------------------------------------------\n"); + 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_end(ap); - printf("----------------------------------------------\n"); + va_end(ap); + THPRINT(1, "----------------------------------------------\n"); } @@ -87,8 +87,11 @@ (void) argc; (void) argv; + // + // Initialization + // th_init("th-test", "th-libs unit tests", "0.0.1", NULL, NULL); - th_verbosityLevel = 1; + th_verbosityLevel = 0; if (sizeof(char) != sizeof(unsigned char)) { @@ -98,21 +101,31 @@ failed = passed = 0; + // + // Test series #1 + // + THPRINT(0, "printf() family function tests.\n"); int i_vals[] = { 2, 612342, -2, -612342, 0x1fff, 0x8000000, }; char *i_fmts[] = { "%d", "%x", "%05d", "%5d", "%-5d", "%05x", "%5x", }; - int i1, i2; + size_t i1, i2; for (i1 = 0; i1 < sizeof(i_vals) / sizeof(i_vals[0]); i1++) for (i2 = 0; i2 < sizeof(i_fmts) / sizeof(i_fmts[0]); i2++) test_snprintf(i_fmts[i2], i_vals); - char *s_vals[] = { "", "asdf", "xxx yyy zzz ppp fff", NULL, }; - char *s_fmts[] = { "%s", "%2s", "%-2s", "%5s", "%-5s", "%16s", "%-16s", }; + char *s_vals[] = { "", "asdf", "xxx yyy zzz ppp fff", NULL, "X" }; + char *s_fmts[] = { "%s", "%2s", "%-2s", "%5s", "%-5s", "%16s", "%-16s", "%1s", "%-1s", }; for (i1 = 0; i1 < sizeof(s_vals) / sizeof(s_vals[0]); i1++) for (i2 = 0; i2 < sizeof(s_fmts) / sizeof(s_fmts[0]); i2++) test_snprintf(s_fmts[i2], s_vals); - printf("%d tests failed, %d passed.\n", failed, passed); + + // + // Print summary and exit + // + THPRINT(0, "%d tests failed, %d passed.\n", + failed, passed); + return 0; }