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