mirror of
https://github.com/ETLCPP/etl.git
synced 2026-06-28 21:38:44 +08:00
Optimised shifts
This commit is contained in:
parent
d61cf447bd
commit
c64820a6ea
File diff suppressed because it is too large
Load Diff
@ -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>());
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user