diff --git a/AK/Tests/TestChecked.cpp b/AK/Tests/TestChecked.cpp index 20ea0032dc..85abb9e530 100644 --- a/AK/Tests/TestChecked.cpp +++ b/AK/Tests/TestChecked.cpp @@ -95,6 +95,29 @@ TEST_CASE(operator_arith) EXPECT_EQ(b / a, 28); } +TEST_CASE(detects_signed_overflow) +{ + EXPECT(!(Checked(0x40000000) + Checked(0x3fffffff)).has_overflow()); + EXPECT((Checked(0x40000000) + Checked(0x40000000)).has_overflow()); + EXPECT(!(Checked(-0x40000000) + Checked(-0x40000000)).has_overflow()); + EXPECT((Checked(-0x40000001) + Checked(-0x40000000)).has_overflow()); + + EXPECT(!(Checked(0x40000000) - Checked(-0x3fffffff)).has_overflow()); + EXPECT((Checked(0x40000000) - Checked(-0x40000000)).has_overflow()); + EXPECT(!(Checked(-0x40000000) - Checked(0x40000000)).has_overflow()); + EXPECT((Checked(-0x40000000) - Checked(0x40000001)).has_overflow()); + + EXPECT(!(Checked(0x4000000000000000) + Checked(0x3fffffffffffffff)).has_overflow()); + EXPECT((Checked(0x4000000000000000) + Checked(0x4000000000000000)).has_overflow()); + EXPECT(!(Checked(-0x4000000000000000) + Checked(-0x4000000000000000)).has_overflow()); + EXPECT((Checked(-0x4000000000000001) + Checked(-0x4000000000000000)).has_overflow()); + + EXPECT(!(Checked(0x4000000000000000) - Checked(-0x3fffffffffffffff)).has_overflow()); + EXPECT((Checked(0x4000000000000000) - Checked(-0x4000000000000000)).has_overflow()); + EXPECT(!(Checked(-0x4000000000000000) - Checked(0x4000000000000000)).has_overflow()); + EXPECT((Checked(-0x4000000000000000) - Checked(0x4000000000000001)).has_overflow()); +} + TEST_CASE(should_constexpr_default_construct) { constexpr Checked checked_value {};