116d5c242SMichael Jones //===-- Unittests for vprintf --------------------------------------------===//
216d5c242SMichael Jones //
316d5c242SMichael Jones // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
416d5c242SMichael Jones // See https://llvm.org/LICENSE.txt for license information.
516d5c242SMichael Jones // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
616d5c242SMichael Jones //
716d5c242SMichael Jones //===----------------------------------------------------------------------===//
816d5c242SMichael Jones
916d5c242SMichael Jones // These tests are copies of the non-v variants of the printf functions. This is
1016d5c242SMichael Jones // because these functions are identical in every way except for how the varargs
1116d5c242SMichael Jones // are passed.
1216d5c242SMichael Jones
1316d5c242SMichael Jones #include "src/stdio/vprintf.h"
1416d5c242SMichael Jones
1516d5c242SMichael Jones #include "test/UnitTest/Test.h"
1616d5c242SMichael Jones
call_vprintf(const char * __restrict format,...)1716d5c242SMichael Jones int call_vprintf(const char *__restrict format, ...) {
1816d5c242SMichael Jones va_list vlist;
1916d5c242SMichael Jones va_start(vlist, format);
20*b6bc9d72SGuillaume Chatelet int ret = LIBC_NAMESPACE::vprintf(format, vlist);
2116d5c242SMichael Jones va_end(vlist);
2216d5c242SMichael Jones return ret;
2316d5c242SMichael Jones }
2416d5c242SMichael Jones
TEST(LlvmLibcVPrintfTest,PrintOut)2516d5c242SMichael Jones TEST(LlvmLibcVPrintfTest, PrintOut) {
2616d5c242SMichael Jones int written;
2716d5c242SMichael Jones
2816d5c242SMichael Jones constexpr char simple[] = "A simple string with no conversions.\n";
2916d5c242SMichael Jones written = call_vprintf(simple);
3016d5c242SMichael Jones EXPECT_EQ(written, static_cast<int>(sizeof(simple) - 1));
3116d5c242SMichael Jones
3216d5c242SMichael Jones constexpr char numbers[] = "1234567890\n";
3316d5c242SMichael Jones written = call_vprintf("%s", numbers);
3416d5c242SMichael Jones EXPECT_EQ(written, static_cast<int>(sizeof(numbers) - 1));
3516d5c242SMichael Jones
3616d5c242SMichael Jones constexpr char format_more[] = "%s and more\n";
3716d5c242SMichael Jones constexpr char short_numbers[] = "1234";
3816d5c242SMichael Jones written = call_vprintf(format_more, short_numbers);
3916d5c242SMichael Jones EXPECT_EQ(written,
4016d5c242SMichael Jones static_cast<int>(sizeof(format_more) + sizeof(short_numbers) - 4));
4116d5c242SMichael Jones }
42