180814287SRaphael Isemann //===-- UniqueCStringMapTest.cpp ------------------------------------------===//
2d8aca888SPavel Labath //
3d8aca888SPavel Labath // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4d8aca888SPavel Labath // See https://llvm.org/LICENSE.txt for license information.
5d8aca888SPavel Labath // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6d8aca888SPavel Labath //
7d8aca888SPavel Labath //===----------------------------------------------------------------------===//
8d8aca888SPavel Labath
9d8aca888SPavel Labath #include "lldb/Core/UniqueCStringMap.h"
10d8aca888SPavel Labath #include "gmock/gmock.h"
11d8aca888SPavel Labath
12d8aca888SPavel Labath using namespace lldb_private;
13d8aca888SPavel Labath
14d8aca888SPavel Labath namespace {
15d8aca888SPavel Labath struct NoDefault {
16d8aca888SPavel Labath int x;
17d8aca888SPavel Labath
NoDefault__anon78ecd8690111::NoDefault18d8aca888SPavel Labath NoDefault(int x) : x(x) {}
19d8aca888SPavel Labath NoDefault() = delete;
20d8aca888SPavel Labath
operator ==(NoDefault lhs,NoDefault rhs)21d8aca888SPavel Labath friend bool operator==(NoDefault lhs, NoDefault rhs) {
22d8aca888SPavel Labath return lhs.x == rhs.x;
23d8aca888SPavel Labath }
24d8aca888SPavel Labath
operator <<(llvm::raw_ostream & OS,NoDefault x)25d8aca888SPavel Labath friend llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
26d8aca888SPavel Labath NoDefault x) {
27d8aca888SPavel Labath return OS << "NoDefault{" << x.x << "}";
28d8aca888SPavel Labath }
29d8aca888SPavel Labath };
30d8aca888SPavel Labath } // namespace
31d8aca888SPavel Labath
TEST(UniqueCStringMap,NoDefaultConstructor)32d8aca888SPavel Labath TEST(UniqueCStringMap, NoDefaultConstructor) {
33d8aca888SPavel Labath using MapT = UniqueCStringMap<NoDefault>;
34d8aca888SPavel Labath using EntryT = MapT::Entry;
35d8aca888SPavel Labath
36d8aca888SPavel Labath MapT Map;
37d8aca888SPavel Labath ConstString Foo("foo"), Bar("bar");
38d8aca888SPavel Labath
39d8aca888SPavel Labath Map.Append(Foo, NoDefault(42));
40d8aca888SPavel Labath EXPECT_THAT(Map.Find(Foo, NoDefault(47)), NoDefault(42));
41d8aca888SPavel Labath EXPECT_THAT(Map.Find(Bar, NoDefault(47)), NoDefault(47));
42d8aca888SPavel Labath EXPECT_THAT(Map.FindFirstValueForName(Foo),
43d8aca888SPavel Labath testing::Pointee(testing::Field(&EntryT::value, NoDefault(42))));
44d8aca888SPavel Labath EXPECT_THAT(Map.FindFirstValueForName(Bar), nullptr);
45d8aca888SPavel Labath
46d8aca888SPavel Labath std::vector<NoDefault> Values;
47d8aca888SPavel Labath EXPECT_THAT(Map.GetValues(Foo, Values), 1);
48d8aca888SPavel Labath EXPECT_THAT(Values, testing::ElementsAre(NoDefault(42)));
49d8aca888SPavel Labath
50d8aca888SPavel Labath Values.clear();
51d8aca888SPavel Labath EXPECT_THAT(Map.GetValues(Bar, Values), 0);
52d8aca888SPavel Labath EXPECT_THAT(Values, testing::IsEmpty());
53d8aca888SPavel Labath }
54*7afd0521SPavel Labath
TEST(UniqueCStringMap,ValueCompare)55*7afd0521SPavel Labath TEST(UniqueCStringMap, ValueCompare) {
56*7afd0521SPavel Labath UniqueCStringMap<int> Map;
57*7afd0521SPavel Labath
58*7afd0521SPavel Labath ConstString Foo("foo");
59*7afd0521SPavel Labath
60*7afd0521SPavel Labath Map.Append(Foo, 0);
61*7afd0521SPavel Labath Map.Append(Foo, 5);
62*7afd0521SPavel Labath Map.Append(Foo, -5);
63*7afd0521SPavel Labath
64*7afd0521SPavel Labath Map.Sort(std::less<int>());
65*7afd0521SPavel Labath std::vector<int> Values;
66*7afd0521SPavel Labath EXPECT_THAT(Map.GetValues(Foo, Values), 3);
67*7afd0521SPavel Labath EXPECT_THAT(Values, testing::ElementsAre(-5, 0, 5));
68*7afd0521SPavel Labath }
69