From 47348b6d65bbdd497aac8ce1e828c4b99fb43d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Mon, 13 Aug 2018 17:40:01 +0200 Subject: [PATCH] [poincare] Integer: fix and add tests on Integer::Addition --- poincare/src/integer.cpp | 4 ++-- poincare/test/integer.cpp | 33 ++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/poincare/src/integer.cpp b/poincare/src/integer.cpp index b2ce2d6fe..54c4e2db3 100644 --- a/poincare/src/integer.cpp +++ b/poincare/src/integer.cpp @@ -211,7 +211,7 @@ Integer NaturalIntegerAbstract::usum(const NaturalIntegerAbstract * a, const Nat carry = (aDigit > result) || (bDigit > result); // There's been an overflow } } - while (digits[size-1] == 0 && size>1) { + while (digits[size-1] == 0 && size>0) { size--; } if (size > k_maxNumberOfDigits) { @@ -247,7 +247,7 @@ Integer NaturalIntegerAbstract::umult(const NaturalIntegerAbstract * a, const Na digits[i+b->m_numberOfDigits] += carry; } - while (digits[size-1] == 0 && size>1) { + while (digits[size-1] == 0 && size>0) { size--; } // Overflow diff --git a/poincare/test/integer.cpp b/poincare/test/integer.cpp index 4351930d3..7db97d8d1 100644 --- a/poincare/test/integer.cpp +++ b/poincare/test/integer.cpp @@ -59,29 +59,32 @@ QUIZ_CASE(poincare_integer_compare) { //FIXME: assert(Integer("0b1011") == Integer(11)); } +static inline void assert_add_to(const Integer i, const Integer j, const Integer k) { + assert(Integer::NaturalOrder(Integer::Addition(i, j), k) == 0); +} + QUIZ_CASE(poincare_integer_addition) { -#if 0 - assert(Integer::Addition(Integer("0"), Integer("0")).isEqualTo(Integer(0))); - assert(Integer::Addition(Integer(123), Integer(456)).isEqualTo(Integer(579))); - 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"))); + assert_add_to(Integer("0"), Integer("0"), Integer(0)); + assert_add_to(Integer(123), Integer(456), Integer(579)); + assert_add_to(Integer(123), Integer(456), Integer(579)); + assert_add_to(Integer("123456789123456789"), Integer(1), Integer("123456789123456790")); + assert_add_to(Integer("-123456789123456789"), Integer("123456789123456789"), Integer("0")); + assert_add_to(Integer("234"), Integer(-234), Integer(0)); + assert_add_to(Integer("18446744073709551616"), Integer("18446744073709551368"), Integer("36893488147419102984")); //2^64+2^64 - assert(Integer::Addition(Integer("18446744073709551616"), Integer("18446744073709551616")).isEqualTo(Integer("36893488147419103232"))); + assert_add_to(Integer("18446744073709551616"), Integer("18446744073709551616"), Integer("36893488147419103232")); //2^64+2^32 - assert(Integer::Addition(Integer("18446744073709551616"), Integer("4294967296")).isEqualTo(Integer("18446744078004518912"))); + assert_add_to(Integer("18446744073709551616"), Integer("4294967296"), Integer("18446744078004518912")); //2^64+1 - assert(Integer::Addition(Integer("18446744073709551616"), Integer("1")).isEqualTo(Integer("18446744073709551617"))); + assert_add_to(Integer("18446744073709551616"), Integer("1"), Integer("18446744073709551617")); //2^32+2^32 - assert(Integer::Addition(Integer("4294967296"), Integer("4294967296")).isEqualTo(Integer("8589934592"))); + assert_add_to(Integer("4294967296"), Integer("4294967296"), Integer("8589934592")); //2^32+1 - assert(Integer::Addition(Integer("4294967296"), Integer("1")).isEqualTo(Integer("4294967297"))); + assert_add_to(Integer("4294967296"), Integer("1"), Integer("4294967297")); //2^16+1 - assert(Integer::Addition(Integer("65537"), Integer("1")).isEqualTo(Integer("65538"))); + assert_add_to(Integer("65537"), Integer("1"), Integer("65538")); //2^16+2^16 - assert(Integer::Addition(Integer("65537"), Integer("65537")).isEqualTo(Integer("131074"))); -#endif + assert_add_to(Integer("65537"), Integer("65537"), Integer("131074")); } QUIZ_CASE(poincare_integer_subtraction) {