diff --git a/poincare/src/addition.cpp b/poincare/src/addition.cpp index bb19995a0..72b7bc522 100644 --- a/poincare/src/addition.cpp +++ b/poincare/src/addition.cpp @@ -39,7 +39,7 @@ void Addition::immediateSimplify() { } sortChildren(); int i = 0; - while (i < numberOfOperands()-1) { + while (i < numberOfOperands()) { if (deleteUselessOperand(i) && i > 0) { i--; } diff --git a/poincare/src/dynamic_hierarchy.cpp b/poincare/src/dynamic_hierarchy.cpp index 5e97b5f38..eaf59efd1 100644 --- a/poincare/src/dynamic_hierarchy.cpp +++ b/poincare/src/dynamic_hierarchy.cpp @@ -159,8 +159,8 @@ void DynamicHierarchy::squashUnaryHierarchy() { } bool DynamicHierarchy::deleteUselessOperand(int index) { - assert(index < numberOfOperands() && numberOfOperands() > 1); - if (operand(index)->type() == Type::Rational && isUselessOperand(static_cast(operand(index)))) { + assert(index < numberOfOperands()); + if (numberOfOperands() >1 && operand(index)->type() == Type::Rational && isUselessOperand(static_cast(operand(index)))) { removeOperand(operand(index), true); return true; } diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index b7f544cc7..7b5a3efa8 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -113,7 +113,7 @@ void Multiplication::immediateSimplify() { sortChildren(); /* Now, no more node can be an addition or a multiplication */ int i = 0; - while (i < numberOfOperands()-1) { + while (i < numberOfOperands()) { if (deleteUselessOperand(i) && i > 0) { i--; } diff --git a/poincare/test/simplify_easy.cpp b/poincare/test/simplify_easy.cpp index 795de0161..c1f4e7ef8 100644 --- a/poincare/test/simplify_easy.cpp +++ b/poincare/test/simplify_easy.cpp @@ -120,6 +120,7 @@ QUIZ_CASE(poincare_simplify_easy) { assert_parsed_expression_simplify_to("A^3*A^(-3)", "1"); assert_parsed_expression_simplify_to("1+A+2+B+3", "6+A+B"); assert_parsed_expression_simplify_to("(x+1)*(x+2)", "x^2+3x+2"); + assert_parsed_expression_simplify_to("(x+1)*(x-1)", "-1+x^2"); /* This does not work but should not as it is above k_primorial32 = 1*3*5*7*11*... (product of first 32 primes. */ //assert_parsed_expression_simplify_to("1881676377434183981909562699940347954480361860897069^(1/3)", "123456789123456789");