brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 0222742 Raw
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