Enhance mg_snrpintf tests

This commit is contained in:
Sergey Lyubka 2022-02-11 18:15:34 +00:00
parent 313ac34e59
commit 4f802ece52

View File

@ -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) {