xref: /llvm-project/llvm/unittests/CodeGen/DwarfStringPoolEntryRefTest.cpp (revision 77df3be0dee415713cf5c79543f00532674f428b)
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 TEST(DwarfStringPoolEntryRefTest, TestShortEntry) {
58   BumpPtrAllocator Allocator;
59   DwarfStringPoolEntry DwarfEntry1 = {nullptr, 0, 0};
60   StringMapEntry<DwarfStringPoolEntry *> *StringEntry1 =
61       StringMapEntry<DwarfStringPoolEntry *>::Create("Key1", Allocator,
62                                                      &DwarfEntry1);
63 
64   EXPECT_TRUE(StringEntry1->getKey() == "Key1");
65   EXPECT_TRUE(StringEntry1->second->Symbol == nullptr);
66   EXPECT_TRUE(StringEntry1->second->Offset == 0);
67   EXPECT_TRUE(StringEntry1->second->Index == 0);
68 
69   DwarfStringPoolEntryRef Ref1(*StringEntry1);
70   EXPECT_TRUE(Ref1.getString() == "Key1");
71   EXPECT_TRUE(Ref1.getOffset() == 0);
72   EXPECT_TRUE(Ref1.getIndex() == 0);
73   EXPECT_TRUE(memcmp(&Ref1.getEntry(), &DwarfEntry1,
74                      sizeof(DwarfStringPoolEntry)) == 0);
75 
76   DwarfStringPoolEntryRef Ref2(*StringEntry1);
77   EXPECT_TRUE(Ref2.getString() == "Key1");
78   EXPECT_TRUE(Ref2.getOffset() == 0);
79   EXPECT_TRUE(memcmp(&Ref2.getEntry(), &DwarfEntry1,
80                      sizeof(DwarfStringPoolEntry)) == 0);
81   EXPECT_TRUE(Ref1 == Ref2);
82   EXPECT_FALSE(Ref1 != Ref2);
83 
84   DwarfStringPoolEntry DwarfEntry2 = {nullptr, 0x1000, 1};
85   StringMapEntry<DwarfStringPoolEntry *> *StringEntry2 =
86       StringMapEntry<DwarfStringPoolEntry *>::Create("Key2", Allocator,
87                                                      &DwarfEntry2);
88   EXPECT_TRUE(StringEntry2->getKey() == "Key2");
89   EXPECT_TRUE(StringEntry2->second->Symbol == nullptr);
90   EXPECT_TRUE(StringEntry2->second->Offset == 0x1000);
91   EXPECT_TRUE(StringEntry2->second->Index == 1);
92 
93   DwarfStringPoolEntryRef Ref3(*StringEntry2);
94   EXPECT_TRUE(Ref3.getString() == "Key2");
95   EXPECT_TRUE(Ref3.getOffset() == 0x1000);
96   EXPECT_TRUE(Ref3.getIndex() == 1);
97   EXPECT_TRUE(memcmp(&Ref3.getEntry(), &DwarfEntry2,
98                      sizeof(DwarfStringPoolEntry)) == 0);
99   EXPECT_TRUE(Ref1 != Ref3);
100 }
101 
102 TEST(DwarfStringPoolEntryRefTest, CompareFullAndShort) {
103   BumpPtrAllocator Allocator;
104 
105   DwarfStringPoolEntry DwarfEntry1 = {nullptr, 0, 0};
106   StringMapEntry<DwarfStringPoolEntry *> *StringEntry1 =
107       StringMapEntry<DwarfStringPoolEntry *>::Create("Key1", Allocator,
108                                                      &DwarfEntry1);
109   DwarfStringPoolEntryRef Ref1(*StringEntry1);
110 
111   StringMapEntry<DwarfStringPoolEntry> *StringEntry2 =
112       StringMapEntry<DwarfStringPoolEntry>::Create(
113           "Key1", Allocator, DwarfStringPoolEntry{nullptr, 0, 0});
114   DwarfStringPoolEntryRef Ref2(*StringEntry2);
115 
116   EXPECT_FALSE(Ref1 == Ref2);
117 }
118