summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-03-24 22:14:09 +0100
committerBruno Haible <bruno@clisp.org>2023-03-24 22:14:09 +0100
commit480a59ba60fa0b43a1cebe218bbcea6a947f1e86 (patch)
treeb2b3cdce131d3a52f876c652796d6477c1f758ec /tests
parentd4bf26d359cf758bee20b907352c5db68dda19d4 (diff)
downloadgnulib-480a59ba60fa0b43a1cebe218bbcea6a947f1e86.tar.gz
*printf-posix: ISO C 23: Support size specifiers 'wN' and 'wfN'.
* lib/printf-args.h: Include <stdint.h>. (arg_type): Add TYPE_[U]INT8_T, ..., TYPE_[U]INT_FAST64_T and TYPE_COUNT_INT8_T_POINTER, ..., TYPE_COUNT_INT_FAST64_T_POINTER. (argument): Add the union members a_[u]int8_t, ..., a_[u]int_fast64_t and a_count_int8_t_pointer, ..., a_count_int_fast64_t_pointer. * lib/printf-args.c: Include <limits.h>. (PRINTF_FETCHARGS): Handle TYPE_[U]INT8_T, ..., TYPE_[U]INT_FAST64_T and TYPE_COUNT_INT8_T_POINTER, ..., TYPE_COUNT_INT_FAST64_T_POINTER. * lib/printf-parse.c (PRINTF_PARSE): Accept only one size specifier, not a sequence of size specifiers. Accept "wN" and "wfN", where N = 8, 16, 32, 64. * lib/vasnprintf.c (MAX_ROOM_NEEDED, VASNPRINTF): Handle the new TYPE_* values as well. * m4/printf.m4 (gl_PRINTF_SIZES_C23): New macro. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_IS_POSIX): Require gl_PRINTF_SIZES_C23. Test gl_cv_func_printf_sizes_c23. * m4/dprintf-posix.m4 (gl_FUNC_DPRINTF_IS_POSIX): Likewise. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_IS_POSIX): Likewise. * m4/obstack-printf-posix.m4 (gl_FUNC_OBSTACK_PRINTF_IS_POSIX): Likewise. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_IS_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_IS_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_IS_POSIX): Likewise. * m4/vdprintf-posix.m4 (gl_FUNC_VDPRINTF_IS_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_IS_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_IS_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_IS_POSIX): Likewise. * tests/test-vasnprintf-posix.c (test_function): Add tests for size specifiers with %d, %u, %b, %o, %x. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-vasnwprintf-posix.c (test_function): Likewise. * tests/test-vasprintf-posix.c (test_function): Likewise. * modules/vasnprintf (Depends-on): Add limits-h. * modules/vasnwprintf (Depends-on): Add limits-h. * modules/c-vasnprintf (Depends-on): Add limits-h, stdint. * modules/unistdio/u-printf-args (Depends-on): Add stdint, limits-h. * doc/posix-functions/dprintf.texi: Mention the ISO C 23 size specifiers. * doc/posix-functions/fprintf.texi: Likewise. * doc/posix-functions/fwprintf.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/swprintf.texi: Likewise. * doc/posix-functions/vdprintf.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vfwprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. * doc/posix-functions/vswprintf.texi: Likewise. * doc/posix-functions/vwprintf.texi: Likewise. * doc/posix-functions/wprintf.texi: Likewise.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-snprintf-posix.h535
-rw-r--r--tests/test-sprintf-posix.h470
-rw-r--r--tests/test-vasnprintf-posix.c600
-rw-r--r--tests/test-vasnwprintf-posix.c600
-rw-r--r--tests/test-vasprintf-posix.c600
5 files changed, 2805 insertions, 0 deletions
diff --git a/tests/test-snprintf-posix.h b/tests/test-snprintf-posix.h
index a8993f947a..bfc8b9914e 100644
--- a/tests/test-snprintf-posix.h
+++ b/tests/test-snprintf-posix.h
@@ -3426,4 +3426,539 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
ASSERT (strcmp (result, " 33") == 0);
ASSERT (retval == strlen (result));
}
+
+ /* Test the support of argument type/size specifiers for signed integer
+ conversions. */
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hhd %d", (signed char) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hd %d", (short) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%d %d", -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%ld %d", (long int) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%lld %d", (long long int) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w8d %d", (int8_t) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w16d %d", (int16_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w32d %d", (int32_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w64d %d", (int64_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf8d %d", (int_fast8_t) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf16d %d", (int_fast16_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf32d %d", (int_fast32_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf64d %d", (int_fast64_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %u */
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hhu %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hu %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%u %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%lu %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%llu %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w8u %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w16u %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w32u %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w64u %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf8u %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf16u %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf32u %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf64u %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %b */
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hhb %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hb %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%b %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%lb %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%llb %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w8b %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w16b %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w32b %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w64b %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf8b %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf16b %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf32b %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf64b %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %o */
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hho %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%ho %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%o %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%lo %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%llo %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w8o %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w16o %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w32o %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w64o %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf8o %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf16o %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf32o %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf64o %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %x */
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hhX %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%hX %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%X %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%lX %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%llX %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w8X %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w16X %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w32X %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%w64X %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf8X %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf16X %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf32X %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_snprintf (result, sizeof (result),
+ "%wf64X %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
}
diff --git a/tests/test-sprintf-posix.h b/tests/test-sprintf-posix.h
index 7f280d3c32..d2f0e579ea 100644
--- a/tests/test-sprintf-posix.h
+++ b/tests/test-sprintf-posix.h
@@ -3404,4 +3404,474 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
ASSERT (strcmp (result, " 33") == 0);
ASSERT (retval == strlen (result));
}
+
+ /* Test the support of argument type/size specifiers for signed integer
+ conversions. */
+
+ {
+ int retval =
+ my_sprintf (result, "%hhd %d", (signed char) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%hd %d", (short) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%d %d", -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%ld %d", (long int) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%lld %d", (long long int) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w8d %d", (int8_t) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w16d %d", (int16_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w32d %d", (int32_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w64d %d", (int64_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf8d %d", (int_fast8_t) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf16d %d", (int_fast16_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf32d %d", (int_fast32_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf64d %d", (int_fast64_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %u */
+
+ {
+ int retval =
+ my_sprintf (result, "%hhu %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%hu %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%u %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%lu %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%llu %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w8u %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w16u %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w32u %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w64u %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf8u %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf16u %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf32u %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf64u %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %b */
+
+ {
+ int retval =
+ my_sprintf (result, "%hhb %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%hb %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%b %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%lb %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%llb %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w8b %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w16b %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w32b %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w64b %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf8b %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf16b %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf32b %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf64b %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %o */
+
+ {
+ int retval =
+ my_sprintf (result, "%hho %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%ho %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%o %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%lo %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%llo %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w8o %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w16o %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w32o %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w64o %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf8o %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf16o %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf32o %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf64o %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %x */
+
+ {
+ int retval =
+ my_sprintf (result, "%hhX %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%hX %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%X %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%lX %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%llX %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w8X %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w16X %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w32X %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%w64X %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf8X %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf16X %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf32X %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
+ {
+ int retval =
+ my_sprintf (result, "%wf64X %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ }
}
diff --git a/tests/test-vasnprintf-posix.c b/tests/test-vasnprintf-posix.c
index 87f4fc290b..bc71e02156 100644
--- a/tests/test-vasnprintf-posix.c
+++ b/tests/test-vasnprintf-posix.c
@@ -4482,6 +4482,606 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
free (result);
}
+ /* Test the support of argument type/size specifiers for signed integer
+ conversions. */
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hhd %d", (signed char) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hd %d", (short) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%d %d", -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%ld %d", (long int) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%lld %d", (long long int) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w8d %d", (int8_t) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w16d %d", (int16_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w32d %d", (int32_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w64d %d", (int64_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf8d %d", (int_fast8_t) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf16d %d", (int_fast16_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf32d %d", (int_fast32_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf64d %d", (int_fast64_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %u */
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hhu %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hu %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%u %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%lu %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%llu %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w8u %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w16u %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w32u %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w64u %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf8u %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf16u %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf32u %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf64u %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %b */
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hhb %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hb %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%b %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%lb %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%llb %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w8b %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w16b %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w32b %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w64b %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf8b %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf16b %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf32b %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf64b %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %o */
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hho %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%ho %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%o %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%lo %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%llo %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w8o %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w16o %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w32o %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w64o %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf8o %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf16o %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf32o %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf64o %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %x */
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hhX %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%hX %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%X %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%lX %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%llX %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w8X %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w16X %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w32X %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%w64X %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf8X %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf16X %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf32X %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%wf64X %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
#if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__
/* Test that the 'I' flag is supported. */
{
diff --git a/tests/test-vasnwprintf-posix.c b/tests/test-vasnwprintf-posix.c
index 49f5f91ebe..f0ecfb082a 100644
--- a/tests/test-vasnwprintf-posix.c
+++ b/tests/test-vasnwprintf-posix.c
@@ -4487,6 +4487,606 @@ test_function (wchar_t * (*my_asnwprintf) (wchar_t *, size_t *, const wchar_t *,
free (result);
}
+ /* Test the support of argument type/size specifiers for signed integer
+ conversions. */
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hhd %d", (signed char) -42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-42 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hd %d", (short) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%d %d", -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%ld %d", (long int) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%lld %d", (long long int) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w8d %d", (int8_t) -42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-42 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w16d %d", (int16_t) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w32d %d", (int32_t) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w64d %d", (int64_t) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf8d %d", (int_fast8_t) -42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-42 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf16d %d", (int_fast16_t) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf32d %d", (int_fast32_t) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf64d %d", (int_fast64_t) -12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"-12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %u */
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hhu %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"42 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hu %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%u %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%lu %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%llu %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w8u %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"42 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w16u %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w32u %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w64u %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf8u %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"42 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf16u %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf32u %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf64u %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"12345 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %b */
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hhb %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"101010 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hb %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%b %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%lb %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%llb %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w8b %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"101010 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w16b %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w32b %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w64b %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf8b %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"101010 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf16b %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf32b %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf64b %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"11000000111001 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %o */
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hho %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"52 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%ho %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%o %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%lo %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%llo %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w8o %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"52 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w16o %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w32o %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w64o %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf8o %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"52 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf16o %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf32o %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf64o %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"30071 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %x */
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hhX %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"2A 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%hX %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%X %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%lX %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%llX %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w8X %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"2A 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w16X %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w32X %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%w64X %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf8X %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (wcscmp (result, L"2A 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf16X %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf32X %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
+ {
+ size_t length;
+ wchar_t *result =
+ my_asnwprintf (NULL, &length, L"%wf64X %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (wcscmp (result, L"3039 33") == 0);
+ ASSERT (length == wcslen (result));
+ free (result);
+ }
+
#if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__
/* Test that the 'I' flag is supported. */
{
diff --git a/tests/test-vasprintf-posix.c b/tests/test-vasprintf-posix.c
index 0da0c7441b..6a18413abb 100644
--- a/tests/test-vasprintf-posix.c
+++ b/tests/test-vasprintf-posix.c
@@ -4420,6 +4420,606 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
ASSERT (retval == strlen (result));
free (result);
}
+
+ /* Test the support of argument type/size specifiers for signed integer
+ conversions. */
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hhd %d", (signed char) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hd %d", (short) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%d %d", -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%ld %d", (long int) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%lld %d", (long long int) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w8d %d", (int8_t) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w16d %d", (int16_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w32d %d", (int32_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w64d %d", (int64_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf8d %d", (int_fast8_t) -42, 33, 44, 55);
+ ASSERT (strcmp (result, "-42 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf16d %d", (int_fast16_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf32d %d", (int_fast32_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf64d %d", (int_fast64_t) -12345, 33, 44, 55);
+ ASSERT (strcmp (result, "-12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %u */
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hhu %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hu %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%u %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%lu %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%llu %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w8u %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w16u %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w32u %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w64u %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf8u %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "42 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf16u %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf32u %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf64u %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "12345 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %b */
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hhb %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hb %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%b %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%lb %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%llb %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w8b %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w16b %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w32b %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w64b %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf8b %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "101010 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf16b %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf32b %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf64b %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "11000000111001 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %o */
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hho %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%ho %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%o %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%lo %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%llo %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w8o %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w16o %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w32o %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w64o %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf8o %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "52 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf16o %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf32o %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf64o %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "30071 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ /* Test the support of argument type/size specifiers for unsigned integer
+ conversions: %x */
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hhX %d", (unsigned char) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%hX %d", (unsigned short) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%X %d", (unsigned int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%lX %d", (unsigned long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%llX %d", (unsigned long long int) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w8X %d", (uint8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w16X %d", (uint16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w32X %d", (uint32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%w64X %d", (uint64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf8X %d", (uint_fast8_t) 42, 33, 44, 55);
+ ASSERT (strcmp (result, "2A 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf16X %d", (uint_fast16_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf32X %d", (uint_fast32_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%wf64X %d", (uint_fast64_t) 12345, 33, 44, 55);
+ ASSERT (strcmp (result, "3039 33") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
}
static int