89 lines · cpp
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-exception6//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 14TEST(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 24TEST(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 44TEST(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 64TEST(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 76TEST(LlvmLibcASPrintfTest, ManyReAlloc) {77 char *buff = nullptr;78 char long_str[1001];79 // TODO: simplify test to match with vasprintf_test80 auto expected_num_chars =81 LIBC_NAMESPACE::sprintf(long_str, "%200s%200s%200s", "a", "b", "c");82 long_str[expected_num_chars] = '\0';83 int written;84 written = LIBC_NAMESPACE::asprintf(&buff, long_str);85 EXPECT_EQ(written, expected_num_chars);86 ASSERT_STREQ(buff, long_str);87 free(buff);88}89