diff --git a/poincare/src/integer.cpp b/poincare/src/integer.cpp index 54c4e2db3..7baaafaa1 100644 --- a/poincare/src/integer.cpp +++ b/poincare/src/integer.cpp @@ -581,7 +581,7 @@ Integer Integer::addition(const Integer & a, const Integer & b, bool inverseBNeg us.setNegative(a.sign() == ExpressionNode::Sign::Negative); return us; } else { - Integer us = IntegerNode::usum(a.node(), b.node(), true); + Integer us = IntegerNode::usum(b.node(), a.node(), true); us.setNegative(bNegative); return us; } diff --git a/poincare/test/integer.cpp b/poincare/test/integer.cpp index 7db97d8d1..a665084e0 100644 --- a/poincare/test/integer.cpp +++ b/poincare/test/integer.cpp @@ -87,36 +87,38 @@ QUIZ_CASE(poincare_integer_addition) { assert_add_to(Integer("65537"), Integer("65537"), Integer("131074")); } +static inline void assert_sub_to(const Integer i, const Integer j, const Integer k) { + assert(Integer::NaturalOrder(Integer::Subtraction(i, j), k) == 0); +} + QUIZ_CASE(poincare_integer_subtraction) { -#if 0 - assert(Integer::Subtraction(Integer(123), Integer(23)).isEqualTo(Integer(100))); - assert(Integer::Subtraction(Integer("123456789123456789"), Integer("9999999999")).isEqualTo(Integer("123456779123456790"))); - assert(Integer::Subtraction(Integer(23), Integer(100)).isEqualTo(Integer(-77))); - assert(Integer::Subtraction(Integer(23), Integer(23)).isEqualTo(Integer(0))); - 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))); + assert_sub_to(Integer(123), Integer(23), Integer(100)); + assert_sub_to(Integer("123456789123456789"), Integer("9999999999"), Integer("123456779123456790")); + assert_sub_to(Integer(23), Integer(100), Integer(-77)); + assert_sub_to(Integer(23), Integer(23), Integer(0)); + assert_sub_to(Integer(-23), Integer(-23), Integer(0)); + assert_sub_to(Integer("-123456789123456789"), Integer("-123456789123456789"), Integer(0)); + assert_sub_to(Integer("123456789123456789"), Integer("123456789123456789"), Integer(0)); + assert_sub_to(Integer("18446744073709551616"), Integer("18446744073709551368"), Integer(248)); //2^64-2^64 - assert(Integer::Subtraction(Integer("18446744073709551616"), Integer("18446744073709551616")).isEqualTo(Integer("0"))); + assert_sub_to(Integer("18446744073709551616"), Integer("18446744073709551616"), Integer("0")); //2^64-2^32 - assert(Integer::Subtraction(Integer("18446744073709551616"), Integer("4294967296")).isEqualTo(Integer("18446744069414584320"))); + assert_sub_to(Integer("18446744073709551616"), Integer("4294967296"), Integer("18446744069414584320")); //2^32-2^64 - assert(Integer::Subtraction(Integer("4294967296"), Integer("18446744073709551616")).isEqualTo(Integer("-18446744069414584320"))); + assert_sub_to(Integer("4294967296"), Integer("18446744073709551616"), Integer("-18446744069414584320")); //2^64-1 - assert(Integer::Subtraction(Integer("18446744073709551616"), Integer("1")).isEqualTo(Integer("18446744073709551615"))); + assert_sub_to(Integer("18446744073709551616"), Integer("1"), Integer("18446744073709551615")); //1-2^64 - assert(Integer::Subtraction(Integer("1"), Integer("18446744073709551616")).isEqualTo(Integer("-18446744073709551615"))); + assert_sub_to(Integer("1"), Integer("18446744073709551616"), Integer("-18446744073709551615")); //2^32-2^32 - assert(Integer::Subtraction(Integer("4294967296"), Integer("4294967296")).isEqualTo(Integer("0"))); + assert_sub_to(Integer("4294967296"), Integer("4294967296"), Integer("0")); //2^32-1 - assert(Integer::Subtraction(Integer("4294967296"), Integer("1")).isEqualTo(Integer("4294967295"))); + assert_sub_to(Integer("4294967296"), Integer("1"), Integer("4294967295")); //2^16-1 - assert(Integer::Subtraction(Integer("65537"), Integer("1")).isEqualTo(Integer("65536"))); + assert_sub_to(Integer("65537"), Integer("1"), Integer("65536")); //2^16-2^16 - assert(Integer::Subtraction(Integer("65537"), Integer("65537")).isEqualTo(Integer("0"))); -#endif + assert_sub_to(Integer("65537"), Integer("65537"), Integer("0")); } QUIZ_CASE(poincare_integer_multiplication) {