| //===- llvm/unittest/OutputBufferTest.cpp - OutputStream unit tests -------===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/Demangle/MicrosoftDemangleNodes.h" |
| #include "llvm/Demangle/Utility.h" |
| #include "gtest/gtest.h" |
| #include <string> |
| #include <string_view> |
| |
| using namespace llvm; |
| using llvm::itanium_demangle::OutputBuffer; |
| |
| static std::string toString(OutputBuffer &OB) { |
| std::string_view SV = OB; |
| return {SV.begin(), SV.end()}; |
| } |
| |
| template <typename T> static std::string printToString(const T &Value) { |
| OutputBuffer OB; |
| OB << Value; |
| std::string s = toString(OB); |
| std::free(OB.getBuffer()); |
| return s; |
| } |
| |
| TEST(OutputBufferTest, Format) { |
| EXPECT_EQ("0", printToString(0)); |
| EXPECT_EQ("1", printToString(1)); |
| EXPECT_EQ("-1", printToString(-1)); |
| EXPECT_EQ("-90", printToString(-90)); |
| EXPECT_EQ("109", printToString(109)); |
| EXPECT_EQ("400", printToString(400)); |
| |
| EXPECT_EQ("a", printToString('a')); |
| EXPECT_EQ("?", printToString('?')); |
| |
| EXPECT_EQ("abc", printToString("abc")); |
| } |
| |
| TEST(OutputBufferTest, Insert) { |
| OutputBuffer OB; |
| |
| OB.insert(0, "", 0); |
| EXPECT_EQ("", toString(OB)); |
| |
| OB.insert(0, "abcd", 4); |
| EXPECT_EQ("abcd", toString(OB)); |
| |
| OB.insert(0, "x", 1); |
| EXPECT_EQ("xabcd", toString(OB)); |
| |
| OB.insert(5, "y", 1); |
| EXPECT_EQ("xabcdy", toString(OB)); |
| |
| OB.insert(3, "defghi", 6); |
| EXPECT_EQ("xabdefghicdy", toString(OB)); |
| |
| std::free(OB.getBuffer()); |
| } |
| |
| TEST(OutputBufferTest, Prepend) { |
| OutputBuffer OB; |
| |
| OB.prepend("n"); |
| EXPECT_EQ("n", toString(OB)); |
| |
| OB << "abc"; |
| OB.prepend("def"); |
| EXPECT_EQ("defnabc", toString(OB)); |
| |
| OB.setCurrentPosition(3); |
| |
| OB.prepend("abc"); |
| EXPECT_EQ("abcdef", toString(OB)); |
| |
| std::free(OB.getBuffer()); |
| } |
| |
| // Test when initial needed size is larger than the default. |
| TEST(OutputBufferTest, Extend) { |
| OutputBuffer OB; |
| |
| char Massive[2000]; |
| std::memset(Massive, 'a', sizeof(Massive)); |
| Massive[sizeof(Massive) - 1] = 0; |
| OB << Massive; |
| EXPECT_EQ(Massive, toString(OB)); |
| |
| std::free(OB.getBuffer()); |
| } |