@@ -64,6 +64,8 @@ class TestMathLib : public TestFixture {
6464 TEST_CASE (tan);
6565 TEST_CASE (abs);
6666 TEST_CASE (toString);
67+ TEST_CASE (additionWouldOverflow);
68+ TEST_CASE (subtractionWouldOverflow);
6769 }
6870
6971 void isGreater () const {
@@ -1511,6 +1513,34 @@ class TestMathLib : public TestFixture {
15111513 ASSERT_EQUALS (" 2.22507385851e-308" , MathLib::toString (std::numeric_limits<double >::min ()));
15121514 ASSERT_EQUALS (" 1.79769313486e+308" , MathLib::toString (std::numeric_limits<double >::max ()));
15131515 }
1516+
1517+ void additionWouldOverflow () const {
1518+ const auto max = std::numeric_limits<MathLib::bigint>::max ();
1519+ const auto min = std::numeric_limits<MathLib::bigint>::min ();
1520+
1521+ ASSERT_EQUALS (false , MathLib::additionWouldOverflow (1 , 2 ));
1522+ ASSERT_EQUALS (false , MathLib::additionWouldOverflow (1 , -2 ));
1523+ ASSERT_EQUALS (false , MathLib::additionWouldOverflow (max - 1 , 1 ));
1524+ ASSERT_EQUALS (true , MathLib::additionWouldOverflow (max - 1 , 2 ));
1525+ ASSERT_EQUALS (false , MathLib::additionWouldOverflow (0 , min));
1526+ ASSERT_EQUALS (true , MathLib::additionWouldOverflow (-1 , min));
1527+ ASSERT_EQUALS (false , MathLib::additionWouldOverflow (min + 1 , -1 ));
1528+ ASSERT_EQUALS (true , MathLib::additionWouldOverflow (min, -1 ));
1529+ }
1530+
1531+ void subtractionWouldOverflow () const {
1532+ const auto max = std::numeric_limits<MathLib::bigint>::max ();
1533+ const auto min = std::numeric_limits<MathLib::bigint>::min ();
1534+
1535+ ASSERT_EQUALS (false , MathLib::subtractionWouldOverflow (1 , 2 ));
1536+ ASSERT_EQUALS (false , MathLib::subtractionWouldOverflow (1 , -2 ));
1537+ ASSERT_EQUALS (false , MathLib::subtractionWouldOverflow (min, 0 ));
1538+ ASSERT_EQUALS (true , MathLib::subtractionWouldOverflow (min, 1 ));
1539+ ASSERT_EQUALS (false , MathLib::subtractionWouldOverflow (max - 1 , -1 ));
1540+ ASSERT_EQUALS (true , MathLib::subtractionWouldOverflow (max, -1 ));
1541+ ASSERT_EQUALS (true , MathLib::subtractionWouldOverflow (0 , min));
1542+ ASSERT_EQUALS (false , MathLib::subtractionWouldOverflow (-1 , min));
1543+ }
15141544};
15151545
15161546REGISTER_TEST (TestMathLib)
0 commit comments