mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[poincare] Integer: fix and add tests on Integer::Subtraction
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user