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