mirror of
https://github.com/cesanta/mongoose.git
synced 2025-08-06 13:37:34 +08:00
Enhance mg_snrpintf tests
This commit is contained in:
parent
313ac34e59
commit
4f802ece52
113
test/unit_test.c
113
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user