1 //===---------- string_pool_test.cpp - Unit tests for StringPool ----------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "string_pool.h"
10 #include "gtest/gtest.h"
11 
12 using namespace __orc_rt;
13 
14 namespace {
15 
16 TEST(StringPool, UniquingAndComparisons) {
17   StringPool SP;
18   auto P1 = SP.intern("hello");
19 
20   std::string S("hel");
21   S += "lo";
22   auto P2 = SP.intern(S);
23 
24   auto P3 = SP.intern("goodbye");
25 
26   EXPECT_EQ(P1, P2) << "Failed to unique entries";
27   EXPECT_NE(P1, P3) << "Unequal pooled strings comparing equal";
28 
29   // We want to test that less-than comparison of PooledStringPtrs compiles,
30   // however we can't test the actual result as this is a pointer comparison and
31   // PooledStringPtr doesn't expose the underlying address of the string.
32   (void)(P1 < P3);
33 }
34 
35 TEST(StringPool, Dereference) {
36   StringPool SP;
37   auto Foo = SP.intern("foo");
38   EXPECT_EQ(*Foo, "foo") << "Equality on dereferenced string failed";
39 }
40 
41 TEST(StringPool, ClearDeadEntries) {
42   StringPool SP;
43   {
44     auto P1 = SP.intern("s1");
45     SP.clearDeadEntries();
46     EXPECT_FALSE(SP.empty()) << "\"s1\" entry in pool should still be retained";
47   }
48   SP.clearDeadEntries();
49   EXPECT_TRUE(SP.empty()) << "pool should be empty";
50 }
51 
52 TEST(StringPool, NullPtr) {
53   // Make sure that we can default construct and then destroy a null
54   // PooledStringPtr.
55   PooledStringPtr Null;
56 }
57 
58 TEST(StringPool, Hashable) {
59   StringPool SP;
60   PooledStringPtr P1 = SP.intern("s1");
61   PooledStringPtr Null;
62   EXPECT_NE(std::hash<PooledStringPtr>()(P1),
63             std::hash<PooledStringPtr>()(Null));
64 }
65 
66 } // end anonymous namespace
67