mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 19:45:40 -04:00

Summary: The motivation for this was me wanting to make the validity of dwarf DIERefs explicit (via llvm::Optional<DIERef>). This meant that the class would no longer have a default constructor. As the DIERef was being stored in a UniqueCStringMap, this meant that this container (like all standard containers) needed to work with non-default-constructible types too. This part is achieved by removing the default constructors for the map entry types, and providing appropriate comparison overloads so that we can search for map entries without constructing a dummy entry. While doing that, I took the opportunity to modernize the code, and add some tests. Functions that were completely unused are deleted. This required also some changes in the Symtab code, as it was default constructing map entries, which was not impossible even though its value type was default-constructible. Technically, these changes could be avoided with some SFINAE on the entry type, but I felt that the code is cleaner this way anyway. Reviewers: JDevlieghere, sgraenitz Subscribers: mgorny, aprantl, lldb-commits Differential Revision: https://reviews.llvm.org/D63268 llvm-svn: 363357
54 lines
1.6 KiB
C++
54 lines
1.6 KiB
C++
//===-- UniqueCStringMapTest.cpp --------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Core/UniqueCStringMap.h"
|
|
#include "gmock/gmock.h"
|
|
|
|
using namespace lldb_private;
|
|
|
|
namespace {
|
|
struct NoDefault {
|
|
int x;
|
|
|
|
NoDefault(int x) : x(x) {}
|
|
NoDefault() = delete;
|
|
|
|
friend bool operator==(NoDefault lhs, NoDefault rhs) {
|
|
return lhs.x == rhs.x;
|
|
}
|
|
|
|
friend llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
|
|
NoDefault x) {
|
|
return OS << "NoDefault{" << x.x << "}";
|
|
}
|
|
};
|
|
} // namespace
|
|
|
|
TEST(UniqueCStringMap, NoDefaultConstructor) {
|
|
using MapT = UniqueCStringMap<NoDefault>;
|
|
using EntryT = MapT::Entry;
|
|
|
|
MapT Map;
|
|
ConstString Foo("foo"), Bar("bar");
|
|
|
|
Map.Append(Foo, NoDefault(42));
|
|
EXPECT_THAT(Map.Find(Foo, NoDefault(47)), NoDefault(42));
|
|
EXPECT_THAT(Map.Find(Bar, NoDefault(47)), NoDefault(47));
|
|
EXPECT_THAT(Map.FindFirstValueForName(Foo),
|
|
testing::Pointee(testing::Field(&EntryT::value, NoDefault(42))));
|
|
EXPECT_THAT(Map.FindFirstValueForName(Bar), nullptr);
|
|
|
|
std::vector<NoDefault> Values;
|
|
EXPECT_THAT(Map.GetValues(Foo, Values), 1);
|
|
EXPECT_THAT(Values, testing::ElementsAre(NoDefault(42)));
|
|
|
|
Values.clear();
|
|
EXPECT_THAT(Map.GetValues(Bar, Values), 0);
|
|
EXPECT_THAT(Values, testing::IsEmpty());
|
|
}
|