PDB: Add a class to create the /names stream contents.

This patch adds a new class NameHashTableBuilder which creates /names streams.
This patch contains a test to confirm that a stream created by
NameHashTableBuilder can be read by NameHashTable reader class.

Differential Revision: https://reviews.llvm.org/D28707

llvm-svn: 292040
diff --git a/llvm/unittests/DebugInfo/PDB/NameHashTableBuilderTest.cpp b/llvm/unittests/DebugInfo/PDB/NameHashTableBuilderTest.cpp
new file mode 100644
index 0000000..4ae0e67
--- /dev/null
+++ b/llvm/unittests/DebugInfo/PDB/NameHashTableBuilderTest.cpp
@@ -0,0 +1,54 @@
+//===- NameHashTableBuilderTest.cpp ---------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ErrorChecking.h"
+
+#include "llvm/DebugInfo/MSF/ByteStream.h"
+#include "llvm/DebugInfo/MSF/StreamReader.h"
+#include "llvm/DebugInfo/MSF/StreamWriter.h"
+#include "llvm/DebugInfo/PDB/Raw/NameHashTable.h"
+#include "llvm/DebugInfo/PDB/Raw/NameHashTableBuilder.h"
+
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace llvm::pdb;
+
+namespace {
+class NameHashTableBuilderTest : public ::testing::Test {};
+}
+
+TEST_F(NameHashTableBuilderTest, Simple) {
+  // Create /names table contents.
+  NameHashTableBuilder Builder;
+  EXPECT_EQ(1U, Builder.insert("foo"));
+  EXPECT_EQ(5U, Builder.insert("bar"));
+  EXPECT_EQ(1U, Builder.insert("foo"));
+  EXPECT_EQ(9U, Builder.insert("baz"));
+
+  std::vector<uint8_t> Buffer(Builder.calculateSerializedLength());
+  msf::MutableByteStream OutStream(Buffer);
+  msf::StreamWriter Writer(OutStream);
+  EXPECT_NO_ERROR(Builder.commit(Writer));
+
+  // Reads the contents back.
+  msf::ByteStream InStream(Buffer);
+  msf::StreamReader Reader(InStream);
+  NameHashTable Table;
+  EXPECT_NO_ERROR(Table.load(Reader));
+
+  EXPECT_EQ(3U, Table.getNameCount());
+  EXPECT_EQ(1U, Table.getHashVersion());
+  EXPECT_EQ("foo", Table.getStringForID(1));
+  EXPECT_EQ("bar", Table.getStringForID(5));
+  EXPECT_EQ("baz", Table.getStringForID(9));
+  EXPECT_EQ(1U, Table.getIDForString("foo"));
+  EXPECT_EQ(5U, Table.getIDForString("bar"));
+  EXPECT_EQ(9U, Table.getIDForString("baz"));
+}