+
+#if HAVE_WCHAR_T
+ /* Test that converting an invalid wchar_t[] to char[] fails with EILSEQ. */
+ {
+ static const wchar_t input[] = { (wchar_t) 1702057263, 114, 0 };
+ size_t length;
+ char *result = my_asnprintf (NULL, &length, "%ls %d", input, 99);
+ if (result == NULL)
+ ASSERT (errno == EILSEQ);
+ else
+ free (result);
+ }
+ {
+ static const wchar_t input[] = { (wchar_t) 1702057263, 114, 0 };
+ size_t length;
+ char *result = my_asnprintf (NULL, &length, "%3ls %d", input, 99);
+ if (result == NULL)
+ ASSERT (errno == EILSEQ);
+ else
+ free (result);
+ }
+ {
+ static const wchar_t input[] = { (wchar_t) 1702057263, 114, 0 };
+ size_t length;
+ char *result = my_asnprintf (NULL, &length, "%.1ls %d", input, 99);
+ if (result == NULL)
+ ASSERT (errno == EILSEQ);
+ else
+ free (result);
+ }
+ {
+ static const wchar_t input[] = { (wchar_t) 1702057263, 114, 0 };
+ size_t length;
+ char *result = my_asnprintf (NULL, &length, "%3.1ls %d", input, 99);
+ if (result == NULL)
+ ASSERT (errno == EILSEQ);
+ else
+ free (result);
+ }
+#endif
+
+#if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__
+ /* Test that the 'I' flag is supported. */
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%Id %d", 1234567, 99);
+ ASSERT (result != NULL);
+ ASSERT (strcmp (result, "1234567 99") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+#endif