diff unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents
children c2174574ed3a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp	Sat Feb 17 09:57:20 2018 +0900
@@ -0,0 +1,54 @@
+//===----- SymbolStringPoolTest.cpp - Unit tests for SymbolStringPool -----===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ExecutionEngine/Orc/SymbolStringPool.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace llvm::orc;
+
+namespace {
+
+TEST(SymbolStringPool, UniquingAndComparisons) {
+  SymbolStringPool SP;
+  auto P1 = SP.intern("hello");
+
+  std::string S("hel");
+  S += "lo";
+  auto P2 = SP.intern(S);
+
+  auto P3 = SP.intern("goodbye");
+
+  EXPECT_EQ(P1, P2) << "Failed to unique entries";
+  EXPECT_NE(P1, P3) << "Inequal pooled symbol strings comparing equal";
+
+  // We want to test that less-than comparison of SymbolStringPtrs compiles,
+  // however we can't test the actual result as this is a pointer comparison and
+  // SymbolStringPtr doesn't expose the underlying address of the string.
+  (void)(P1 < P3);
+}
+
+TEST(SymbolStringPool, Dereference) {
+  SymbolStringPool SP;
+  auto Foo = SP.intern("foo");
+  EXPECT_EQ(*Foo, "foo") << "Equality on dereferenced string failed";
+}
+
+TEST(SymbolStringPool, ClearDeadEntries) {
+  SymbolStringPool SP;
+  {
+    auto P1 = SP.intern("s1");
+    SP.clearDeadEntries();
+    EXPECT_FALSE(SP.empty()) << "\"s1\" entry in pool should still be retained";
+  }
+  SP.clearDeadEntries();
+  EXPECT_TRUE(SP.empty()) << "pool should be empty";
+}
+
+}