12e97236aSLuís Ferreira //===- llvm/unittest/OutputBufferTest.cpp - OutputStream unit tests -------===//
22e97236aSLuís Ferreira //
32e97236aSLuís Ferreira // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42e97236aSLuís Ferreira // See https://llvm.org/LICENSE.txt for license information.
52e97236aSLuís Ferreira // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62e97236aSLuís Ferreira //
72e97236aSLuís Ferreira //===----------------------------------------------------------------------===//
82e97236aSLuís Ferreira
92e97236aSLuís Ferreira #include "llvm/Demangle/MicrosoftDemangleNodes.h"
102e97236aSLuís Ferreira #include "llvm/Demangle/Utility.h"
112e97236aSLuís Ferreira #include "gtest/gtest.h"
122e97236aSLuís Ferreira #include <string>
13*7c59e800SNick Desaulniers #include <string_view>
142e97236aSLuís Ferreira
152e97236aSLuís Ferreira using namespace llvm;
162e97236aSLuís Ferreira using llvm::itanium_demangle::OutputBuffer;
172e97236aSLuís Ferreira
toString(OutputBuffer & OB)182e97236aSLuís Ferreira static std::string toString(OutputBuffer &OB) {
19*7c59e800SNick Desaulniers std::string_view SV = OB;
201066e397SNathan Sidwell return {SV.begin(), SV.end()};
212e97236aSLuís Ferreira }
222e97236aSLuís Ferreira
printToString(const T & Value)232e97236aSLuís Ferreira template <typename T> static std::string printToString(const T &Value) {
242e97236aSLuís Ferreira OutputBuffer OB;
252e97236aSLuís Ferreira OB << Value;
262e97236aSLuís Ferreira std::string s = toString(OB);
272e97236aSLuís Ferreira std::free(OB.getBuffer());
282e97236aSLuís Ferreira return s;
292e97236aSLuís Ferreira }
302e97236aSLuís Ferreira
TEST(OutputBufferTest,Format)312e97236aSLuís Ferreira TEST(OutputBufferTest, Format) {
322e97236aSLuís Ferreira EXPECT_EQ("0", printToString(0));
332e97236aSLuís Ferreira EXPECT_EQ("1", printToString(1));
342e97236aSLuís Ferreira EXPECT_EQ("-1", printToString(-1));
352e97236aSLuís Ferreira EXPECT_EQ("-90", printToString(-90));
362e97236aSLuís Ferreira EXPECT_EQ("109", printToString(109));
372e97236aSLuís Ferreira EXPECT_EQ("400", printToString(400));
382e97236aSLuís Ferreira
392e97236aSLuís Ferreira EXPECT_EQ("a", printToString('a'));
402e97236aSLuís Ferreira EXPECT_EQ("?", printToString('?'));
412e97236aSLuís Ferreira
422e97236aSLuís Ferreira EXPECT_EQ("abc", printToString("abc"));
432e97236aSLuís Ferreira }
442e97236aSLuís Ferreira
TEST(OutputBufferTest,Insert)452e97236aSLuís Ferreira TEST(OutputBufferTest, Insert) {
462e97236aSLuís Ferreira OutputBuffer OB;
472e97236aSLuís Ferreira
482e97236aSLuís Ferreira OB.insert(0, "", 0);
492e97236aSLuís Ferreira EXPECT_EQ("", toString(OB));
502e97236aSLuís Ferreira
512e97236aSLuís Ferreira OB.insert(0, "abcd", 4);
522e97236aSLuís Ferreira EXPECT_EQ("abcd", toString(OB));
532e97236aSLuís Ferreira
542e97236aSLuís Ferreira OB.insert(0, "x", 1);
552e97236aSLuís Ferreira EXPECT_EQ("xabcd", toString(OB));
562e97236aSLuís Ferreira
572e97236aSLuís Ferreira OB.insert(5, "y", 1);
582e97236aSLuís Ferreira EXPECT_EQ("xabcdy", toString(OB));
592e97236aSLuís Ferreira
602e97236aSLuís Ferreira OB.insert(3, "defghi", 6);
612e97236aSLuís Ferreira EXPECT_EQ("xabdefghicdy", toString(OB));
622e97236aSLuís Ferreira
632e97236aSLuís Ferreira std::free(OB.getBuffer());
642e97236aSLuís Ferreira }
652d77b272SLuís Ferreira
TEST(OutputBufferTest,Prepend)662d77b272SLuís Ferreira TEST(OutputBufferTest, Prepend) {
672d77b272SLuís Ferreira OutputBuffer OB;
682d77b272SLuís Ferreira
692d77b272SLuís Ferreira OB.prepend("n");
702d77b272SLuís Ferreira EXPECT_EQ("n", toString(OB));
712d77b272SLuís Ferreira
722d77b272SLuís Ferreira OB << "abc";
732d77b272SLuís Ferreira OB.prepend("def");
742d77b272SLuís Ferreira EXPECT_EQ("defnabc", toString(OB));
752d77b272SLuís Ferreira
762d77b272SLuís Ferreira OB.setCurrentPosition(3);
772d77b272SLuís Ferreira
782d77b272SLuís Ferreira OB.prepend("abc");
792d77b272SLuís Ferreira EXPECT_EQ("abcdef", toString(OB));
802d77b272SLuís Ferreira
812d77b272SLuís Ferreira std::free(OB.getBuffer());
822d77b272SLuís Ferreira }
83024495e6SNathan Sidwell
84024495e6SNathan Sidwell // Test when initial needed size is larger than the default.
TEST(OutputBufferTest,Extend)85024495e6SNathan Sidwell TEST(OutputBufferTest, Extend) {
86024495e6SNathan Sidwell OutputBuffer OB;
87024495e6SNathan Sidwell
88024495e6SNathan Sidwell char Massive[2000];
89024495e6SNathan Sidwell std::memset(Massive, 'a', sizeof(Massive));
90024495e6SNathan Sidwell Massive[sizeof(Massive) - 1] = 0;
91024495e6SNathan Sidwell OB << Massive;
92024495e6SNathan Sidwell EXPECT_EQ(Massive, toString(OB));
93024495e6SNathan Sidwell
94024495e6SNathan Sidwell std::free(OB.getBuffer());
95024495e6SNathan Sidwell }
96