brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 72d7165 Raw
99 lines · cpp
1//===-- Unittests for vasprintf--------------------------------------------===//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/vasprintf.h"10#include "src/string/memset.h"11#include "test/UnitTest/Test.h"12 13int call_vasprintf(char **__restrict buffer, const char *__restrict format,14                   ...) {15  va_list vlist;16  va_start(vlist, format);17  int ret = LIBC_NAMESPACE::vasprintf(buffer, format, vlist);18  va_end(vlist);19  return ret;20}21 22TEST(LlvmLibcVASPrintfTest, SimpleNoConv) {23  char *buff = nullptr;24  int written;25  written = call_vasprintf(&buff, "A simple string with no conversions.");26  EXPECT_EQ(written, 36);27  ASSERT_STREQ(buff, "A simple string with no conversions.");28  free(buff);29}30 31TEST(LlvmLibcVASPrintfTest, PercentConv) {32  char *buff = nullptr;33  int written;34 35  written = call_vasprintf(&buff, "%%");36  EXPECT_EQ(written, 1);37  ASSERT_STREQ(buff, "%");38  free(buff);39 40  written = call_vasprintf(&buff, "abc %% def");41  EXPECT_EQ(written, 9);42  ASSERT_STREQ(buff, "abc % def");43  free(buff);44 45  written = call_vasprintf(&buff, "%%%%%%");46  EXPECT_EQ(written, 3);47  ASSERT_STREQ(buff, "%%%");48  free(buff);49}50 51TEST(LlvmLibcVASPrintfTest, CharConv) {52  char *buff = nullptr;53  int written;54 55  written = call_vasprintf(&buff, "%c", 'a');56  EXPECT_EQ(written, 1);57  ASSERT_STREQ(buff, "a");58  free(buff);59 60  written = call_vasprintf(&buff, "%3c %-3c", '1', '2');61  EXPECT_EQ(written, 7);62  ASSERT_STREQ(buff, "  1 2  ");63  free(buff);64 65  written = call_vasprintf(&buff, "%*c", 2, '3');66  EXPECT_EQ(written, 2);67  ASSERT_STREQ(buff, " 3");68  free(buff);69}70 71TEST(LlvmLibcVASPrintfTest, LargeStringNoConv) {72  char *buff = nullptr;73  char long_str[1001];74  LIBC_NAMESPACE::memset(long_str, 'a', 1000);75  long_str[1000] = '\0';76  int written;77  written = call_vasprintf(&buff, long_str);78  EXPECT_EQ(written, 1000);79  ASSERT_STREQ(buff, long_str);80  free(buff);81}82 83TEST(LlvmLibcVASPrintfTest, ManyReAlloc) {84  char *buff = nullptr;85  const int expected_num_chars = 600;86  int written = call_vasprintf(&buff, "%200s%200s%200s", "", "", "");87  EXPECT_EQ(written, expected_num_chars);88 89  bool isPadding = true;90  for (int i = 0; i < expected_num_chars; i++) {91    if (buff[i] != ' ') {92      isPadding = false;93      break;94    }95  }96  EXPECT_TRUE(isPadding);97  free(buff);98}99