| //===----- 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"; |
| } |
| |
| } |