1*a5e67fbaSTsz Chan //===-- Unittests for asprintf--------------------------------------------===// 2*a5e67fbaSTsz Chan // 3*a5e67fbaSTsz Chan // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*a5e67fbaSTsz Chan // See https://llvm.org/LICENSE.txt for license information. 5*a5e67fbaSTsz Chan // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*a5e67fbaSTsz Chan // 7*a5e67fbaSTsz Chan //===----------------------------------------------------------------------===// 8*a5e67fbaSTsz Chan 9*a5e67fbaSTsz Chan #include "src/stdio/asprintf.h" 10*a5e67fbaSTsz Chan #include "src/stdio/sprintf.h" 11*a5e67fbaSTsz Chan #include "src/string/memset.h" 12*a5e67fbaSTsz Chan #include "test/UnitTest/Test.h" 13*a5e67fbaSTsz Chan 14*a5e67fbaSTsz Chan TEST(LlvmLibcASPrintfTest, SimpleNoConv) { 15*a5e67fbaSTsz Chan char *buff = nullptr; 16*a5e67fbaSTsz Chan int written; 17*a5e67fbaSTsz Chan written = 18*a5e67fbaSTsz Chan LIBC_NAMESPACE::asprintf(&buff, "A simple string with no conversions."); 19*a5e67fbaSTsz Chan EXPECT_EQ(written, 36); 20*a5e67fbaSTsz Chan ASSERT_STREQ(buff, "A simple string with no conversions."); 21*a5e67fbaSTsz Chan free(buff); 22*a5e67fbaSTsz Chan } 23*a5e67fbaSTsz Chan 24*a5e67fbaSTsz Chan TEST(LlvmLibcASPrintfTest, PercentConv) { 25*a5e67fbaSTsz Chan char *buff = nullptr; 26*a5e67fbaSTsz Chan int written; 27*a5e67fbaSTsz Chan 28*a5e67fbaSTsz Chan written = LIBC_NAMESPACE::asprintf(&buff, "%%"); 29*a5e67fbaSTsz Chan EXPECT_EQ(written, 1); 30*a5e67fbaSTsz Chan ASSERT_STREQ(buff, "%"); 31*a5e67fbaSTsz Chan free(buff); 32*a5e67fbaSTsz Chan 33*a5e67fbaSTsz Chan written = LIBC_NAMESPACE::asprintf(&buff, "abc %% def"); 34*a5e67fbaSTsz Chan EXPECT_EQ(written, 9); 35*a5e67fbaSTsz Chan ASSERT_STREQ(buff, "abc % def"); 36*a5e67fbaSTsz Chan free(buff); 37*a5e67fbaSTsz Chan 38*a5e67fbaSTsz Chan written = LIBC_NAMESPACE::asprintf(&buff, "%%%%%%"); 39*a5e67fbaSTsz Chan EXPECT_EQ(written, 3); 40*a5e67fbaSTsz Chan ASSERT_STREQ(buff, "%%%"); 41*a5e67fbaSTsz Chan free(buff); 42*a5e67fbaSTsz Chan } 43*a5e67fbaSTsz Chan 44*a5e67fbaSTsz Chan TEST(LlvmLibcASPrintfTest, CharConv) { 45*a5e67fbaSTsz Chan char *buff = nullptr; 46*a5e67fbaSTsz Chan int written; 47*a5e67fbaSTsz Chan 48*a5e67fbaSTsz Chan written = LIBC_NAMESPACE::asprintf(&buff, "%c", 'a'); 49*a5e67fbaSTsz Chan EXPECT_EQ(written, 1); 50*a5e67fbaSTsz Chan ASSERT_STREQ(buff, "a"); 51*a5e67fbaSTsz Chan free(buff); 52*a5e67fbaSTsz Chan 53*a5e67fbaSTsz Chan written = LIBC_NAMESPACE::asprintf(&buff, "%3c %-3c", '1', '2'); 54*a5e67fbaSTsz Chan EXPECT_EQ(written, 7); 55*a5e67fbaSTsz Chan ASSERT_STREQ(buff, " 1 2 "); 56*a5e67fbaSTsz Chan free(buff); 57*a5e67fbaSTsz Chan 58*a5e67fbaSTsz Chan written = LIBC_NAMESPACE::asprintf(&buff, "%*c", 2, '3'); 59*a5e67fbaSTsz Chan EXPECT_EQ(written, 2); 60*a5e67fbaSTsz Chan ASSERT_STREQ(buff, " 3"); 61*a5e67fbaSTsz Chan free(buff); 62*a5e67fbaSTsz Chan } 63*a5e67fbaSTsz Chan 64*a5e67fbaSTsz Chan TEST(LlvmLibcASPrintfTest, LargeStringNoConv) { 65*a5e67fbaSTsz Chan char *buff = nullptr; 66*a5e67fbaSTsz Chan char long_str[1001]; 67*a5e67fbaSTsz Chan LIBC_NAMESPACE::memset(long_str, 'a', 1000); 68*a5e67fbaSTsz Chan long_str[1000] = '\0'; 69*a5e67fbaSTsz Chan int written; 70*a5e67fbaSTsz Chan written = LIBC_NAMESPACE::asprintf(&buff, long_str); 71*a5e67fbaSTsz Chan EXPECT_EQ(written, 1000); 72*a5e67fbaSTsz Chan ASSERT_STREQ(buff, long_str); 73*a5e67fbaSTsz Chan free(buff); 74*a5e67fbaSTsz Chan } 75*a5e67fbaSTsz Chan 76*a5e67fbaSTsz Chan TEST(LlvmLibcASPrintfTest, ManyReAlloc) { 77*a5e67fbaSTsz Chan char *buff = nullptr; 78*a5e67fbaSTsz Chan char long_str[1001]; 79*a5e67fbaSTsz Chan auto expected_num_chars = 80*a5e67fbaSTsz Chan LIBC_NAMESPACE::sprintf(long_str, "%200s%200s%200s", "a", "b", "c"); 81*a5e67fbaSTsz Chan long_str[expected_num_chars] = '\0'; 82*a5e67fbaSTsz Chan int written; 83*a5e67fbaSTsz Chan written = LIBC_NAMESPACE::asprintf(&buff, long_str); 84*a5e67fbaSTsz Chan EXPECT_EQ(written, expected_num_chars); 85*a5e67fbaSTsz Chan ASSERT_STREQ(buff, long_str); 86*a5e67fbaSTsz Chan free(buff); 87*a5e67fbaSTsz Chan } 88