Blender  V3.3
BLI_multi_value_map_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "BLI_multi_value_map.hh"
4 #include "BLI_vector.hh"
5 #include "testing/testing.h"
6 
7 namespace blender::tests {
8 
9 TEST(multi_value_map, LookupNotExistant)
10 {
12  EXPECT_EQ(map.lookup(5).size(), 0);
13  map.add(2, 5);
14  EXPECT_EQ(map.lookup(5).size(), 0);
15 }
16 
17 TEST(multi_value_map, LookupExistant)
18 {
20  map.add(2, 4);
21  map.add(2, 5);
22  map.add(3, 6);
23 
24  EXPECT_EQ(map.lookup(2).size(), 2);
25  EXPECT_EQ(map.lookup(2)[0], 4);
26  EXPECT_EQ(map.lookup(2)[1], 5);
27 
28  EXPECT_EQ(map.lookup(3).size(), 1);
29  EXPECT_EQ(map.lookup(3)[0], 6);
30 }
31 
32 TEST(multi_value_map, LookupMutable)
33 {
35  map.add(1, 2);
36  map.add(4, 5);
37  map.add(4, 6);
38  map.add(6, 7);
39 
40  MutableSpan<int> span = map.lookup(4);
41  EXPECT_EQ(span.size(), 2);
42  span[0] = 10;
43  span[1] = 20;
44 
45  map.add(4, 5);
46  MutableSpan<int> new_span = map.lookup(4);
47  EXPECT_EQ(new_span.size(), 3);
48  EXPECT_EQ(new_span[0], 10);
49  EXPECT_EQ(new_span[1], 20);
50  EXPECT_EQ(new_span[2], 5);
51 }
52 
53 TEST(multi_value_map, AddMultiple)
54 {
56  map.add_multiple(2, {4, 5, 6});
57  map.add_multiple(2, {1, 2});
58  map.add_multiple(5, {7, 5, 3});
59 
60  EXPECT_EQ(map.lookup(2).size(), 5);
61  EXPECT_EQ(map.lookup(2)[0], 4);
62  EXPECT_EQ(map.lookup(2)[1], 5);
63  EXPECT_EQ(map.lookup(2)[2], 6);
64  EXPECT_EQ(map.lookup(2)[3], 1);
65  EXPECT_EQ(map.lookup(2)[4], 2);
66 
67  EXPECT_EQ(map.lookup(5).size(), 3);
68  EXPECT_EQ(map.lookup(5)[0], 7);
69  EXPECT_EQ(map.lookup(5)[1], 5);
70  EXPECT_EQ(map.lookup(5)[2], 3);
71 }
72 
73 TEST(multi_value_map, Keys)
74 {
76  map.add(5, 7);
77  map.add(5, 7);
78  map.add_multiple(2, {6, 7, 8});
79 
80  Vector<int> keys;
81  for (int key : map.keys()) {
82  keys.append(key);
83  }
84 
85  EXPECT_EQ(keys.size(), 2);
86  EXPECT_TRUE(keys.contains(5));
87  EXPECT_TRUE(keys.contains(2));
88 }
89 
90 TEST(multi_value_map, Values)
91 {
93  map.add(3, 5);
94  map.add_multiple(3, {1, 2});
95  map.add(6, 1);
96 
97  Vector<Span<int>> values;
98  for (Span<int> value_span : map.values()) {
99  values.append(value_span);
100  }
101 
102  EXPECT_EQ(values.size(), 2);
103 }
104 
105 TEST(multi_value_map, Items)
106 {
108  map.add_multiple(4, {1, 2, 3});
109 
110  for (auto &&item : map.items()) {
111  int key = item.key;
112  Span<int> values = item.value;
113  EXPECT_EQ(key, 4);
114  EXPECT_EQ(values.size(), 3);
115  EXPECT_EQ(values[0], 1);
116  EXPECT_EQ(values[1], 2);
117  EXPECT_EQ(values[2], 3);
118  }
119 }
120 
121 TEST(multi_value_map, UniquePtr)
122 {
123  /* Mostly testing if it compiles here. */
124  MultiValueMap<std::unique_ptr<int>, std::unique_ptr<int>> map;
125  map.add(std::make_unique<int>(4), std::make_unique<int>(6));
126  map.add(std::make_unique<int>(4), std::make_unique<int>(7));
127  EXPECT_EQ(map.lookup(std::make_unique<int>(10)).size(), 0);
128 }
129 
130 } // namespace blender::tests
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
constexpr int64_t size() const
Definition: BLI_span.hh:511
constexpr int64_t size() const
Definition: BLI_span.hh:240
int64_t size() const
Definition: BLI_vector.hh:694
bool contains(const T &value) const
Definition: BLI_vector.hh:837
void append(const T &value)
Definition: BLI_vector.hh:433
TEST(any, DefaultConstructor)
Definition: BLI_any_test.cc:10
SocketIndexByIdentifierMap * map