Skip to content

Commit 4432af7

Browse files
author
Julian LALU
committed
Improve hashmap
1 parent c67ad8b commit 4432af7

1 file changed

Lines changed: 177 additions & 177 deletions

File tree

test/hashmap/hashmap_move_assign_operator.cpp

Lines changed: 177 additions & 177 deletions
Original file line numberDiff line numberDiff line change
@@ -28,191 +28,191 @@ GTEST_TEST(hashmap, move_assign_hashmap_of_bitwise_moves_constructible_same_type
2828

2929
// Test without extra
3030
{
31-
// const auto test = [](std::initializer_list<hud::pair<key_type, value_type>> elements_in_assigned, std::initializer_list<hud::pair<key_type, value_type>> elements_to_assign)
32-
// {
33-
// using AllocatorType = hud_test::allocator_watcher<1>;
34-
// using AssignedType = hud::hashmap<key_type, value_type, hud::hashmap_default_hasher, hud::hashmap_default_key_equal<key_type>, AllocatorType>;
35-
// using ToAssignType = hud::hashmap<key_type, value_type, hud::hashmap_default_hasher, hud::hashmap_default_key_equal<key_type>, AllocatorType>;
36-
// AssignedType assigned(elements_in_assigned);
37-
// ToAssignType to_assign(elements_to_assign);
31+
const auto test = [](std::initializer_list<hud::pair<key_type, value_type>> elements_in_assigned, std::initializer_list<hud::pair<key_type, value_type>> elements_to_assign)
32+
{
33+
using AllocatorType = hud_test::allocator_watcher<1>;
34+
using AssignedType = hud::hashmap<key_type, value_type, hud::hashmap_default_hasher, hud::hashmap_default_key_equal<key_type>, AllocatorType>;
35+
using ToAssignType = hud::hashmap<key_type, value_type, hud::hashmap_default_hasher, hud::hashmap_default_key_equal<key_type>, AllocatorType>;
36+
AssignedType assigned(elements_in_assigned);
37+
ToAssignType to_assign(elements_to_assign);
3838

39-
// assigned = hud::move(to_assign);
39+
assigned = hud::move(to_assign);
4040

41-
// // Ensure we copy all elements
42-
// bool all_keys_and_values_copied = true;
43-
// for (usize index = 0; index < elements_to_assign.size(); index++)
44-
// {
45-
// const auto &init_elem = (elements_to_assign.begin() + index);
46-
// const auto it = assigned.find(init_elem->first);
47-
// if (it == assigned.end())
48-
// {
49-
// all_keys_and_values_copied = false;
50-
// break;
51-
// }
52-
// if (it->key() != init_elem->first)
53-
// {
54-
// all_keys_and_values_copied = false;
55-
// break;
56-
// }
57-
// if (it->value() != init_elem->second)
58-
// {
59-
// all_keys_and_values_copied = false;
60-
// break;
61-
// }
62-
// }
63-
// // Allocation count
64-
// u32 expected_allocation_count = 0;
65-
// bool assigned_allocate = elements_in_assigned.size() > 0;
66-
// bool assigned_should_grow = (elements_in_assigned.size() < elements_to_assign.size());
41+
// Ensure we copy all elements
42+
bool all_keys_and_values_copied = true;
43+
for (usize index = 0; index < elements_to_assign.size(); index++)
44+
{
45+
const auto &init_elem = (elements_to_assign.begin() + index);
46+
const auto it = assigned.find(init_elem->first);
47+
if (it == assigned.end())
48+
{
49+
all_keys_and_values_copied = false;
50+
break;
51+
}
52+
if (it->key() != init_elem->first)
53+
{
54+
all_keys_and_values_copied = false;
55+
break;
56+
}
57+
if (it->value() != init_elem->second)
58+
{
59+
all_keys_and_values_copied = false;
60+
break;
61+
}
62+
}
63+
// Allocation count
64+
u32 expected_allocation_count = 0;
65+
bool assigned_allocate = elements_in_assigned.size() > 0;
66+
bool assigned_should_grow = (elements_in_assigned.size() < elements_to_assign.size());
6767

68-
// if (!hud::is_constant_evaluated() && hud::is_bitwise_move_constructible_v<key_type> && hud::is_bitwise_move_constructible_v<value_type>)
69-
// {
70-
// if (assigned_allocate)
71-
// expected_allocation_count++;
72-
// }
73-
// else
74-
// {
75-
// if (assigned_allocate)
76-
// expected_allocation_count++;
77-
// if (assigned_should_grow)
78-
// expected_allocation_count++;
79-
// }
68+
if (!hud::is_constant_evaluated() && hud::is_bitwise_move_constructible_v<key_type> && hud::is_bitwise_move_constructible_v<value_type>)
69+
{
70+
if (assigned_allocate)
71+
expected_allocation_count++;
72+
}
73+
else
74+
{
75+
if (assigned_allocate)
76+
expected_allocation_count++;
77+
if (assigned_should_grow)
78+
expected_allocation_count++;
79+
}
8080

81-
// if (hud::is_constant_evaluated())
82-
// {
83-
// expected_allocation_count *= 2;
84-
// }
81+
if (hud::is_constant_evaluated())
82+
{
83+
expected_allocation_count *= 2;
84+
}
8585

86-
// u32 expected_free_count = 0;
87-
// if (!hud::is_constant_evaluated() && hud::is_bitwise_move_constructible_v<key_type> && hud::is_bitwise_move_constructible_v<value_type>)
88-
// {
89-
// if (assigned_allocate)
90-
// expected_free_count++;
91-
// }
92-
// else
93-
// {
94-
// if (assigned_should_grow && assigned_allocate)
95-
// {
96-
// expected_free_count++;
97-
// }
98-
// }
99-
// // If we are in constant evaluated the allocation is done in 2 separated memory
100-
// if (hud::is_constant_evaluated())
101-
// {
102-
// expected_free_count *= 2;
103-
// }
104-
// return std::tuple {
105-
// all_keys_and_values_copied, // 0
106-
// assigned.count() == elements_to_assign.size(), // 1
107-
// assigned.max_count() >= elements_to_assign.size(), // 2
108-
// assigned.allocator().allocation_count() == expected_allocation_count, // 3
109-
// assigned.allocator().free_count() == expected_free_count // 4
110-
// };
111-
// };
86+
u32 expected_free_count = 0;
87+
if (!hud::is_constant_evaluated() && hud::is_bitwise_move_constructible_v<key_type> && hud::is_bitwise_move_constructible_v<value_type>)
88+
{
89+
if (assigned_allocate)
90+
expected_free_count++;
91+
}
92+
else
93+
{
94+
if (assigned_should_grow && assigned_allocate)
95+
{
96+
expected_free_count++;
97+
}
98+
}
99+
// If we are in constant evaluated the allocation is done in 2 separated memory
100+
if (hud::is_constant_evaluated())
101+
{
102+
expected_free_count *= 2;
103+
}
104+
return std::tuple {
105+
all_keys_and_values_copied, // 0
106+
assigned.count() == elements_to_assign.size(), // 1
107+
assigned.max_count() >= elements_to_assign.size(), // 2
108+
assigned.allocator().allocation_count() == expected_allocation_count, // 3
109+
assigned.allocator().free_count() == expected_free_count // 4
110+
};
111+
};
112112

113113
// Non constant
114-
// {
115-
// {
116-
// const auto result = test({}, {});
117-
// hud_assert_true(std::get<0>(result));
118-
// hud_assert_true(std::get<1>(result));
119-
// hud_assert_true(std::get<2>(result));
120-
// hud_assert_true(std::get<3>(result));
121-
// hud_assert_true(std::get<4>(result));
122-
// }
123-
// {
124-
// const auto result = test(TEST_VALUES, {});
125-
// hud_assert_true(std::get<0>(result));
126-
// hud_assert_true(std::get<1>(result));
127-
// hud_assert_true(std::get<2>(result));
128-
// hud_assert_true(std::get<3>(result));
129-
// hud_assert_true(std::get<4>(result));
130-
// }
131-
// {
132-
// const auto result = test({}, TEST_VALUES2);
133-
// hud_assert_true(std::get<0>(result));
134-
// hud_assert_true(std::get<1>(result));
135-
// hud_assert_true(std::get<2>(result));
136-
// hud_assert_true(std::get<3>(result));
137-
// hud_assert_true(std::get<4>(result));
138-
// }
139-
// {
140-
// const auto result = test(TEST_VALUES, TEST_VALUES2);
141-
// hud_assert_true(std::get<0>(result));
142-
// hud_assert_true(std::get<1>(result));
143-
// hud_assert_true(std::get<2>(result));
144-
// hud_assert_true(std::get<3>(result));
145-
// hud_assert_true(std::get<4>(result));
146-
// }
147-
// {
148-
// const auto result = test(TEST_VALUES, TEST_VALUES);
149-
// hud_assert_true(std::get<0>(result));
150-
// hud_assert_true(std::get<1>(result));
151-
// hud_assert_true(std::get<2>(result));
152-
// hud_assert_true(std::get<3>(result));
153-
// hud_assert_true(std::get<4>(result));
154-
// }
155-
// {
156-
// const auto result = test(TEST_VALUES2, TEST_VALUES);
157-
// hud_assert_true(std::get<0>(result));
158-
// hud_assert_true(std::get<1>(result));
159-
// hud_assert_true(std::get<2>(result));
160-
// hud_assert_true(std::get<3>(result));
161-
// hud_assert_true(std::get<4>(result));
162-
// }
163-
// }
114+
{
115+
{
116+
const auto result = test({}, {});
117+
hud_assert_true(std::get<0>(result));
118+
hud_assert_true(std::get<1>(result));
119+
hud_assert_true(std::get<2>(result));
120+
hud_assert_true(std::get<3>(result));
121+
hud_assert_true(std::get<4>(result));
122+
}
123+
{
124+
const auto result = test(TEST_VALUES, {});
125+
hud_assert_true(std::get<0>(result));
126+
hud_assert_true(std::get<1>(result));
127+
hud_assert_true(std::get<2>(result));
128+
hud_assert_true(std::get<3>(result));
129+
hud_assert_true(std::get<4>(result));
130+
}
131+
{
132+
const auto result = test({}, TEST_VALUES2);
133+
hud_assert_true(std::get<0>(result));
134+
hud_assert_true(std::get<1>(result));
135+
hud_assert_true(std::get<2>(result));
136+
hud_assert_true(std::get<3>(result));
137+
hud_assert_true(std::get<4>(result));
138+
}
139+
{
140+
const auto result = test(TEST_VALUES, TEST_VALUES2);
141+
hud_assert_true(std::get<0>(result));
142+
hud_assert_true(std::get<1>(result));
143+
hud_assert_true(std::get<2>(result));
144+
hud_assert_true(std::get<3>(result));
145+
hud_assert_true(std::get<4>(result));
146+
}
147+
{
148+
const auto result = test(TEST_VALUES, TEST_VALUES);
149+
hud_assert_true(std::get<0>(result));
150+
hud_assert_true(std::get<1>(result));
151+
hud_assert_true(std::get<2>(result));
152+
hud_assert_true(std::get<3>(result));
153+
hud_assert_true(std::get<4>(result));
154+
}
155+
{
156+
const auto result = test(TEST_VALUES2, TEST_VALUES);
157+
hud_assert_true(std::get<0>(result));
158+
hud_assert_true(std::get<1>(result));
159+
hud_assert_true(std::get<2>(result));
160+
hud_assert_true(std::get<3>(result));
161+
hud_assert_true(std::get<4>(result));
162+
}
163+
}
164164

165-
// // Constant
166-
// {
167-
// {
168-
// constexpr auto result = test({}, {});
169-
// hud_assert_true(std::get<0>(result));
170-
// hud_assert_true(std::get<1>(result));
171-
// hud_assert_true(std::get<2>(result));
172-
// hud_assert_true(std::get<3>(result));
173-
// hud_assert_true(std::get<4>(result));
174-
// }
175-
// {
176-
// constexpr auto result = test(TEST_VALUES, {});
177-
// hud_assert_true(std::get<0>(result));
178-
// hud_assert_true(std::get<1>(result));
179-
// hud_assert_true(std::get<2>(result));
180-
// hud_assert_true(std::get<3>(result));
181-
// hud_assert_true(std::get<4>(result));
182-
// }
183-
// {
184-
// constexpr auto result = test({}, TEST_VALUES2);
185-
// hud_assert_true(std::get<0>(result));
186-
// hud_assert_true(std::get<1>(result));
187-
// hud_assert_true(std::get<2>(result));
188-
// hud_assert_true(std::get<3>(result));
189-
// hud_assert_true(std::get<4>(result));
190-
// }
191-
// {
192-
// constexpr auto result = test(TEST_VALUES, TEST_VALUES2);
193-
// hud_assert_true(std::get<0>(result));
194-
// hud_assert_true(std::get<1>(result));
195-
// hud_assert_true(std::get<2>(result));
196-
// hud_assert_true(std::get<3>(result));
197-
// hud_assert_true(std::get<4>(result));
198-
// }
199-
// {
200-
// constexpr auto result = test(TEST_VALUES, TEST_VALUES);
201-
// hud_assert_true(std::get<0>(result));
202-
// hud_assert_true(std::get<1>(result));
203-
// hud_assert_true(std::get<2>(result));
204-
// hud_assert_true(std::get<3>(result));
205-
// hud_assert_true(std::get<4>(result));
206-
// }
207-
// {
208-
// constexpr auto result = test(TEST_VALUES2, TEST_VALUES);
209-
// hud_assert_true(std::get<0>(result));
210-
// hud_assert_true(std::get<1>(result));
211-
// hud_assert_true(std::get<2>(result));
212-
// hud_assert_true(std::get<3>(result));
213-
// hud_assert_true(std::get<4>(result));
214-
// }
215-
// }
165+
// Constant
166+
{
167+
{
168+
constexpr auto result = test({}, {});
169+
hud_assert_true(std::get<0>(result));
170+
hud_assert_true(std::get<1>(result));
171+
hud_assert_true(std::get<2>(result));
172+
hud_assert_true(std::get<3>(result));
173+
hud_assert_true(std::get<4>(result));
174+
}
175+
{
176+
constexpr auto result = test(TEST_VALUES, {});
177+
hud_assert_true(std::get<0>(result));
178+
hud_assert_true(std::get<1>(result));
179+
hud_assert_true(std::get<2>(result));
180+
hud_assert_true(std::get<3>(result));
181+
hud_assert_true(std::get<4>(result));
182+
}
183+
{
184+
constexpr auto result = test({}, TEST_VALUES2);
185+
hud_assert_true(std::get<0>(result));
186+
hud_assert_true(std::get<1>(result));
187+
hud_assert_true(std::get<2>(result));
188+
hud_assert_true(std::get<3>(result));
189+
hud_assert_true(std::get<4>(result));
190+
}
191+
{
192+
constexpr auto result = test(TEST_VALUES, TEST_VALUES2);
193+
hud_assert_true(std::get<0>(result));
194+
hud_assert_true(std::get<1>(result));
195+
hud_assert_true(std::get<2>(result));
196+
hud_assert_true(std::get<3>(result));
197+
hud_assert_true(std::get<4>(result));
198+
}
199+
{
200+
constexpr auto result = test(TEST_VALUES, TEST_VALUES);
201+
hud_assert_true(std::get<0>(result));
202+
hud_assert_true(std::get<1>(result));
203+
hud_assert_true(std::get<2>(result));
204+
hud_assert_true(std::get<3>(result));
205+
hud_assert_true(std::get<4>(result));
206+
}
207+
{
208+
constexpr auto result = test(TEST_VALUES2, TEST_VALUES);
209+
hud_assert_true(std::get<0>(result));
210+
hud_assert_true(std::get<1>(result));
211+
hud_assert_true(std::get<2>(result));
212+
hud_assert_true(std::get<3>(result));
213+
hud_assert_true(std::get<4>(result));
214+
}
215+
}
216216
}
217217

218218
// Test with extra

0 commit comments

Comments
 (0)