+ // three positionals with the same index mixed with other pos args:
+ r = wxSnprintf(buf, MAX_TEST_LEN, wxT("%4$d %2$f %1$s %2$s %3$d"), "hello", "world", 3, 4);
+ CPPUNIT_ASSERT(r != -1);
+
+ // a missing positional arg: this should result in an error but not all
+ // implementations detect it (e.g. glibc doesn't)
+ r = wxSnprintf(buf, MAX_TEST_LEN, wxT("%1$d %3$d"), 1, 2, 3);
+ CPPUNIT_ASSERT_EQUAL(-1, r);
+
+ // positional and non-positionals in the same format string:
+ r = wxSnprintf(buf, MAX_TEST_LEN, wxT("%1$d %d %3$d"), 1, 2, 3);
+ CPPUNIT_ASSERT_EQUAL(-1, r);
+}
+
+#endif // wxUSE_WXVSNPRINTF
+
+void VsnprintfTestCase::BigToSmallBuffer()
+{
+ char bufa[1024], bufa2[16], bufa3[4], bufa4;
+
+#if wxUSE_UNICODE
+ wchar_t bufw[1024], bufw2[16], bufw3[4], bufw4;
+ Misc(bufw, 1024);
+ Misc(bufw2, 16);
+ Misc(bufw3, 4);
+ Misc(&bufw4, 1);
+#endif // wxUSE_UNICODE
+
+ Misc(bufa, 1024);
+ Misc(bufa2, 16);
+ Misc(bufa3, 4);
+ Misc(&bufa4, 1);