xref: /llvm-project/llvm/unittests/CodeGen/DwarfStringPoolEntryRefTest.cpp (revision 4b3078ef2d8b4ce833c2b493421486bb25802b32)
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 
TEST(DwarfStringPoolEntryRefTest,TestFullEntry)18 TEST(DwarfStringPoolEntryRefTest, TestFullEntry) {
19   BumpPtrAllocator Allocator;
20   StringMapEntry<DwarfStringPoolEntry> *StringEntry1 =
21       StringMapEntry<DwarfStringPoolEntry>::create(
22           "Key1", Allocator, DwarfStringPoolEntry{nullptr, 0, 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           "Key2", Allocator, DwarfStringPoolEntry{nullptr, 0x1000, 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 
isEntryEqual(const DwarfStringPoolEntry & LHS,const DwarfStringPoolEntry & RHS)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 
TEST(DwarfStringPoolEntryRefTest,TestShortEntry)62 TEST(DwarfStringPoolEntryRefTest, TestShortEntry) {
63   DwarfStringPoolEntryWithExtString DwarfEntry1 = {{nullptr, 0, 0}, "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 = {{nullptr, 0x1000, 1},
79                                                    "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 
TEST(DwarfStringPoolEntryRefTest,CompareFullAndShort)89 TEST(DwarfStringPoolEntryRefTest, CompareFullAndShort) {
90   BumpPtrAllocator Allocator;
91 
92   DwarfStringPoolEntryWithExtString DwarfEntry1 = {{nullptr, 0, 0}, "Key1"};
93   DwarfStringPoolEntryRef Ref1(DwarfEntry1);
94 
95   StringMapEntry<DwarfStringPoolEntry> *StringEntry2 =
96       StringMapEntry<DwarfStringPoolEntry>::create(
97           "Key1", Allocator, DwarfStringPoolEntry{nullptr, 0, 0});
98   DwarfStringPoolEntryRef Ref2(*StringEntry2);
99 
100   EXPECT_FALSE(Ref1 == Ref2);
101 }
102