|  | //===-- Unittests for vsprintf --------------------------------------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | // These tests are shortened copies of the non-v variants of the printf | 
|  | // functions. This is because these functions are identical in every way except | 
|  | // for how the varargs are passed. | 
|  |  | 
|  | #include "src/stdio/vsprintf.h" | 
|  |  | 
|  | #include "test/UnitTest/Test.h" | 
|  |  | 
|  | int call_vsprintf(char *__restrict buffer, const char *__restrict format, ...) { | 
|  | va_list vlist; | 
|  | va_start(vlist, format); | 
|  | int ret = LIBC_NAMESPACE::vsprintf(buffer, format, vlist); | 
|  | va_end(vlist); | 
|  | return ret; | 
|  | } | 
|  |  | 
|  | TEST(LlvmLibcVSPrintfTest, SimpleNoConv) { | 
|  | char buff[64]; | 
|  | int written; | 
|  |  | 
|  | written = call_vsprintf(buff, "A simple string with no conversions."); | 
|  | EXPECT_EQ(written, 36); | 
|  | ASSERT_STREQ(buff, "A simple string with no conversions."); | 
|  | } | 
|  |  | 
|  | TEST(LlvmLibcVSPrintfTest, PercentConv) { | 
|  | char buff[64]; | 
|  | int written; | 
|  |  | 
|  | written = call_vsprintf(buff, "%%"); | 
|  | EXPECT_EQ(written, 1); | 
|  | ASSERT_STREQ(buff, "%"); | 
|  |  | 
|  | written = call_vsprintf(buff, "abc %% def"); | 
|  | EXPECT_EQ(written, 9); | 
|  | ASSERT_STREQ(buff, "abc % def"); | 
|  |  | 
|  | written = call_vsprintf(buff, "%%%%%%"); | 
|  | EXPECT_EQ(written, 3); | 
|  | ASSERT_STREQ(buff, "%%%"); | 
|  | } | 
|  |  | 
|  | TEST(LlvmLibcVSPrintfTest, CharConv) { | 
|  | char buff[64]; | 
|  | int written; | 
|  |  | 
|  | written = call_vsprintf(buff, "%c", 'a'); | 
|  | EXPECT_EQ(written, 1); | 
|  | ASSERT_STREQ(buff, "a"); | 
|  |  | 
|  | written = call_vsprintf(buff, "%3c %-3c", '1', '2'); | 
|  | EXPECT_EQ(written, 7); | 
|  | ASSERT_STREQ(buff, "  1 2  "); | 
|  |  | 
|  | written = call_vsprintf(buff, "%*c", 2, '3'); | 
|  | EXPECT_EQ(written, 2); | 
|  | ASSERT_STREQ(buff, " 3"); | 
|  | } |