xref: /llvm-project/lldb/unittests/Core/UniqueCStringMapTest.cpp (revision 7afd05211282c7516f0e9b3e7743b5dcc2605491)
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