xref: /llvm-project/llvm/unittests/DebugInfo/PDB/StringTableBuilderTest.cpp (revision d2684b7969e43d2016cd9454a24398b3adceec4d)
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/MSF/BinaryByteStream.h"
13 #include "llvm/DebugInfo/MSF/BinaryStreamReader.h"
14 #include "llvm/DebugInfo/MSF/BinaryStreamWriter.h"
15 #include "llvm/DebugInfo/PDB/Native/StringTable.h"
16 #include "llvm/DebugInfo/PDB/Native/StringTableBuilder.h"
17 
18 #include "gtest/gtest.h"
19 
20 using namespace llvm;
21 using namespace llvm::pdb;
22 
23 namespace {
24 class StringTableBuilderTest : public ::testing::Test {};
25 }
26 
27 TEST_F(StringTableBuilderTest, Simple) {
28   // Create /names table contents.
29   StringTableBuilder Builder;
30   EXPECT_EQ(1U, Builder.insert("foo"));
31   EXPECT_EQ(5U, Builder.insert("bar"));
32   EXPECT_EQ(1U, Builder.insert("foo"));
33   EXPECT_EQ(9U, Builder.insert("baz"));
34 
35   std::vector<uint8_t> Buffer(Builder.finalize());
36   msf::MutableByteStream OutStream(Buffer);
37   msf::StreamWriter Writer(OutStream);
38   EXPECT_NO_ERROR(Builder.commit(Writer));
39 
40   // Reads the contents back.
41   msf::ByteStream InStream(Buffer);
42   msf::StreamReader Reader(InStream);
43   StringTable Table;
44   EXPECT_NO_ERROR(Table.load(Reader));
45 
46   EXPECT_EQ(3U, Table.getNameCount());
47   EXPECT_EQ(1U, Table.getHashVersion());
48   EXPECT_EQ("foo", Table.getStringForID(1));
49   EXPECT_EQ("bar", Table.getStringForID(5));
50   EXPECT_EQ("baz", Table.getStringForID(9));
51   EXPECT_EQ(1U, Table.getIDForString("foo"));
52   EXPECT_EQ(5U, Table.getIDForString("bar"));
53   EXPECT_EQ(9U, Table.getIDForString("baz"));
54 }
55