Optimised shifts

This commit is contained in:
John Wellbelove 2022-08-08 09:42:32 +01:00
parent d61cf447bd
commit c64820a6ea
2 changed files with 288 additions and 164 deletions

File diff suppressed because it is too large Load Diff

View File

@ -861,7 +861,7 @@ namespace
etl::bitset<60> shift(0x1234567800UL);
data <<= 8U;
CHECK_EQUAL(shift.value<uint64_t>(), data.value<uint64_t>());
CHECK_EQUAL_HEX(shift.value<uint64_t>(), data.value<uint64_t>());
}
//*************************************************************************
@ -893,6 +893,33 @@ namespace
CHECK(data2 == shift11);
}
//*************************************************************************
TEST(test_shift_left_operator_all_shifts_full_size)
{
constexpr uint64_t value = 0x01233456789ABCDEULL;
for (int shift = 0; shift <= 64; ++shift)
{
etl::bitset<64> data(value);
CHECK_EQUAL_HEX((value << shift), (data << shift).value<uint64_t>());
}
}
//*************************************************************************
TEST(test_shift_left_operator_all_shifts_partial_size)
{
constexpr uint64_t value = 0x01233456789ABCDEULL;
constexpr uint64_t mask = 0x0FFFFFFFFFFFFFFFULL;
for (int shift = 0; shift <= 64; ++shift)
{
etl::bitset<60> data(value);
CHECK_EQUAL_HEX(((value << shift) & mask), (data << shift).value<uint64_t>());
}
}
//*************************************************************************
TEST(test_shift_right_operator)
{
@ -915,6 +942,33 @@ namespace
CHECK(data2 == shift11);
}
//*************************************************************************
TEST(test_shift_right_operator_all_shifts_full_size)
{
constexpr uint64_t value = 0x01233456789ABCDEULL;
for (int shift = 0; shift <= 64; ++shift)
{
etl::bitset<64> data(value);
CHECK_EQUAL_HEX((value >> shift), (data >> shift).value<uint64_t>());
}
}
//*************************************************************************
TEST(test_shift_right_operator_all_shifts_partial_size)
{
constexpr uint64_t value = 0x01233456789ABCDEULL;
constexpr uint64_t mask = 0x0FFFFFFFFFFFFFFFULL;
for (int shift = 0; shift <= 64; ++shift)
{
etl::bitset<60> data(value);
CHECK_EQUAL_HEX(((value >> shift) & mask), (data >> shift).value<uint64_t>());
}
}
//*************************************************************************
TEST(test_shift_right_operator_shift_element_size)
{
@ -922,7 +976,7 @@ namespace
etl::bitset<60> shift(0x123456UL);
data >>= 8U;
CHECK_EQUAL(shift.value<uint64_t>(), data.value<uint64_t>());
CHECK_EQUAL_HEX(shift.value<uint64_t>(), data.value<uint64_t>());
}
//*************************************************************************