From 4f802ece52afd90f7dad1eadcd7e92eeb0e7391a Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Fri, 11 Feb 2022 18:15:34 +0000 Subject: [PATCH] Enhance mg_snrpintf tests --- test/unit_test.c | 113 ++++++++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 50 deletions(-) diff --git a/test/unit_test.c b/test/unit_test.c index ad728513..112016f3 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -1192,9 +1192,28 @@ static void test_timer(void) { ASSERT(g_timers == NULL); } +static bool sn(const char *fmt, ...) { + char buf[100], tmp[1] = {0}, buf2[sizeof(buf)]; + size_t n, n2, n1; + va_list ap; + bool result; + va_start(ap, fmt); + n = (size_t) vsnprintf(buf2, sizeof(buf2), fmt, ap); + va_end(ap); + va_start(ap, fmt); + n1 = mg_vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + va_start(ap, fmt); + n2 = mg_vsnprintf(tmp, 0, fmt, ap); + va_end(ap); + result = n1 == n2 && n1 == n && strcmp(buf, buf2) == 0; + if (!result) + LOG(LL_ERROR, ("[%s] -> [%s] != [%s] %d %d %d\n", fmt, buf, buf2, (int) n1, + (int) n2, (int) n)); + return result; +} + static void test_str(void) { - char buf[100]; - size_t n = sizeof(buf); struct mg_str s = mg_strdup(mg_str("a")); ASSERT(mg_strcmp(s, mg_str("a")) == 0); free((void *) s.ptr); @@ -1205,54 +1224,48 @@ static void test_str(void) { ASSERT(mg_strstr(mg_str("abc"), mg_str("b")) != NULL); ASSERT(mg_strcmp(mg_str("hi"), mg_strstrip(mg_str(" \thi\r\n"))) == 0); - ASSERT(mg_snprintf(buf, n, "%d", 0) == 1 && !strcmp(buf, "0")); - ASSERT(mg_snprintf(buf, n, "%d", 1) == 1 && !strcmp(buf, "1")); - ASSERT(mg_snprintf(buf, n, "%d", -1) == 2 && !strcmp(buf, "-1")); - ASSERT(mg_snprintf(buf, n, "%.*s", 1, "ab") == 1 && !strcmp(buf, "a")); - ASSERT(mg_snprintf(buf, n, "%.1s", "ab") == 1 && !strcmp(buf, "a")); - ASSERT(mg_snprintf(buf, n, "%.99s", "a") == 1 && !strcmp(buf, "a")); - ASSERT(mg_snprintf(buf, n, "%11s", "a") == 11 && !strcmp(buf, " a")); - ASSERT(mg_snprintf(buf, n, "%s", "a\0b") == 1 && !strcmp(buf, "a")); - ASSERT(mg_snprintf(buf, n, "%2s", "a") == 2 && !strcmp(buf, " a")); - ASSERT(mg_snprintf(buf, n, "%.*s", 3, "a\0b") == 1 && !strcmp(buf, "a")); - memset(buf, 'x', n); - ASSERT(mg_snprintf(buf, n, "%d", 7) == 1 && !strcmp(buf, "7")); - memset(buf, 0, n); - ASSERT(mg_snprintf(buf, 0, "%d", 123) == 3 && buf[0] == '\0'); - ASSERT(mg_snprintf(buf, n, "%lld", (uint64_t) 0xffffffffff) == 13 && - !strcmp(buf, "1099511627775")); - ASSERT(mg_snprintf(buf, n, "%llx", (uint64_t) 0xffffffffff) == 10 && - !strcmp(buf, "ffffffffff")); - ASSERT(mg_snprintf(buf, n, "%lx", (unsigned long) 0x6204d754) == 8 && - !strcmp(buf, "6204d754")); - ASSERT(mg_snprintf(buf, n, "ab") == 2 && !strcmp(buf, "ab")); - ASSERT(mg_snprintf(buf, n, "%dx", 1) == 2 && !strcmp(buf, "1x")); - ASSERT(mg_snprintf(buf, n, "%sx", "a") == 2 && !strcmp(buf, "ax")); - ASSERT(mg_snprintf(buf, n, "%cx", 32) == 2 && !strcmp(buf, " x")); - ASSERT(mg_snprintf(buf, n, "%x", 15) == 1 && !strcmp(buf, "f")); - ASSERT(mg_snprintf(buf, n, "%2x", 15) == 2 && !strcmp(buf, " f")); - ASSERT(mg_snprintf(buf, n, "%02x", 15) == 2 && !strcmp(buf, "0f")); - ASSERT(mg_snprintf(buf, n, "%p", (void *) (size_t) 7) == 3 && - !strcmp(buf, "0x7")); - ASSERT(mg_snprintf(buf, n, "%hx:%hhx", (short) 1, (char) 2) == 3 && - !strcmp(buf, "1:2")); - ASSERT(mg_snprintf(buf, n, "%hx:%hhx", (short) 1, (char) 2) == 3 && - !strcmp(buf, "1:2")); - ASSERT(mg_snprintf(buf, n, "%%") == 1 && !strcmp(buf, "%")); - ASSERT(mg_snprintf(buf, n, "%x", 15) == 1 && !strcmp(buf, "f")); - ASSERT(mg_snprintf(buf, n, "%#x", 15) == 3 && !strcmp(buf, "0xf")); - ASSERT(mg_snprintf(buf, n, "%#6x", 15) == 6 && !strcmp(buf, " 0xf")); - ASSERT(mg_snprintf(buf, n, "%#06x", 15) == 6 && !strcmp(buf, "0x000f")); - ASSERT(mg_snprintf(buf, n, "%#-6x", 15) > 0); - ASSERT(mg_snprintf(buf, n, "%#-6x", 15) == 6 && !strcmp(buf, "0xf ")); - ASSERT(mg_snprintf(buf, n, "%-2s!", "a") == 3 && !strcmp(buf, "a !")); - ASSERT(mg_snprintf(buf, 10, "%s %s", "a", "b") == 3 && !strcmp(buf, "a b")); - ASSERT(mg_snprintf(buf, 10, "%s %s", "a", "b") == 3 && !strcmp(buf, "a b")); - buf[0] = '\0'; - ASSERT(mg_snprintf(0, 0, "ab%dc", 123) == 6 && buf[0] == '\0'); - ASSERT(mg_snprintf(0, 0, "%s ", "a") == 2 && buf[0] == '\0'); - ASSERT(mg_snprintf(0, 0, "%s %s", "a", "b") == 3 && buf[0] == '\0'); - ASSERT(mg_snprintf(0, 0, "%2s %s", "a", "b") == 4 && buf[0] == '\0'); + ASSERT(sn("%d", 0)); + ASSERT(sn("%d", 1)); + ASSERT(sn("%d", -1)); + ASSERT(sn("%.*s", 1, "ab")); + ASSERT(sn("%.1s", "ab")); + ASSERT(sn("%.99s", "a")); + ASSERT(sn("%11s", "a")); + ASSERT(sn("%s", "a\0b")); + ASSERT(sn("%2s", "a")); + ASSERT(sn("%.*s", 3, "a\0b")); + ASSERT(sn("%d", 7)); + ASSERT(sn("%d", 123)); +#if MG_ARCH == MG_ARCH_UNIX + ASSERT(sn("%lld", (uint64_t) 0xffffffffff)); + ASSERT(sn("%lld", (uint64_t) -1)); + ASSERT(sn("%llu", (uint64_t) -1)); + ASSERT(sn("%llx", (uint64_t) 0xffffffffff)); + ASSERT(sn("%p", (void *) (size_t) 7)); +#endif + ASSERT(sn("%lx", (unsigned long) 0x6204d754)); + ASSERT(sn("ab")); + ASSERT(sn("%dx", 1)); + ASSERT(sn("%sx", "a")); + ASSERT(sn("%cx", 32)); + ASSERT(sn("%x", 15)); + ASSERT(sn("%2x", 15)); + ASSERT(sn("%02x", 15)); + ASSERT(sn("%hx:%hhx", (short) 1, (char) 2)); + ASSERT(sn("%hx:%hhx", (short) 1, (char) 2)); + ASSERT(sn("%%")); + ASSERT(sn("%x", 15)); + ASSERT(sn("%#x", 15)); + ASSERT(sn("%#6x", 15)); + ASSERT(sn("%#06x", 15)); + ASSERT(sn("%#-6x", 15)); + ASSERT(sn("%-2s!", "a")); + ASSERT(sn("%s %s", "a", "b")); + ASSERT(sn("%s %s", "a", "b")); + ASSERT(sn("ab%dc", 123)); + ASSERT(sn("%s ", "a")); + ASSERT(sn("%s %s", "a", "b")); + ASSERT(sn("%2s %s", "a", "b")); } static void fn1(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {