xref: /llvm-project/llvm/unittests/CodeGen/DwarfStringPoolEntryRefTest.cpp (revision 32484c1724be8ecf1b4420ee312742c150ac42ee)
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 #include <string>
16 
17 using namespace llvm;
18 
19 TEST(DwarfStringPoolEntryRefTest, TestFullEntry) {
20   BumpPtrAllocator Allocator;
21   StringMapEntry<DwarfStringPoolEntry> *StringEntry1 =
22       StringMapEntry<DwarfStringPoolEntry>::create(
23           "Key1", Allocator, DwarfStringPoolEntry{nullptr, 0, 0});
24 
25   EXPECT_TRUE(StringEntry1->getKey() == "Key1");
26   EXPECT_TRUE(StringEntry1->second.Symbol == nullptr);
27   EXPECT_TRUE(StringEntry1->second.Offset == 0);
28   EXPECT_TRUE(StringEntry1->second.Index == 0);
29 
30   DwarfStringPoolEntryRef Ref1(*StringEntry1);
31   EXPECT_TRUE(Ref1.getString() == "Key1");
32   EXPECT_TRUE(Ref1.getOffset() == 0);
33   EXPECT_TRUE(Ref1.getIndex() == 0);
34 
35   DwarfStringPoolEntryRef Ref2(*StringEntry1);
36   EXPECT_TRUE(Ref2.getString() == "Key1");
37   EXPECT_TRUE(Ref2.getOffset() == 0);
38   EXPECT_TRUE(Ref2.getIndex() == 0);
39   EXPECT_TRUE(Ref1 == Ref2);
40   EXPECT_FALSE(Ref1 != Ref2);
41 
42   StringMapEntry<DwarfStringPoolEntry> *StringEntry2 =
43       StringMapEntry<DwarfStringPoolEntry>::create(
44           "Key2", Allocator, DwarfStringPoolEntry{nullptr, 0x1000, 1});
45   EXPECT_TRUE(StringEntry2->getKey() == "Key2");
46   EXPECT_TRUE(StringEntry2->second.Symbol == nullptr);
47   EXPECT_TRUE(StringEntry2->second.Offset == 0x1000);
48   EXPECT_TRUE(StringEntry2->second.Index == 1);
49 
50   DwarfStringPoolEntryRef Ref3(*StringEntry2);
51   EXPECT_TRUE(Ref3.getString() == "Key2");
52   EXPECT_TRUE(Ref3.getOffset() == 0x1000);
53   EXPECT_TRUE(Ref3.getIndex() == 1);
54   EXPECT_TRUE(Ref1 != Ref3);
55 }
56 
57 bool isEntryEqual(const DwarfStringPoolEntry &LHS,
58                   const DwarfStringPoolEntry &RHS) {
59   return LHS.Symbol == RHS.Symbol && LHS.Offset == RHS.Offset &&
60          LHS.Index == RHS.Index;
61 }
62 
63 TEST(DwarfStringPoolEntryRefTest, TestShortEntry) {
64   BumpPtrAllocator Allocator;
65   DwarfStringPoolEntry DwarfEntry1 = {nullptr, 0, 0};
66   StringMapEntry<DwarfStringPoolEntry *> *StringEntry1 =
67       StringMapEntry<DwarfStringPoolEntry *>::create("Key1", Allocator,
68                                                      &DwarfEntry1);
69 
70   EXPECT_TRUE(StringEntry1->getKey() == "Key1");
71   EXPECT_TRUE(StringEntry1->second->Symbol == nullptr);
72   EXPECT_TRUE(StringEntry1->second->Offset == 0);
73   EXPECT_TRUE(StringEntry1->second->Index == 0);
74 
75   DwarfStringPoolEntryRef Ref1(*StringEntry1);
76   EXPECT_TRUE(Ref1.getString() == "Key1");
77   EXPECT_TRUE(Ref1.getOffset() == 0);
78   EXPECT_TRUE(Ref1.getIndex() == 0);
79   EXPECT_TRUE(isEntryEqual(Ref1.getEntry(), DwarfEntry1));
80 
81   DwarfStringPoolEntryRef Ref2(*StringEntry1);
82   EXPECT_TRUE(Ref2.getString() == "Key1");
83   EXPECT_TRUE(Ref2.getOffset() == 0);
84   EXPECT_TRUE(isEntryEqual(Ref2.getEntry(), DwarfEntry1));
85   EXPECT_TRUE(Ref1 == Ref2);
86   EXPECT_FALSE(Ref1 != Ref2);
87 
88   DwarfStringPoolEntry DwarfEntry2 = {nullptr, 0x1000, 1};
89   StringMapEntry<DwarfStringPoolEntry *> *StringEntry2 =
90       StringMapEntry<DwarfStringPoolEntry *>::create("Key2", Allocator,
91                                                      &DwarfEntry2);
92   EXPECT_TRUE(StringEntry2->getKey() == "Key2");
93   EXPECT_TRUE(StringEntry2->second->Symbol == nullptr);
94   EXPECT_TRUE(StringEntry2->second->Offset == 0x1000);
95   EXPECT_TRUE(StringEntry2->second->Index == 1);
96 
97   DwarfStringPoolEntryRef Ref3(*StringEntry2);
98   EXPECT_TRUE(Ref3.getString() == "Key2");
99   EXPECT_TRUE(Ref3.getOffset() == 0x1000);
100   EXPECT_TRUE(Ref3.getIndex() == 1);
101   EXPECT_TRUE(isEntryEqual(Ref3.getEntry(), DwarfEntry2));
102   EXPECT_TRUE(Ref1 != Ref3);
103 }
104 
105 TEST(DwarfStringPoolEntryRefTest, CompareFullAndShort) {
106   BumpPtrAllocator Allocator;
107 
108   DwarfStringPoolEntry DwarfEntry1 = {nullptr, 0, 0};
109   StringMapEntry<DwarfStringPoolEntry *> *StringEntry1 =
110       StringMapEntry<DwarfStringPoolEntry *>::create("Key1", Allocator,
111                                                      &DwarfEntry1);
112   DwarfStringPoolEntryRef Ref1(*StringEntry1);
113 
114   StringMapEntry<DwarfStringPoolEntry> *StringEntry2 =
115       StringMapEntry<DwarfStringPoolEntry>::create(
116           "Key1", Allocator, DwarfStringPoolEntry{nullptr, 0, 0});
117   DwarfStringPoolEntryRef Ref2(*StringEntry2);
118 
119   EXPECT_FALSE(Ref1 == Ref2);
120 }
121