@@ -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