1*71db0c75SAndroid Build Coastguard Worker //===-- Unittests for vsprintf --------------------------------------------===//
2*71db0c75SAndroid Build Coastguard Worker //
3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*71db0c75SAndroid Build Coastguard Worker //
7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
8*71db0c75SAndroid Build Coastguard Worker
9*71db0c75SAndroid Build Coastguard Worker // These tests are shortened copies of the non-v variants of the printf
10*71db0c75SAndroid Build Coastguard Worker // functions. This is because these functions are identical in every way except
11*71db0c75SAndroid Build Coastguard Worker // for how the varargs are passed.
12*71db0c75SAndroid Build Coastguard Worker
13*71db0c75SAndroid Build Coastguard Worker #include "src/stdio/vsprintf.h"
14*71db0c75SAndroid Build Coastguard Worker
15*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h"
16*71db0c75SAndroid Build Coastguard Worker
call_vsprintf(char * __restrict buffer,const char * __restrict format,...)17*71db0c75SAndroid Build Coastguard Worker int call_vsprintf(char *__restrict buffer, const char *__restrict format, ...) {
18*71db0c75SAndroid Build Coastguard Worker va_list vlist;
19*71db0c75SAndroid Build Coastguard Worker va_start(vlist, format);
20*71db0c75SAndroid Build Coastguard Worker int ret = LIBC_NAMESPACE::vsprintf(buffer, format, vlist);
21*71db0c75SAndroid Build Coastguard Worker va_end(vlist);
22*71db0c75SAndroid Build Coastguard Worker return ret;
23*71db0c75SAndroid Build Coastguard Worker }
24*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcVSPrintfTest,SimpleNoConv)25*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcVSPrintfTest, SimpleNoConv) {
26*71db0c75SAndroid Build Coastguard Worker char buff[64];
27*71db0c75SAndroid Build Coastguard Worker int written;
28*71db0c75SAndroid Build Coastguard Worker
29*71db0c75SAndroid Build Coastguard Worker written = call_vsprintf(buff, "A simple string with no conversions.");
30*71db0c75SAndroid Build Coastguard Worker EXPECT_EQ(written, 36);
31*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(buff, "A simple string with no conversions.");
32*71db0c75SAndroid Build Coastguard Worker }
33*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcVSPrintfTest,PercentConv)34*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcVSPrintfTest, PercentConv) {
35*71db0c75SAndroid Build Coastguard Worker char buff[64];
36*71db0c75SAndroid Build Coastguard Worker int written;
37*71db0c75SAndroid Build Coastguard Worker
38*71db0c75SAndroid Build Coastguard Worker written = call_vsprintf(buff, "%%");
39*71db0c75SAndroid Build Coastguard Worker EXPECT_EQ(written, 1);
40*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(buff, "%");
41*71db0c75SAndroid Build Coastguard Worker
42*71db0c75SAndroid Build Coastguard Worker written = call_vsprintf(buff, "abc %% def");
43*71db0c75SAndroid Build Coastguard Worker EXPECT_EQ(written, 9);
44*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(buff, "abc % def");
45*71db0c75SAndroid Build Coastguard Worker
46*71db0c75SAndroid Build Coastguard Worker written = call_vsprintf(buff, "%%%%%%");
47*71db0c75SAndroid Build Coastguard Worker EXPECT_EQ(written, 3);
48*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(buff, "%%%");
49*71db0c75SAndroid Build Coastguard Worker }
50*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcVSPrintfTest,CharConv)51*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcVSPrintfTest, CharConv) {
52*71db0c75SAndroid Build Coastguard Worker char buff[64];
53*71db0c75SAndroid Build Coastguard Worker int written;
54*71db0c75SAndroid Build Coastguard Worker
55*71db0c75SAndroid Build Coastguard Worker written = call_vsprintf(buff, "%c", 'a');
56*71db0c75SAndroid Build Coastguard Worker EXPECT_EQ(written, 1);
57*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(buff, "a");
58*71db0c75SAndroid Build Coastguard Worker
59*71db0c75SAndroid Build Coastguard Worker written = call_vsprintf(buff, "%3c %-3c", '1', '2');
60*71db0c75SAndroid Build Coastguard Worker EXPECT_EQ(written, 7);
61*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(buff, " 1 2 ");
62*71db0c75SAndroid Build Coastguard Worker
63*71db0c75SAndroid Build Coastguard Worker written = call_vsprintf(buff, "%*c", 2, '3');
64*71db0c75SAndroid Build Coastguard Worker EXPECT_EQ(written, 2);
65*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(buff, " 3");
66*71db0c75SAndroid Build Coastguard Worker }
67