xref: /llvm-project/llvm/unittests/CodeGen/DwarfStringPoolEntryRefTest.cpp (revision 0229dd0626b2538c78ebbd2b1bd44c31fbf1cdec)
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   DwarfStringPoolEntryWithExtString DwarfEntry1 = {{nullptr, 0, 0}, "Key1"};
65 
66   DwarfStringPoolEntryRef Ref1(DwarfEntry1);
67   EXPECT_TRUE(Ref1.getString() == "Key1");
68   EXPECT_TRUE(Ref1.getOffset() == 0);
69   EXPECT_TRUE(Ref1.getIndex() == 0);
70   EXPECT_TRUE(isEntryEqual(Ref1.getEntry(), DwarfEntry1));
71 
72   DwarfStringPoolEntryRef Ref2(DwarfEntry1);
73   EXPECT_TRUE(Ref2.getString() == "Key1");
74   EXPECT_TRUE(Ref2.getOffset() == 0);
75   EXPECT_TRUE(isEntryEqual(Ref2.getEntry(), DwarfEntry1));
76   EXPECT_TRUE(Ref1 == Ref2);
77   EXPECT_FALSE(Ref1 != Ref2);
78 
79   DwarfStringPoolEntryWithExtString DwarfEntry2 = {{nullptr, 0x1000, 1},
80                                                    "Key2"};
81 
82   DwarfStringPoolEntryRef Ref3(DwarfEntry2);
83   EXPECT_TRUE(Ref3.getString() == "Key2");
84   EXPECT_TRUE(Ref3.getOffset() == 0x1000);
85   EXPECT_TRUE(Ref3.getIndex() == 1);
86   EXPECT_TRUE(isEntryEqual(Ref3.getEntry(), DwarfEntry2));
87   EXPECT_TRUE(Ref1 != Ref3);
88 }
89 
90 TEST(DwarfStringPoolEntryRefTest, CompareFullAndShort) {
91   BumpPtrAllocator Allocator;
92 
93   DwarfStringPoolEntryWithExtString DwarfEntry1 = {{nullptr, 0, 0}, "Key1"};
94   DwarfStringPoolEntryRef Ref1(DwarfEntry1);
95 
96   StringMapEntry<DwarfStringPoolEntry> *StringEntry2 =
97       StringMapEntry<DwarfStringPoolEntry>::create(
98           "Key1", Allocator, DwarfStringPoolEntry{nullptr, 0, 0});
99   DwarfStringPoolEntryRef Ref2(*StringEntry2);
100 
101   EXPECT_FALSE(Ref1 == Ref2);
102 }
103