mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[poincare] integer comparison
This commit is contained in:
@@ -19,6 +19,8 @@ class Integer : public Expression {
|
||||
// Arithmetic
|
||||
Integer operator+(const Integer &other) const;
|
||||
Integer operator*(const Integer &other) const;
|
||||
|
||||
bool operator<(const Integer &other) const;
|
||||
bool operator==(const Integer &other) const;
|
||||
|
||||
/*virtual Expression ** children();
|
||||
|
||||
@@ -87,8 +87,23 @@ Integer::~Integer() {
|
||||
Integer::Integer(native_uint_t * digits, uint16_t numberOfDigits) :
|
||||
m_numberOfDigits(numberOfDigits),
|
||||
m_digits(digits) {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: factor code with "==", they are very similar
|
||||
bool Integer::operator<(const Integer &other) const {
|
||||
if (m_numberOfDigits != other.m_numberOfDigits) {
|
||||
return (m_numberOfDigits < other.m_numberOfDigits);
|
||||
}
|
||||
for (uint16_t i = 0; i < m_numberOfDigits; i++) {
|
||||
// Digits are stored most-significant last
|
||||
native_uint_t digit = m_digits[m_numberOfDigits-i-1];
|
||||
native_uint_t otherDigit = other.m_digits[m_numberOfDigits-i-1];
|
||||
if (digit != otherDigit) {
|
||||
return (digit < otherDigit);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Integer::operator==(const Integer &other) const {
|
||||
if (other.m_numberOfDigits != m_numberOfDigits) {
|
||||
|
||||
@@ -10,6 +10,14 @@ QUIZ_CASE(poincare_integer) {
|
||||
assert(Integer("0b1011") == Integer(11));
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_integer_compare) {
|
||||
assert(Integer(123) < Integer(456));
|
||||
assert(!(Integer(123) < Integer(123)));
|
||||
assert(Integer(123) < Integer("123456789123456789"));
|
||||
assert(Integer("123456789123456788") < Integer("123456789123456789"));
|
||||
assert(!(Integer("123456789123456789") < Integer("123456789123456788")));
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_integer_add) {
|
||||
//assert(Integer((uint32_t)0) + Integer((uint32_t)0) == Integer((uint32_t)0));
|
||||
assert(Integer(123) + Integer(456) == Integer(579));
|
||||
|
||||
Reference in New Issue
Block a user