1ff6fe39eSMichael Jones //===-- Unittests for sprintf ---------------------------------------------===// 2ff6fe39eSMichael Jones // 3ff6fe39eSMichael Jones // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4ff6fe39eSMichael Jones // See https://llvm.org/LICENSE.txt for license information. 5ff6fe39eSMichael Jones // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6ff6fe39eSMichael Jones // 7ff6fe39eSMichael Jones //===----------------------------------------------------------------------===// 8ff6fe39eSMichael Jones 9ff6fe39eSMichael Jones #include "src/stdio/sprintf.h" 10ff6fe39eSMichael Jones 11ff6fe39eSMichael Jones #include "utils/UnitTest/Test.h" 12ff6fe39eSMichael Jones 13ff6fe39eSMichael Jones TEST(LlvmLibcSPrintfTest, SimpleNoConv) { 14ff6fe39eSMichael Jones char buff[64]; 15ff6fe39eSMichael Jones int written; 16ff6fe39eSMichael Jones 17ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "A simple string with no conversions."); 18ff6fe39eSMichael Jones EXPECT_EQ(written, 36); 19ff6fe39eSMichael Jones ASSERT_STREQ(buff, "A simple string with no conversions."); 20ff6fe39eSMichael Jones } 21ff6fe39eSMichael Jones 22ff6fe39eSMichael Jones TEST(LlvmLibcSPrintfTest, PercentConv) { 23ff6fe39eSMichael Jones char buff[64]; 24ff6fe39eSMichael Jones int written; 25ff6fe39eSMichael Jones 26ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%%"); 27ff6fe39eSMichael Jones EXPECT_EQ(written, 1); 28ff6fe39eSMichael Jones ASSERT_STREQ(buff, "%"); 29ff6fe39eSMichael Jones 30ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "abc %% def"); 31ff6fe39eSMichael Jones EXPECT_EQ(written, 9); 32ff6fe39eSMichael Jones ASSERT_STREQ(buff, "abc % def"); 33ff6fe39eSMichael Jones 34ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%%%%%%"); 35ff6fe39eSMichael Jones EXPECT_EQ(written, 3); 36ff6fe39eSMichael Jones ASSERT_STREQ(buff, "%%%"); 37ff6fe39eSMichael Jones } 38ff6fe39eSMichael Jones 39ff6fe39eSMichael Jones TEST(LlvmLibcSPrintfTest, CharConv) { 40ff6fe39eSMichael Jones char buff[64]; 41ff6fe39eSMichael Jones int written; 42ff6fe39eSMichael Jones 43ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%c", 'a'); 44ff6fe39eSMichael Jones EXPECT_EQ(written, 1); 45ff6fe39eSMichael Jones ASSERT_STREQ(buff, "a"); 46ff6fe39eSMichael Jones 47ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%3c %-3c", '1', '2'); 48ff6fe39eSMichael Jones EXPECT_EQ(written, 7); 49ff6fe39eSMichael Jones ASSERT_STREQ(buff, " 1 2 "); 50ff6fe39eSMichael Jones 51ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%*c", 2, '3'); 52ff6fe39eSMichael Jones EXPECT_EQ(written, 2); 53ff6fe39eSMichael Jones ASSERT_STREQ(buff, " 3"); 54ff6fe39eSMichael Jones } 55ff6fe39eSMichael Jones 56ff6fe39eSMichael Jones TEST(LlvmLibcSPrintfTest, StringConv) { 57ff6fe39eSMichael Jones char buff[64]; 58ff6fe39eSMichael Jones int written; 59ff6fe39eSMichael Jones 60ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%s", "abcDEF123"); 61ff6fe39eSMichael Jones EXPECT_EQ(written, 9); 62ff6fe39eSMichael Jones ASSERT_STREQ(buff, "abcDEF123"); 63ff6fe39eSMichael Jones 64ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%10s %-10s", "centered", "title"); 65ff6fe39eSMichael Jones EXPECT_EQ(written, 21); 66ff6fe39eSMichael Jones ASSERT_STREQ(buff, " centered title "); 67ff6fe39eSMichael Jones 68ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%-5.4s%-4.4s", "words can describe", 69ff6fe39eSMichael Jones "soups most delicious"); 70ff6fe39eSMichael Jones EXPECT_EQ(written, 9); 71ff6fe39eSMichael Jones ASSERT_STREQ(buff, "word soup"); 72ff6fe39eSMichael Jones 73ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%*s %.*s %*.*s", 10, "beginning", 2, 74ff6fe39eSMichael Jones "isn't", 12, 10, "important. Ever."); 75ff6fe39eSMichael Jones EXPECT_EQ(written, 26); 76ff6fe39eSMichael Jones ASSERT_STREQ(buff, " beginning is important."); 77ff6fe39eSMichael Jones } 78ff6fe39eSMichael Jones 791be3669dSMichael Jones TEST(LlvmLibcSPrintfTest, IntConv) { 801be3669dSMichael Jones char buff[64]; 811be3669dSMichael Jones int written; 821be3669dSMichael Jones 831be3669dSMichael Jones // Basic Tests. 841be3669dSMichael Jones 851be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%d", 123); 861be3669dSMichael Jones EXPECT_EQ(written, 3); 871be3669dSMichael Jones ASSERT_STREQ(buff, "123"); 881be3669dSMichael Jones 891be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%i", -456); 901be3669dSMichael Jones EXPECT_EQ(written, 4); 911be3669dSMichael Jones ASSERT_STREQ(buff, "-456"); 921be3669dSMichael Jones 931be3669dSMichael Jones // Length Modifier Tests. 941be3669dSMichael Jones 951be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%hhu", 257); // 0x10001 961be3669dSMichael Jones EXPECT_EQ(written, 1); 971be3669dSMichael Jones ASSERT_STREQ(buff, "1"); 981be3669dSMichael Jones 991be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%llu", 18446744073709551615ull); 1001be3669dSMichael Jones EXPECT_EQ(written, 20); 1011be3669dSMichael Jones ASSERT_STREQ(buff, "18446744073709551615"); // ull max 1021be3669dSMichael Jones 1031be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%tu", ~ptrdiff_t(0)); 1041be3669dSMichael Jones if (sizeof(ptrdiff_t) == 8) { 1051be3669dSMichael Jones EXPECT_EQ(written, 20); 1061be3669dSMichael Jones ASSERT_STREQ(buff, "18446744073709551615"); 1071be3669dSMichael Jones } else if (sizeof(ptrdiff_t) == 4) { 1081be3669dSMichael Jones EXPECT_EQ(written, 10); 1091be3669dSMichael Jones ASSERT_STREQ(buff, "4294967296"); 1101be3669dSMichael Jones } 1111be3669dSMichael Jones 1121be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%lld", -9223372036854775807ll - 1ll); 1131be3669dSMichael Jones EXPECT_EQ(written, 20); 1141be3669dSMichael Jones ASSERT_STREQ(buff, "-9223372036854775808"); // ll min 1151be3669dSMichael Jones 1161be3669dSMichael Jones // Min Width Tests. 1171be3669dSMichael Jones 1181be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%4d", 789); 1191be3669dSMichael Jones EXPECT_EQ(written, 4); 1201be3669dSMichael Jones ASSERT_STREQ(buff, " 789"); 1211be3669dSMichael Jones 1221be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%2d", 987); 1231be3669dSMichael Jones EXPECT_EQ(written, 3); 1241be3669dSMichael Jones ASSERT_STREQ(buff, "987"); 1251be3669dSMichael Jones 1261be3669dSMichael Jones // Precision Tests. 1271be3669dSMichael Jones 1281be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%d", 0); 1291be3669dSMichael Jones EXPECT_EQ(written, 1); 1301be3669dSMichael Jones ASSERT_STREQ(buff, "0"); 1311be3669dSMichael Jones 1321be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%.0d", 0); 1331be3669dSMichael Jones EXPECT_EQ(written, 0); 1341be3669dSMichael Jones ASSERT_STREQ(buff, ""); 1351be3669dSMichael Jones 1361be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%.5d", 654); 1371be3669dSMichael Jones EXPECT_EQ(written, 5); 1381be3669dSMichael Jones ASSERT_STREQ(buff, "00654"); 1391be3669dSMichael Jones 1401be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%.5d", -321); 1411be3669dSMichael Jones EXPECT_EQ(written, 6); 1421be3669dSMichael Jones ASSERT_STREQ(buff, "-00321"); 1431be3669dSMichael Jones 1441be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%.2d", 135); 1451be3669dSMichael Jones EXPECT_EQ(written, 3); 1461be3669dSMichael Jones ASSERT_STREQ(buff, "135"); 1471be3669dSMichael Jones 1481be3669dSMichael Jones // Flag Tests. 1491be3669dSMichael Jones 1501be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%.5d", -321); 1511be3669dSMichael Jones EXPECT_EQ(written, 6); 1521be3669dSMichael Jones ASSERT_STREQ(buff, "-00321"); 1531be3669dSMichael Jones 1541be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%-5d", 246); 1551be3669dSMichael Jones EXPECT_EQ(written, 5); 1561be3669dSMichael Jones ASSERT_STREQ(buff, "246 "); 1571be3669dSMichael Jones 1581be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%-5d", -147); 1591be3669dSMichael Jones EXPECT_EQ(written, 5); 1601be3669dSMichael Jones ASSERT_STREQ(buff, "-147 "); 1611be3669dSMichael Jones 1621be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%+d", 258); 1631be3669dSMichael Jones EXPECT_EQ(written, 4); 1641be3669dSMichael Jones ASSERT_STREQ(buff, "+258"); 1651be3669dSMichael Jones 1661be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "% d", 369); 1671be3669dSMichael Jones EXPECT_EQ(written, 4); 1681be3669dSMichael Jones ASSERT_STREQ(buff, " 369"); 1691be3669dSMichael Jones 1701be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%05d", 470); 1711be3669dSMichael Jones EXPECT_EQ(written, 5); 1721be3669dSMichael Jones ASSERT_STREQ(buff, "00470"); 1731be3669dSMichael Jones 1741be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%05d", -581); 1751be3669dSMichael Jones EXPECT_EQ(written, 5); 1761be3669dSMichael Jones ASSERT_STREQ(buff, "-0581"); 1771be3669dSMichael Jones 1781be3669dSMichael Jones // Combined Tests. 1791be3669dSMichael Jones 1801be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%+ u", 692); 1811be3669dSMichael Jones EXPECT_EQ(written, 3); 1821be3669dSMichael Jones ASSERT_STREQ(buff, "692"); 1831be3669dSMichael Jones 1841be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%+ -05d", 703); 1851be3669dSMichael Jones EXPECT_EQ(written, 5); 1861be3669dSMichael Jones ASSERT_STREQ(buff, "+703 "); 1871be3669dSMichael Jones 1881be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%7.5d", 814); 1891be3669dSMichael Jones EXPECT_EQ(written, 7); 1901be3669dSMichael Jones ASSERT_STREQ(buff, " 00814"); 1911be3669dSMichael Jones 1921be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%7.5d", -925); 1931be3669dSMichael Jones EXPECT_EQ(written, 7); 1941be3669dSMichael Jones ASSERT_STREQ(buff, " -00925"); 1951be3669dSMichael Jones 1961be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%7.5d", 159); 1971be3669dSMichael Jones EXPECT_EQ(written, 7); 1981be3669dSMichael Jones ASSERT_STREQ(buff, " 00159"); 1991be3669dSMichael Jones 2001be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "% -7.5d", 260); 2011be3669dSMichael Jones EXPECT_EQ(written, 7); 2021be3669dSMichael Jones ASSERT_STREQ(buff, " 00260 "); 2031be3669dSMichael Jones 2041be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%5.4d", 10000); 2051be3669dSMichael Jones EXPECT_EQ(written, 5); 2061be3669dSMichael Jones ASSERT_STREQ(buff, "10000"); 2071be3669dSMichael Jones 2081be3669dSMichael Jones // Multiple Conversion Tests. 2091be3669dSMichael Jones 2101be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%10d %-10d", 456, -789); 2111be3669dSMichael Jones EXPECT_EQ(written, 21); 2121be3669dSMichael Jones ASSERT_STREQ(buff, " 456 -789 "); 2131be3669dSMichael Jones 2141be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "%-5.4d%+.4u", 75, 25); 2151be3669dSMichael Jones EXPECT_EQ(written, 9); 2161be3669dSMichael Jones ASSERT_STREQ(buff, "0075 0025"); 2171be3669dSMichael Jones 2181be3669dSMichael Jones written = __llvm_libc::sprintf(buff, "% 05hhi %+-0.5llu %-+ 06.3zd", 2191be3669dSMichael Jones 256 + 127, 68719476736ll, size_t(2)); 2201be3669dSMichael Jones EXPECT_EQ(written, 24); 2211be3669dSMichael Jones ASSERT_STREQ(buff, " 0127 68719476736 +002 "); 2221be3669dSMichael Jones } 2231be3669dSMichael Jones 224*652ecb25SMichael Jones TEST(LlvmLibcSPrintfTest, HexConv) { 225*652ecb25SMichael Jones char buff[64]; 226*652ecb25SMichael Jones int written; 227*652ecb25SMichael Jones 228*652ecb25SMichael Jones // Basic Tests. 229*652ecb25SMichael Jones 230*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%x", 0x123a); 231*652ecb25SMichael Jones EXPECT_EQ(written, 4); 232*652ecb25SMichael Jones ASSERT_STREQ(buff, "123a"); 233*652ecb25SMichael Jones 234*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%X", 0x456b); 235*652ecb25SMichael Jones EXPECT_EQ(written, 4); 236*652ecb25SMichael Jones ASSERT_STREQ(buff, "456B"); 237*652ecb25SMichael Jones 238*652ecb25SMichael Jones // Length Modifier Tests. 239*652ecb25SMichael Jones 240*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%hhx", 0x10001); 241*652ecb25SMichael Jones EXPECT_EQ(written, 1); 242*652ecb25SMichael Jones ASSERT_STREQ(buff, "1"); 243*652ecb25SMichael Jones 244*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%llx", 0xffffffffffffffffull); 245*652ecb25SMichael Jones EXPECT_EQ(written, 16); 246*652ecb25SMichael Jones ASSERT_STREQ(buff, "ffffffffffffffff"); // ull max 247*652ecb25SMichael Jones 248*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%tX", ~ptrdiff_t(0)); 249*652ecb25SMichael Jones if (sizeof(ptrdiff_t) == 8) { 250*652ecb25SMichael Jones EXPECT_EQ(written, 16); 251*652ecb25SMichael Jones ASSERT_STREQ(buff, "FFFFFFFFFFFFFFFF"); 252*652ecb25SMichael Jones } else if (sizeof(ptrdiff_t) == 4) { 253*652ecb25SMichael Jones EXPECT_EQ(written, 8); 254*652ecb25SMichael Jones ASSERT_STREQ(buff, "FFFFFFFF"); 255*652ecb25SMichael Jones } 256*652ecb25SMichael Jones 257*652ecb25SMichael Jones // Min Width Tests. 258*652ecb25SMichael Jones 259*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%4x", 0x789); 260*652ecb25SMichael Jones EXPECT_EQ(written, 4); 261*652ecb25SMichael Jones ASSERT_STREQ(buff, " 789"); 262*652ecb25SMichael Jones 263*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%2X", 0x987); 264*652ecb25SMichael Jones EXPECT_EQ(written, 3); 265*652ecb25SMichael Jones ASSERT_STREQ(buff, "987"); 266*652ecb25SMichael Jones 267*652ecb25SMichael Jones // Precision Tests. 268*652ecb25SMichael Jones 269*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%x", 0); 270*652ecb25SMichael Jones EXPECT_EQ(written, 1); 271*652ecb25SMichael Jones ASSERT_STREQ(buff, "0"); 272*652ecb25SMichael Jones 273*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%.0x", 0); 274*652ecb25SMichael Jones EXPECT_EQ(written, 0); 275*652ecb25SMichael Jones ASSERT_STREQ(buff, ""); 276*652ecb25SMichael Jones 277*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%.5x", 0x1F3); 278*652ecb25SMichael Jones EXPECT_EQ(written, 5); 279*652ecb25SMichael Jones ASSERT_STREQ(buff, "001f3"); 280*652ecb25SMichael Jones 281*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%.2x", 0x135); 282*652ecb25SMichael Jones EXPECT_EQ(written, 3); 283*652ecb25SMichael Jones ASSERT_STREQ(buff, "135"); 284*652ecb25SMichael Jones 285*652ecb25SMichael Jones // Flag Tests. 286*652ecb25SMichael Jones 287*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%-5x", 0x246); 288*652ecb25SMichael Jones EXPECT_EQ(written, 5); 289*652ecb25SMichael Jones ASSERT_STREQ(buff, "246 "); 290*652ecb25SMichael Jones 291*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%#x", 0xd3f); 292*652ecb25SMichael Jones EXPECT_EQ(written, 5); 293*652ecb25SMichael Jones ASSERT_STREQ(buff, "0xd3f"); 294*652ecb25SMichael Jones 295*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%#X", 0xE40); 296*652ecb25SMichael Jones EXPECT_EQ(written, 5); 297*652ecb25SMichael Jones ASSERT_STREQ(buff, "0XE40"); 298*652ecb25SMichael Jones 299*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%05x", 0x470); 300*652ecb25SMichael Jones EXPECT_EQ(written, 5); 301*652ecb25SMichael Jones ASSERT_STREQ(buff, "00470"); 302*652ecb25SMichael Jones 303*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%0#6x", 0x8c3); 304*652ecb25SMichael Jones EXPECT_EQ(written, 6); 305*652ecb25SMichael Jones ASSERT_STREQ(buff, "0x08c3"); 306*652ecb25SMichael Jones 307*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%-#6x", 0x5f0); 308*652ecb25SMichael Jones EXPECT_EQ(written, 6); 309*652ecb25SMichael Jones ASSERT_STREQ(buff, "0x5f0 "); 310*652ecb25SMichael Jones 311*652ecb25SMichael Jones // Combined Tests. 312*652ecb25SMichael Jones 313*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%#-07x", 0x703); 314*652ecb25SMichael Jones EXPECT_EQ(written, 7); 315*652ecb25SMichael Jones ASSERT_STREQ(buff, "0x703 "); 316*652ecb25SMichael Jones 317*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%7.5x", 0x814); 318*652ecb25SMichael Jones EXPECT_EQ(written, 7); 319*652ecb25SMichael Jones ASSERT_STREQ(buff, " 00814"); 320*652ecb25SMichael Jones 321*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%#9.5X", 0x9d4); 322*652ecb25SMichael Jones EXPECT_EQ(written, 9); 323*652ecb25SMichael Jones ASSERT_STREQ(buff, " 0X009D4"); 324*652ecb25SMichael Jones 325*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%-7.5x", 0x260); 326*652ecb25SMichael Jones EXPECT_EQ(written, 7); 327*652ecb25SMichael Jones ASSERT_STREQ(buff, "00260 "); 328*652ecb25SMichael Jones 329*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%5.4x", 0x10000); 330*652ecb25SMichael Jones EXPECT_EQ(written, 5); 331*652ecb25SMichael Jones ASSERT_STREQ(buff, "10000"); 332*652ecb25SMichael Jones 333*652ecb25SMichael Jones // Multiple Conversion Tests. 334*652ecb25SMichael Jones 335*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%10X %-#10x", 0x45b, 0x789); 336*652ecb25SMichael Jones EXPECT_EQ(written, 21); 337*652ecb25SMichael Jones ASSERT_STREQ(buff, " 45B 0x789 "); 338*652ecb25SMichael Jones 339*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%-5.4x%#.4x", 0x75, 0x25); 340*652ecb25SMichael Jones EXPECT_EQ(written, 11); 341*652ecb25SMichael Jones ASSERT_STREQ(buff, "0075 0x0025"); 342*652ecb25SMichael Jones 343*652ecb25SMichael Jones written = __llvm_libc::sprintf(buff, "%04hhX %#.5llx %-6.3zX", 256 + 0x7f, 344*652ecb25SMichael Jones 0x1000000000ll, size_t(2)); 345*652ecb25SMichael Jones EXPECT_EQ(written, 24); 346*652ecb25SMichael Jones ASSERT_STREQ(buff, "007F 0x1000000000 002 "); 347*652ecb25SMichael Jones } 348*652ecb25SMichael Jones 349ff6fe39eSMichael Jones #ifndef LLVM_LIBC_PRINTF_DISABLE_INDEX_MODE 350ff6fe39eSMichael Jones TEST(LlvmLibcSPrintfTest, IndexModeParsing) { 351ff6fe39eSMichael Jones char buff[64]; 352ff6fe39eSMichael Jones int written; 353ff6fe39eSMichael Jones 354ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%1$s", "abcDEF123"); 355ff6fe39eSMichael Jones EXPECT_EQ(written, 9); 356ff6fe39eSMichael Jones ASSERT_STREQ(buff, "abcDEF123"); 357ff6fe39eSMichael Jones 358ff6fe39eSMichael Jones written = __llvm_libc::sprintf(buff, "%1$s %%", "abcDEF123"); 359ff6fe39eSMichael Jones EXPECT_EQ(written, 11); 360ff6fe39eSMichael Jones ASSERT_STREQ(buff, "abcDEF123 %"); 361ff6fe39eSMichael Jones 362ff6fe39eSMichael Jones written = 363ff6fe39eSMichael Jones __llvm_libc::sprintf(buff, "%3$s %1$s %2$s", "is", "hard", "ordering"); 364ff6fe39eSMichael Jones EXPECT_EQ(written, 16); 365ff6fe39eSMichael Jones ASSERT_STREQ(buff, "ordering is hard"); 366ff6fe39eSMichael Jones 367ff6fe39eSMichael Jones written = __llvm_libc::sprintf( 368ff6fe39eSMichael Jones buff, "%10$s %9$s %8$c %7$s %6$s, %6$s %5$s %4$-*1$s %3$.*11$s %2$s. %%", 369ff6fe39eSMichael Jones 6, "pain", "alphabetical", "such", "is", "this", "do", 'u', "would", 370ff6fe39eSMichael Jones "why", 1); 371ff6fe39eSMichael Jones EXPECT_EQ(written, 45); 372ff6fe39eSMichael Jones ASSERT_STREQ(buff, "why would u do this, this is such a pain. %"); 373ff6fe39eSMichael Jones } 374ff6fe39eSMichael Jones #endif // LLVM_LIBC_PRINTF_DISABLE_INDEX_MODE 375