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 | |