mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-20 19:45:12 +00:00
AK: Fix FixedPoint to integral comparisons
Add tests to ensure that the fixed point numbers compare correctly to integrals
This commit is contained in:
parent
f5fd2f3857
commit
5d6e3441fe
Notes:
sideshowbarker
2024-07-17 18:09:00 +09:00
Author: https://github.com/kleinesfilmroellchen Commit: https://github.com/SerenityOS/serenity/commit/5d6e3441fe Pull-request: https://github.com/SerenityOS/serenity/pull/12538 Reviewed-by: https://github.com/Hendiadyoin1 Reviewed-by: https://github.com/bgianfo
2 changed files with 29 additions and 24 deletions
|
@ -261,42 +261,22 @@ public:
|
|||
template<Integral I>
|
||||
bool operator>(I other) const
|
||||
{
|
||||
if (m_value > 0)
|
||||
return (m_value >> precision) > other || (m_value >> precision == other && (m_value & radix_mask));
|
||||
if (other > 0)
|
||||
return false;
|
||||
|
||||
return (m_value >> precision) > other || !(m_value >> precision == other && (m_value & radix_mask));
|
||||
return !(*this <= other);
|
||||
}
|
||||
template<Integral I>
|
||||
bool operator>=(I other) const
|
||||
{
|
||||
if (m_value > 0)
|
||||
return (m_value >> precision) >= other || (m_value >> precision == other && (m_value & radix_mask));
|
||||
if (other > 0)
|
||||
return false;
|
||||
|
||||
return (m_value >> precision) >= other || !(m_value >> precision == other && (m_value & radix_mask));
|
||||
return !(*this < other);
|
||||
}
|
||||
template<Integral I>
|
||||
bool operator<(I other) const
|
||||
{
|
||||
if (m_value > 0)
|
||||
return (m_value >> precision) < other || !(m_value >> precision == other && (m_value & radix_mask));
|
||||
if (other > 0)
|
||||
return true;
|
||||
|
||||
return (m_value >> precision) < other || (m_value >> precision == other && (m_value & radix_mask));
|
||||
return (m_value >> precision) < other || m_value < (other << precision);
|
||||
}
|
||||
template<Integral I>
|
||||
bool operator<=(I other) const
|
||||
{
|
||||
if (m_value > 0)
|
||||
return (m_value >> precision) <= other || !(m_value >> precision == other && (m_value & radix_mask));
|
||||
if (other > 0)
|
||||
return true;
|
||||
|
||||
return (m_value >> precision) <= other || (m_value >> precision == other && (m_value & radix_mask));
|
||||
return *this < other || *this == other;
|
||||
}
|
||||
|
||||
// Casting from a float should be faster than casting to a float
|
||||
|
|
|
@ -73,6 +73,31 @@ TEST_CASE(rounding)
|
|||
EXPECT_EQ(Type(-1.5).ltrunk(), -1);
|
||||
}
|
||||
|
||||
TEST_CASE(comparison)
|
||||
{
|
||||
EXPECT(Type(0) < 1);
|
||||
EXPECT(Type(0) <= 1);
|
||||
EXPECT(Type(0) <= 0);
|
||||
EXPECT(Type(-10) <= -10);
|
||||
|
||||
EXPECT(Type(4.25) > 4);
|
||||
EXPECT(Type(4.25) >= 4);
|
||||
EXPECT(Type(4.25) <= 5);
|
||||
EXPECT(Type(4.25) < 5);
|
||||
EXPECT(Type(1.5) > 1);
|
||||
|
||||
EXPECT(!(FixedPoint<4, u8>(2) > 128));
|
||||
EXPECT(!(FixedPoint<4, u8>(2) >= 128));
|
||||
|
||||
EXPECT(Type(-6.25) < -6);
|
||||
EXPECT(Type(-6.25) <= -6);
|
||||
EXPECT(Type(-6.75) > -7);
|
||||
EXPECT(Type(-6.75) >= -7);
|
||||
|
||||
EXPECT(Type(17) == 17);
|
||||
EXPECT(Type(-8) != -9);
|
||||
}
|
||||
|
||||
TEST_CASE(cast)
|
||||
{
|
||||
FixedPoint<16, u32> downcast_value1(FixedPoint<32, u64>(123.4567));
|
||||
|
|
Loading…
Add table
Reference in a new issue