diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test-snprintf-posix.h | 35 | ||||
-rw-r--r-- | tests/test-sprintf-posix.h | 31 | ||||
-rw-r--r-- | tests/test-vasnprintf-posix.c | 41 | ||||
-rw-r--r-- | tests/test-vasprintf-posix.c | 39 |
4 files changed, 146 insertions, 0 deletions
diff --git a/tests/test-snprintf-posix.h b/tests/test-snprintf-posix.h index 579d34583d..05c7be8059 100644 --- a/tests/test-snprintf-posix.h +++ b/tests/test-snprintf-posix.h @@ -3024,6 +3024,22 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision is ignored. */ + int retval = + my_snprintf (result, sizeof (result), + "%.0c %d", (unsigned char) 'x', 33, 44, 55); + ASSERT (strcmp (result, "x 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* NUL character. */ + int retval = + my_snprintf (result, sizeof (result), + "a%cz %d", '\0', 33, 44, 55); + ASSERT (memcmp (result, "a\0z 33\0", 6 + 1) == 0); + ASSERT (retval == 6); + } + #if HAVE_WCHAR_T static wint_t L_x = (wchar_t) 'x'; @@ -3054,6 +3070,25 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (strcmp (result, "x 33") == 0); ASSERT (retval == strlen (result)); } + + { /* Precision is ignored. */ + int retval = + my_snprintf (result, sizeof (result), + "%.0lc %d", L_x, 33, 44, 55); + ASSERT (strcmp (result, "x 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* NUL character. */ + int retval = + my_snprintf (result, sizeof (result), + "a%lcz %d", (wint_t) L'\0', 33, 44, 55); + /* No NUL byte between 'a' and 'z'. This is surprising, but is a + consequence of how POSIX:2018 and ISO C 23 specify the handling + of %lc. */ + ASSERT (memcmp (result, "az 33\0", 5 + 1) == 0); + ASSERT (retval == 5); + } #endif /* Test the support of the 'b' conversion specifier for binary output of diff --git a/tests/test-sprintf-posix.h b/tests/test-sprintf-posix.h index 863d084b99..d745a1109b 100644 --- a/tests/test-sprintf-posix.h +++ b/tests/test-sprintf-posix.h @@ -3006,6 +3006,20 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision is ignored. */ + int retval = + my_sprintf (result, "%.0c %d", (unsigned char) 'x', 33, 44, 55); + ASSERT (strcmp (result, "x 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* NUL character. */ + int retval = + my_sprintf (result, "a%cz %d", '\0', 33, 44, 55); + ASSERT (memcmp (result, "a\0z 33\0", 6 + 1) == 0); + ASSERT (retval == 6); + } + #if HAVE_WCHAR_T static wint_t L_x = (wchar_t) 'x'; @@ -3036,6 +3050,23 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) ASSERT (strcmp (result, "x 33") == 0); ASSERT (retval == strlen (result)); } + + { /* Precision is ignored. */ + int retval = + my_sprintf (result, "%.0lc %d", L_x, 33, 44, 55); + ASSERT (strcmp (result, "x 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* NUL character. */ + int retval = + my_sprintf (result, "a%lcz %d", (wint_t) L'\0', 33, 44, 55); + /* No NUL byte between 'a' and 'z'. This is surprising, but is a + consequence of how POSIX:2018 and ISO C 23 specify the handling + of %lc. */ + ASSERT (memcmp (result, "az 33\0", 5 + 1) == 0); + ASSERT (retval == 5); + } #endif /* Test the support of the 'b' conversion specifier for binary output of diff --git a/tests/test-vasnprintf-posix.c b/tests/test-vasnprintf-posix.c index c6e1e2f650..ecbb8bcda0 100644 --- a/tests/test-vasnprintf-posix.c +++ b/tests/test-vasnprintf-posix.c @@ -3932,6 +3932,26 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) free (result); } + { /* Precision is ignored. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, + "%.0c %d", (unsigned char) 'x', 33, 44, 55); + ASSERT (strcmp (result, "x 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + + { /* NUL character. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, + "a%cz %d", '\0', 33, 44, 55); + ASSERT (memcmp (result, "a\0z 33\0", 6 + 1) == 0); + ASSERT (length == 6); + free (result); + } + #if HAVE_WCHAR_T static wint_t L_x = (wchar_t) 'x'; @@ -3974,6 +3994,27 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) ASSERT (length == strlen (result)); free (result); } + + { /* Precision is ignored. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%.0lc %d", L_x, 33, 44, 55); + ASSERT (strcmp (result, "x 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + + { /* NUL character. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "a%lcz %d", (wint_t) L'\0', 33, 44, 55); + /* No NUL byte between 'a' and 'z'. This is surprising, but is a + consequence of how POSIX:2018 and ISO C 23 specify the handling + of %lc. */ + ASSERT (memcmp (result, "az 33\0", 5 + 1) == 0); + ASSERT (length == 5); + free (result); + } #endif /* Test the support of the 'b' conversion specifier for binary output of diff --git a/tests/test-vasprintf-posix.c b/tests/test-vasprintf-posix.c index 13b3a1bca9..46086ef251 100644 --- a/tests/test-vasprintf-posix.c +++ b/tests/test-vasprintf-posix.c @@ -3873,6 +3873,24 @@ test_function (int (*my_asprintf) (char **, const char *, ...)) free (result); } + { /* Precision is ignored. */ + char *result; + int retval = + my_asprintf (&result, "%.0c %d", (unsigned char) 'x', 33, 44, 55); + ASSERT (strcmp (result, "x 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NUL character. */ + char *result; + int retval = + my_asprintf (&result, "a%cz %d", '\0', 33, 44, 55); + ASSERT (memcmp (result, "a\0z 33\0", 6 + 1) == 0); + ASSERT (retval == 6); + free (result); + } + #if HAVE_WCHAR_T static wint_t L_x = (wchar_t) 'x'; @@ -3915,6 +3933,27 @@ test_function (int (*my_asprintf) (char **, const char *, ...)) ASSERT (retval == strlen (result)); free (result); } + + { /* Precision is ignored. */ + char *result; + int retval = + my_asprintf (&result, "%.0lc %d", L_x, 33, 44, 55); + ASSERT (strcmp (result, "x 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NUL character. */ + char *result; + int retval = + my_asprintf (&result, "a%lcz %d", (wint_t) L'\0', 33, 44, 55); + /* No NUL byte between 'a' and 'z'. This is surprising, but is a + consequence of how POSIX:2018 and ISO C 23 specify the handling + of %lc. */ + ASSERT (memcmp (result, "az 33\0", 5 + 1) == 0); + ASSERT (retval == 5); + free (result); + } #endif /* Test the support of the 'b' conversion specifier for binary output of |