diff --git a/poincare/src/integer.cpp b/poincare/src/integer.cpp index 80105e4f4..a69e35d4b 100644 --- a/poincare/src/integer.cpp +++ b/poincare/src/integer.cpp @@ -381,7 +381,7 @@ Integer Integer::usum(const Integer & a, const Integer & b, bool subtract, bool native_uint_t bDigit = (i >= b.m_numberOfDigits ? 0 : b.digit(i)); native_uint_t result = (subtract ? aDigit - bDigit - carry : aDigit + bDigit + carry); digits[i] = result; - carry = (subtract ? (aDigitresult)||(bDigit>result))); // There's been an underflow or overflow + carry = (subtract ? (aDigitresult)||(bDigit>result))); // There's been an underflow or overflow } while (digits[size-1] == 0 && size>1) { size--; diff --git a/poincare/test/integer.cpp b/poincare/test/integer.cpp index 6865d7c73..222026f1c 100644 --- a/poincare/test/integer.cpp +++ b/poincare/test/integer.cpp @@ -33,6 +33,7 @@ QUIZ_CASE(poincare_integer_addition) { assert(Integer::Addition(Integer("123456789123456789"), Integer(1)).isEqualTo(Integer("123456789123456790"))); assert(Integer::Addition(Integer("-123456789123456789"), Integer("123456789123456789")).isEqualTo(Integer("0"))); assert(Integer::Addition(Integer("234"), Integer(-234)).isEqualTo(Integer(0))); + assert(Integer::Addition(Integer("18446744073709551616"), Integer("18446744073709551368")).isEqualTo(Integer("36893488147419102984"))); } QUIZ_CASE(poincare_integer_subtraction) { @@ -43,6 +44,7 @@ QUIZ_CASE(poincare_integer_subtraction) { assert(Integer::Subtraction(Integer(-23), Integer(-23)).isEqualTo(Integer(0))); assert(Integer::Subtraction(Integer("-123456789123456789"), Integer("-123456789123456789")).isEqualTo(Integer(0))); assert(Integer::Subtraction(Integer("123456789123456789"), Integer("123456789123456789")).isEqualTo(Integer(0))); + assert(Integer::Subtraction(Integer("18446744073709551616"), Integer("18446744073709551368")).isEqualTo(Integer(248))); } QUIZ_CASE(poincare_integer_multiplication) { @@ -76,6 +78,7 @@ QUIZ_CASE(poincare_integer_divide) { assert(Integer::Division(Integer("12345678910111213141516171819202122"), Integer("10")).quotient.isEqualTo(Integer("1234567891011121314151617181920212")) && Integer::Division(Integer("12345678910111213141516171819202122"), Integer("10")).remainder.isEqualTo(Integer("2"))); assert(Integer::Division(Integer("0"), Integer("-10")).quotient.isEqualTo(Integer("0")) && Integer::Division(Integer("0"), Integer("-10")).remainder.isEqualTo(Integer("0"))); assert(Integer::Division(Integer("0"), Integer("-123456789098760")).quotient.isEqualTo(Integer("0")) && Integer::Division(Integer("0"), Integer("-123456789098760")).remainder.isEqualTo(Integer("0"))); + assert(Integer::Division(Integer("2305843009213693952"), Integer("2305843009213693921")).quotient.isEqualTo(Integer("1")) && Integer::Division(Integer("2305843009213693952"), Integer("2305843009213693921")).remainder.isEqualTo(Integer("31"))); } template