mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 20:15:17 +00:00
AK: Make truncating UFixedBigInts constexpr
Also add some tests and shift tests while we're at it.
This commit is contained in:
parent
66d07a452f
commit
bf6d4a5cbf
Notes:
sideshowbarker
2024-07-17 05:12:24 +09:00
Author: https://github.com/davidot Commit: https://github.com/SerenityOS/serenity/commit/bf6d4a5cbf Pull-request: https://github.com/SerenityOS/serenity/pull/15377 Issue: https://github.com/SerenityOS/serenity/issues/14691 Reviewed-by: https://github.com/ADKaster Reviewed-by: https://github.com/AtkinsSJ Reviewed-by: https://github.com/linusg
2 changed files with 16 additions and 1 deletions
|
@ -87,7 +87,7 @@ public:
|
|||
}
|
||||
|
||||
template<Unsigned U>
|
||||
requires(sizeof(T) >= sizeof(U)) explicit operator U() const
|
||||
requires(sizeof(T) >= sizeof(U)) constexpr explicit operator U() const
|
||||
{
|
||||
return static_cast<U>(m_low);
|
||||
}
|
||||
|
|
|
@ -88,6 +88,21 @@ TEST_CASE(div_mod)
|
|||
}
|
||||
}
|
||||
|
||||
TEST_CASE(shifts)
|
||||
{
|
||||
u128 val { 0x1234ULL };
|
||||
EXPECT_EQ(val << 1u, u128(0x2468ull));
|
||||
EXPECT_EQ(val << 4u, u128(0x12340ull));
|
||||
EXPECT_EQ(val << 64u, u128(0ull, 0x1234ull));
|
||||
}
|
||||
|
||||
TEST_CASE(constexpr_truncae)
|
||||
{
|
||||
static constexpr u256 wide = u256(u128 { 0x8a4b08d32f8b8e48ULL, 0x8459322f67b8e26dULL }, u128 { 0xeea82af4312d1931ULL, 0x654fb5cfe82dbd58ULL });
|
||||
static constexpr u64 val = static_cast<u64>(wide);
|
||||
EXPECT_EQ(val, 0x8a4b08d32f8b8e48ULL);
|
||||
}
|
||||
|
||||
TEST_CASE(mod_hardcoded)
|
||||
{
|
||||
EXPECT_EQ(u256(u128 { 0x8a4b08d32f8b8e48ULL, 0x8459322f67b8e26dULL }, u128 { 0xeea82af4312d1931ULL, 0x654fb5cfe82dbd58ULL }) % u256(u128 { 0x40a58652868d5d66ULL, 0x81d674bf7d6d6861ULL }, u128 { 0xa8314900e6188a82ULL, 0xc273ca947237b4aaULL }), u256(u128 { 0x8a4b08d32f8b8e48ULL, 0x8459322f67b8e26dULL }, u128 { 0xeea82af4312d1931ULL, 0x654fb5cfe82dbd58ULL }));
|
||||
|
|
Loading…
Add table
Reference in a new issue