1*554aea52SAlexey Lapshin //===- llvm/unittest/CodeGen/DwarfStringPoolEntryRefTest.cpp --------------===//
2*554aea52SAlexey Lapshin //
3*554aea52SAlexey Lapshin // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*554aea52SAlexey Lapshin // See https://llvm.org/LICENSE.txt for license information.
5*554aea52SAlexey Lapshin // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*554aea52SAlexey Lapshin //
7*554aea52SAlexey Lapshin //===----------------------------------------------------------------------===//
8*554aea52SAlexey Lapshin 
9*554aea52SAlexey Lapshin #include "llvm/CodeGen/DwarfStringPoolEntry.h"
10*554aea52SAlexey Lapshin #include "llvm/Support/Allocator.h"
11*554aea52SAlexey Lapshin #include "llvm/Testing/Support/Error.h"
12*554aea52SAlexey Lapshin 
13*554aea52SAlexey Lapshin #include "gmock/gmock.h"
14*554aea52SAlexey Lapshin #include "gtest/gtest.h"
15*554aea52SAlexey Lapshin #include <string>
16*554aea52SAlexey Lapshin 
17*554aea52SAlexey Lapshin using namespace llvm;
18*554aea52SAlexey Lapshin 
TEST(DwarfStringPoolEntryRefTest,TestFullEntry)19*554aea52SAlexey Lapshin TEST(DwarfStringPoolEntryRefTest, TestFullEntry) {
20*554aea52SAlexey Lapshin   BumpPtrAllocator Allocator;
21*554aea52SAlexey Lapshin   StringMapEntry<DwarfStringPoolEntry> *StringEntry1 =
22*554aea52SAlexey Lapshin       StringMapEntry<DwarfStringPoolEntry>::Create(
23*554aea52SAlexey Lapshin           "Key1", Allocator, DwarfStringPoolEntry{nullptr, 0, 0});
24*554aea52SAlexey Lapshin 
25*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry1->getKey() == "Key1");
26*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry1->second.Symbol == nullptr);
27*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry1->second.Offset == 0);
28*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry1->second.Index == 0);
29*554aea52SAlexey Lapshin 
30*554aea52SAlexey Lapshin   DwarfStringPoolEntryRef Ref1(*StringEntry1);
31*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1.getString() == "Key1");
32*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1.getOffset() == 0);
33*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1.getIndex() == 0);
34*554aea52SAlexey Lapshin 
35*554aea52SAlexey Lapshin   DwarfStringPoolEntryRef Ref2(*StringEntry1);
36*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref2.getString() == "Key1");
37*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref2.getOffset() == 0);
38*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref2.getIndex() == 0);
39*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1 == Ref2);
40*554aea52SAlexey Lapshin   EXPECT_FALSE(Ref1 != Ref2);
41*554aea52SAlexey Lapshin 
42*554aea52SAlexey Lapshin   StringMapEntry<DwarfStringPoolEntry> *StringEntry2 =
43*554aea52SAlexey Lapshin       StringMapEntry<DwarfStringPoolEntry>::Create(
44*554aea52SAlexey Lapshin           "Key2", Allocator, DwarfStringPoolEntry{nullptr, 0x1000, 1});
45*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry2->getKey() == "Key2");
46*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry2->second.Symbol == nullptr);
47*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry2->second.Offset == 0x1000);
48*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry2->second.Index == 1);
49*554aea52SAlexey Lapshin 
50*554aea52SAlexey Lapshin   DwarfStringPoolEntryRef Ref3(*StringEntry2);
51*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref3.getString() == "Key2");
52*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref3.getOffset() == 0x1000);
53*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref3.getIndex() == 1);
54*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1 != Ref3);
55*554aea52SAlexey Lapshin }
56*554aea52SAlexey Lapshin 
isEntryEqual(const DwarfStringPoolEntry & LHS,const DwarfStringPoolEntry & RHS)57*554aea52SAlexey Lapshin bool isEntryEqual(const DwarfStringPoolEntry &LHS,
58*554aea52SAlexey Lapshin                   const DwarfStringPoolEntry &RHS) {
59*554aea52SAlexey Lapshin   return LHS.Symbol == RHS.Symbol && LHS.Offset == RHS.Offset &&
60*554aea52SAlexey Lapshin          LHS.Index == RHS.Index;
61*554aea52SAlexey Lapshin }
62*554aea52SAlexey Lapshin 
TEST(DwarfStringPoolEntryRefTest,TestShortEntry)63*554aea52SAlexey Lapshin TEST(DwarfStringPoolEntryRefTest, TestShortEntry) {
64*554aea52SAlexey Lapshin   BumpPtrAllocator Allocator;
65*554aea52SAlexey Lapshin   DwarfStringPoolEntry DwarfEntry1 = {nullptr, 0, 0};
66*554aea52SAlexey Lapshin   StringMapEntry<DwarfStringPoolEntry *> *StringEntry1 =
67*554aea52SAlexey Lapshin       StringMapEntry<DwarfStringPoolEntry *>::Create("Key1", Allocator,
68*554aea52SAlexey Lapshin                                                      &DwarfEntry1);
69*554aea52SAlexey Lapshin 
70*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry1->getKey() == "Key1");
71*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry1->second->Symbol == nullptr);
72*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry1->second->Offset == 0);
73*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry1->second->Index == 0);
74*554aea52SAlexey Lapshin 
75*554aea52SAlexey Lapshin   DwarfStringPoolEntryRef Ref1(*StringEntry1);
76*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1.getString() == "Key1");
77*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1.getOffset() == 0);
78*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1.getIndex() == 0);
79*554aea52SAlexey Lapshin   EXPECT_TRUE(isEntryEqual(Ref1.getEntry(), DwarfEntry1));
80*554aea52SAlexey Lapshin 
81*554aea52SAlexey Lapshin   DwarfStringPoolEntryRef Ref2(*StringEntry1);
82*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref2.getString() == "Key1");
83*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref2.getOffset() == 0);
84*554aea52SAlexey Lapshin   EXPECT_TRUE(isEntryEqual(Ref2.getEntry(), DwarfEntry1));
85*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1 == Ref2);
86*554aea52SAlexey Lapshin   EXPECT_FALSE(Ref1 != Ref2);
87*554aea52SAlexey Lapshin 
88*554aea52SAlexey Lapshin   DwarfStringPoolEntry DwarfEntry2 = {nullptr, 0x1000, 1};
89*554aea52SAlexey Lapshin   StringMapEntry<DwarfStringPoolEntry *> *StringEntry2 =
90*554aea52SAlexey Lapshin       StringMapEntry<DwarfStringPoolEntry *>::Create("Key2", Allocator,
91*554aea52SAlexey Lapshin                                                      &DwarfEntry2);
92*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry2->getKey() == "Key2");
93*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry2->second->Symbol == nullptr);
94*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry2->second->Offset == 0x1000);
95*554aea52SAlexey Lapshin   EXPECT_TRUE(StringEntry2->second->Index == 1);
96*554aea52SAlexey Lapshin 
97*554aea52SAlexey Lapshin   DwarfStringPoolEntryRef Ref3(*StringEntry2);
98*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref3.getString() == "Key2");
99*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref3.getOffset() == 0x1000);
100*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref3.getIndex() == 1);
101*554aea52SAlexey Lapshin   EXPECT_TRUE(isEntryEqual(Ref3.getEntry(), DwarfEntry2));
102*554aea52SAlexey Lapshin   EXPECT_TRUE(Ref1 != Ref3);
103*554aea52SAlexey Lapshin }
104*554aea52SAlexey Lapshin 
TEST(DwarfStringPoolEntryRefTest,CompareFullAndShort)105*554aea52SAlexey Lapshin TEST(DwarfStringPoolEntryRefTest, CompareFullAndShort) {
106*554aea52SAlexey Lapshin   BumpPtrAllocator Allocator;
107*554aea52SAlexey Lapshin 
108*554aea52SAlexey Lapshin   DwarfStringPoolEntry DwarfEntry1 = {nullptr, 0, 0};
109*554aea52SAlexey Lapshin   StringMapEntry<DwarfStringPoolEntry *> *StringEntry1 =
110*554aea52SAlexey Lapshin       StringMapEntry<DwarfStringPoolEntry *>::Create("Key1", Allocator,
111*554aea52SAlexey Lapshin                                                      &DwarfEntry1);
112*554aea52SAlexey Lapshin   DwarfStringPoolEntryRef Ref1(*StringEntry1);
113*554aea52SAlexey Lapshin 
114*554aea52SAlexey Lapshin   StringMapEntry<DwarfStringPoolEntry> *StringEntry2 =
115*554aea52SAlexey Lapshin       StringMapEntry<DwarfStringPoolEntry>::Create(
116*554aea52SAlexey Lapshin           "Key1", Allocator, DwarfStringPoolEntry{nullptr, 0, 0});
117*554aea52SAlexey Lapshin   DwarfStringPoolEntryRef Ref2(*StringEntry2);
118*554aea52SAlexey Lapshin 
119*554aea52SAlexey Lapshin   EXPECT_FALSE(Ref1 == Ref2);
120*554aea52SAlexey Lapshin }
121