xref: /llvm-project/llvm/unittests/DebugInfo/PDB/StringTableBuilderTest.cpp (revision 2d5c2cd3ce208ebfac2bceb4c73157bef4e00fdc)
1 //===- StringTableBuilderTest.cpp -----------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "ErrorChecking.h"
11 
12 #include "llvm/DebugInfo/PDB/Native/PDBStringTable.h"
13 #include "llvm/DebugInfo/PDB/Native/PDBStringTableBuilder.h"
14 #include "llvm/Support/BinaryByteStream.h"
15 #include "llvm/Support/BinaryStreamReader.h"
16 #include "llvm/Support/BinaryStreamWriter.h"
17 
18 #include "gtest/gtest.h"
19 
20 using namespace llvm;
21 using namespace llvm::pdb;
22 using namespace llvm::support;
23 
24 namespace {
25 class StringTableBuilderTest : public ::testing::Test {};
26 }
27 
28 template <typename T>
29 static void ExpectExpected(Expected<T> &&E, const T &Value) {
30   EXPECT_EXPECTED(E);
31   EXPECT_EQ(Value, *E);
32 }
33 
34 TEST_F(StringTableBuilderTest, Simple) {
35   // Create /names table contents.
36   PDBStringTableBuilder Builder;
37   EXPECT_EQ(1U, Builder.insert("foo"));
38   EXPECT_EQ(5U, Builder.insert("bar"));
39   EXPECT_EQ(1U, Builder.insert("foo"));
40   EXPECT_EQ(9U, Builder.insert("baz"));
41 
42   std::vector<uint8_t> Buffer(Builder.calculateSerializedSize());
43   MutableBinaryByteStream OutStream(Buffer, little);
44   BinaryStreamWriter Writer(OutStream);
45   EXPECT_NO_ERROR(Builder.commit(Writer));
46 
47   // Reads the contents back.
48   BinaryByteStream InStream(Buffer, little);
49   BinaryStreamReader Reader(InStream);
50   PDBStringTable Table;
51   EXPECT_NO_ERROR(Table.reload(Reader));
52 
53   EXPECT_EQ(3U, Table.getNameCount());
54   EXPECT_EQ(1U, Table.getHashVersion());
55 
56   EXPECT_EXPECTED_EQ("foo", Table.getStringForID(1));
57   EXPECT_EXPECTED_EQ("bar", Table.getStringForID(5));
58   EXPECT_EXPECTED_EQ("baz", Table.getStringForID(9));
59   EXPECT_EXPECTED_EQ(1U, Table.getIDForString("foo"));
60   EXPECT_EXPECTED_EQ(5U, Table.getIDForString("bar"));
61   EXPECT_EXPECTED_EQ(9U, Table.getIDForString("baz"));
62 }
63