1 | //===- llvm/unittest/CodeGen/DwarfStringPoolEntryRefTest.cpp --------------===// |
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 "llvm/CodeGen/DwarfStringPoolEntry.h" |
10 | #include "llvm/Support/Allocator.h" |
11 | #include "llvm/Testing/Support/Error.h" |
12 | |
13 | #include "gmock/gmock.h" |
14 | #include "gtest/gtest.h" |
15 | |
16 | using namespace llvm; |
17 | |
18 | TEST(DwarfStringPoolEntryRefTest, TestFullEntry) { |
19 | BumpPtrAllocator Allocator; |
20 | StringMapEntry<DwarfStringPoolEntry> *StringEntry1 = |
21 | StringMapEntry<DwarfStringPoolEntry>::create( |
22 | key: "Key1" , allocator&: Allocator, initVals: DwarfStringPoolEntry{.Symbol: nullptr, .Offset: 0, .Index: 0}); |
23 | |
24 | EXPECT_TRUE(StringEntry1->getKey() == "Key1" ); |
25 | EXPECT_TRUE(StringEntry1->second.Symbol == nullptr); |
26 | EXPECT_TRUE(StringEntry1->second.Offset == 0); |
27 | EXPECT_TRUE(StringEntry1->second.Index == 0); |
28 | |
29 | DwarfStringPoolEntryRef Ref1(*StringEntry1); |
30 | EXPECT_TRUE(Ref1.getString() == "Key1" ); |
31 | EXPECT_TRUE(Ref1.getOffset() == 0); |
32 | EXPECT_TRUE(Ref1.getIndex() == 0); |
33 | |
34 | DwarfStringPoolEntryRef Ref2(*StringEntry1); |
35 | EXPECT_TRUE(Ref2.getString() == "Key1" ); |
36 | EXPECT_TRUE(Ref2.getOffset() == 0); |
37 | EXPECT_TRUE(Ref2.getIndex() == 0); |
38 | EXPECT_TRUE(Ref1 == Ref2); |
39 | EXPECT_FALSE(Ref1 != Ref2); |
40 | |
41 | StringMapEntry<DwarfStringPoolEntry> *StringEntry2 = |
42 | StringMapEntry<DwarfStringPoolEntry>::create( |
43 | key: "Key2" , allocator&: Allocator, initVals: DwarfStringPoolEntry{.Symbol: nullptr, .Offset: 0x1000, .Index: 1}); |
44 | EXPECT_TRUE(StringEntry2->getKey() == "Key2" ); |
45 | EXPECT_TRUE(StringEntry2->second.Symbol == nullptr); |
46 | EXPECT_TRUE(StringEntry2->second.Offset == 0x1000); |
47 | EXPECT_TRUE(StringEntry2->second.Index == 1); |
48 | |
49 | DwarfStringPoolEntryRef Ref3(*StringEntry2); |
50 | EXPECT_TRUE(Ref3.getString() == "Key2" ); |
51 | EXPECT_TRUE(Ref3.getOffset() == 0x1000); |
52 | EXPECT_TRUE(Ref3.getIndex() == 1); |
53 | EXPECT_TRUE(Ref1 != Ref3); |
54 | } |
55 | |
56 | bool isEntryEqual(const DwarfStringPoolEntry &LHS, |
57 | const DwarfStringPoolEntry &RHS) { |
58 | return LHS.Symbol == RHS.Symbol && LHS.Offset == RHS.Offset && |
59 | LHS.Index == RHS.Index; |
60 | } |
61 | |
62 | TEST(DwarfStringPoolEntryRefTest, TestShortEntry) { |
63 | DwarfStringPoolEntryWithExtString DwarfEntry1 = {{.Symbol: nullptr, .Offset: 0, .Index: 0}, .String: "Key1" }; |
64 | |
65 | DwarfStringPoolEntryRef Ref1(DwarfEntry1); |
66 | EXPECT_TRUE(Ref1.getString() == "Key1" ); |
67 | EXPECT_TRUE(Ref1.getOffset() == 0); |
68 | EXPECT_TRUE(Ref1.getIndex() == 0); |
69 | EXPECT_TRUE(isEntryEqual(Ref1.getEntry(), DwarfEntry1)); |
70 | |
71 | DwarfStringPoolEntryRef Ref2(DwarfEntry1); |
72 | EXPECT_TRUE(Ref2.getString() == "Key1" ); |
73 | EXPECT_TRUE(Ref2.getOffset() == 0); |
74 | EXPECT_TRUE(isEntryEqual(Ref2.getEntry(), DwarfEntry1)); |
75 | EXPECT_TRUE(Ref1 == Ref2); |
76 | EXPECT_FALSE(Ref1 != Ref2); |
77 | |
78 | DwarfStringPoolEntryWithExtString DwarfEntry2 = {{.Symbol: nullptr, .Offset: 0x1000, .Index: 1}, |
79 | .String: "Key2" }; |
80 | |
81 | DwarfStringPoolEntryRef Ref3(DwarfEntry2); |
82 | EXPECT_TRUE(Ref3.getString() == "Key2" ); |
83 | EXPECT_TRUE(Ref3.getOffset() == 0x1000); |
84 | EXPECT_TRUE(Ref3.getIndex() == 1); |
85 | EXPECT_TRUE(isEntryEqual(Ref3.getEntry(), DwarfEntry2)); |
86 | EXPECT_TRUE(Ref1 != Ref3); |
87 | } |
88 | |
89 | TEST(DwarfStringPoolEntryRefTest, CompareFullAndShort) { |
90 | BumpPtrAllocator Allocator; |
91 | |
92 | DwarfStringPoolEntryWithExtString DwarfEntry1 = {{.Symbol: nullptr, .Offset: 0, .Index: 0}, .String: "Key1" }; |
93 | DwarfStringPoolEntryRef Ref1(DwarfEntry1); |
94 | |
95 | StringMapEntry<DwarfStringPoolEntry> *StringEntry2 = |
96 | StringMapEntry<DwarfStringPoolEntry>::create( |
97 | key: "Key1" , allocator&: Allocator, initVals: DwarfStringPoolEntry{.Symbol: nullptr, .Offset: 0, .Index: 0}); |
98 | DwarfStringPoolEntryRef Ref2(*StringEntry2); |
99 | |
100 | EXPECT_FALSE(Ref1 == Ref2); |
101 | } |
102 | |