Skip to content

Commit e25a7ab

Browse files
committed
Fix check
Fix hashmap alignment
1 parent ea630be commit e25a7ab

File tree

6 files changed

+111
-43
lines changed

6 files changed

+111
-43
lines changed

interface/core/assert.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,15 @@ namespace hud
1313
*/
1414
static constexpr void check([[maybe_unused]] const bool condition) noexcept
1515
{
16-
if constexpr (hud::compilation::is_assertion_enabled() && !hud::is_constant_evaluated())
16+
if (!hud::is_constant_evaluated())
1717
{
18-
hud::debugger::break_here_if(!condition);
18+
if constexpr (hud::compilation::is_assertion_enabled())
19+
{
20+
hud::debugger::break_here_if(!condition);
1921
#if defined HD_ABORT_ON_ASSERT
20-
hud::debugger::abort_if(!condition);
22+
hud::debugger::abort_if(!condition);
2123
#endif
24+
}
2225
}
2326
}
2427

interface/core/containers/hashset.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1839,8 +1839,8 @@ namespace hud
18391839
}
18401840
else
18411841
{
1842-
control_ptr_ = hud::bit_cast<control_type *>(allocator_.template allocate<slot_type>(aligned_allocation_size).data());
1843-
slot_ptr_ = hud::bit_cast<slot_type *>(control_ptr_ + aligned_control_size);
1842+
control_ptr_ = allocator_.template allocate<control_type>(aligned_allocation_size).data();
1843+
slot_ptr_ = reinterpret_cast<slot_type *>(hud::memory::align_address(reinterpret_cast<const uptr>(control_ptr_ + ctrl_size), alignof(slot_type)));
18441844
hud::check(hud::memory::is_pointer_aligned(slot_ptr_, alignof(slot_type)));
18451845
}
18461846
return ctrl_size;

test/hashmap/hashmap_copy_assign_operator.cpp

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5417,11 +5417,16 @@ GTEST_TEST(hashmap, copy_assign_hashmap_same_allocator_call_destructor_of_elemen
54175417
to_assign.add({i, dtor_to_assigned_key_counter + i}, {i, dtor_to_assigned_value_counter + i});
54185418
}
54195419
// Set all destructor to zero, to not count destruction that appears during add of temporary key and value type
5420-
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
5421-
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
5422-
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
5423-
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
5424-
5420+
if (count_in_assigned > 0)
5421+
{
5422+
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
5423+
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
5424+
}
5425+
if (count_to_assigned > 0)
5426+
{
5427+
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
5428+
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
5429+
}
54255430
assigned = to_assign;
54265431

54275432
// Ensure we destroy all elements that is in assigned
@@ -5686,10 +5691,16 @@ GTEST_TEST(hashmap, copy_assign_hashmap_same_allocator_call_destructor_of_elemen
56865691
to_assign.add({i, dtor_to_assigned_key_counter + i}, {i, dtor_to_assigned_value_counter + i});
56875692
}
56885693
// Set all destructor to zero, to not count destruction that appears during add of temporary key and value type
5689-
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
5690-
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
5691-
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
5692-
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
5694+
if (count_in_assigned > 0)
5695+
{
5696+
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
5697+
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
5698+
}
5699+
if (count_to_assigned > 0)
5700+
{
5701+
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
5702+
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
5703+
}
56935704

56945705
assigned = to_assign;
56955706

@@ -6402,10 +6413,16 @@ GTEST_TEST(hashmap, copy_assign_hashmap_different_allocator_call_destructor_of_e
64026413
to_assign.add({i, dtor_to_assigned_key_counter + i}, {i, dtor_to_assigned_value_counter + i});
64036414
}
64046415
// Set all destructor to zero, to not count destruction that appears during add of temporary key and value type
6405-
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
6406-
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
6407-
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
6408-
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
6416+
if (count_in_assigned > 0)
6417+
{
6418+
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
6419+
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
6420+
}
6421+
if (count_to_assigned > 0)
6422+
{
6423+
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
6424+
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
6425+
}
64096426

64106427
assigned = to_assign;
64116428

@@ -6669,10 +6686,16 @@ GTEST_TEST(hashmap, copy_assign_hashmap_different_allocator_call_destructor_of_e
66696686
to_assign.add({i, dtor_to_assigned_key_counter + i}, {i, dtor_to_assigned_value_counter + i});
66706687
}
66716688
// Set all destructor to zero, to not count destruction that appears during add of temporary key and value type
6672-
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
6673-
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
6674-
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
6675-
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
6689+
if (count_in_assigned > 0)
6690+
{
6691+
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
6692+
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
6693+
}
6694+
if (count_to_assigned > 0)
6695+
{
6696+
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
6697+
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
6698+
}
66766699

66776700
assigned = to_assign;
66786701

test/hashmap/hashmap_indexed_operator.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,32 @@ GTEST_TEST(hashmap, indexed_operator_trivial_same_type)
77
hud::hashmap<usize, usize> map;
88
map[1] = 2;
99
hud::hashmap<const char *, const char *> map2;
10-
map2["key"] = "value";
11-
const bool ok = map2.find("key")->value() = "value";
12-
map2["key"] = "value2";
13-
const bool ok2 = map2.find("key")->value() = "value2";
10+
const char key_0[] = "key";
11+
const char value_0[] = "value";
12+
const char value_1[] = "value_1";
13+
map2[key_0] = value_0;
14+
const bool ok = map2.find(key_0)->value() = value_0;
15+
map2[key_0] = value_1;
16+
const bool ok2 = map2.find(key_0)->value() = value_1;
1417
return std::tuple {
1518
map.find(1)->value() = 2,
1619
ok,
1720
ok2
1821
};
1922
};
23+
24+
// Non constant
25+
{
26+
const auto result = test();
27+
hud_assert_true(std::get<0>(result));
28+
hud_assert_true(std::get<1>(result));
29+
hud_assert_true(std::get<2>(result));
30+
}
31+
// Constant
32+
{
33+
// constexpr auto result = test();
34+
// hud_assert_true(std::get<0>(result));
35+
// hud_assert_true(std::get<1>(result));
36+
// hud_assert_true(std::get<2>(result));
37+
}
2038
}

test/hashmap/hashmap_move_assign_operator.cpp

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5471,10 +5471,16 @@ GTEST_TEST(hashmap, move_assign_hashmap_same_allocator_call_destructor_of_elemen
54715471
to_assign.add({i, dtor_to_assigned_key_counter + i}, {i, dtor_to_assigned_value_counter + i});
54725472
}
54735473
// Set all destructor to zero, to not count destruction that appears during add of temporary key and value type
5474-
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
5475-
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
5476-
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
5477-
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
5474+
if (count_in_assigned > 0)
5475+
{
5476+
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
5477+
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
5478+
}
5479+
if (count_to_assigned > 0)
5480+
{
5481+
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
5482+
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
5483+
}
54785484

54795485
assigned = hud::move(to_assign);
54805486

@@ -5740,10 +5746,16 @@ GTEST_TEST(hashmap, move_assign_hashmap_same_allocator_call_destructor_of_elemen
57405746
to_assign.add({i, dtor_to_assigned_key_counter + i}, {i, dtor_to_assigned_value_counter + i});
57415747
}
57425748
// Set all destructor to zero, to not count destruction that appears during add of temporary key and value type
5743-
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
5744-
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
5745-
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
5746-
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
5749+
if (count_in_assigned > 0)
5750+
{
5751+
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
5752+
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
5753+
}
5754+
if (count_to_assigned > 0)
5755+
{
5756+
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
5757+
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
5758+
}
57475759

57485760
assigned = hud::move(to_assign);
57495761

@@ -6456,10 +6468,16 @@ GTEST_TEST(hashmap, move_assign_hashmap_different_allocator_call_destructor_of_e
64566468
to_assign.add({i, dtor_to_assigned_key_counter + i}, {i, dtor_to_assigned_value_counter + i});
64576469
}
64586470
// Set all destructor to zero, to not count destruction that appears during add of temporary key and value type
6459-
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
6460-
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
6461-
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
6462-
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
6471+
if (count_in_assigned > 0)
6472+
{
6473+
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
6474+
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
6475+
}
6476+
if (count_to_assigned > 0)
6477+
{
6478+
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
6479+
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
6480+
}
64636481

64646482
assigned = hud::move(to_assign);
64656483

@@ -6724,10 +6742,16 @@ GTEST_TEST(hashmap, move_assign_hashmap_different_allocator_call_destructor_of_e
67246742
to_assign.add({i, dtor_to_assigned_key_counter + i}, {i, dtor_to_assigned_value_counter + i});
67256743
}
67266744
// Set all destructor to zero, to not count destruction that appears during add of temporary key and value type
6727-
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
6728-
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
6729-
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
6730-
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
6745+
if (count_in_assigned > 0)
6746+
{
6747+
hud::memory::set_memory_zero_safe(dtor_assigned_key_counter, count_in_assigned * sizeof(i32));
6748+
hud::memory::set_memory_zero_safe(dtor_assigned_value_counter, count_in_assigned * sizeof(i32));
6749+
}
6750+
if (count_to_assigned > 0)
6751+
{
6752+
hud::memory::set_memory_zero_safe(dtor_to_assigned_key_counter, count_to_assigned * sizeof(i32));
6753+
hud::memory::set_memory_zero_safe(dtor_to_assigned_value_counter, count_to_assigned * sizeof(i32));
6754+
}
67316755

67326756
assigned = hud::move(to_assign);
67336757

test/misc/allocator_watcher.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ namespace hud_test
5656
template<typename type_t = u8>
5757
[[nodiscard]] constexpr memory_allocation_type<type_t> allocate(const usize count) noexcept
5858
{
59-
auto buffer = allocator.template allocate<type_t>(count);
59+
memory_allocation_type<type_t> buffer = allocator.template allocate<type_t>(count);
6060
if (!buffer.is_empty())
6161
{
6262
count_of_alloc++;

0 commit comments

Comments
 (0)