[poincare] Integer: fix and add tests on Integer::Subtraction

This commit is contained in:
Émilie Feral
2018-08-13 17:48:57 +02:00
parent 47348b6d65
commit 2bf0eefd92
2 changed files with 22 additions and 20 deletions

View File

@@ -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;
}

View File

@@ -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) {