From 5cbce3c1162b9fe70a7a80c5a083815c229159c9 Mon Sep 17 00:00:00 2001 From: Laury Date: Fri, 3 Dec 2021 13:19:56 +0100 Subject: [PATCH] [calculation] Fix a bug in second degree controller --- .../additional_outputs/second_degree_list_controller.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/calculation/additional_outputs/second_degree_list_controller.cpp b/apps/calculation/additional_outputs/second_degree_list_controller.cpp index 26ad391ae..8e2b804e7 100644 --- a/apps/calculation/additional_outputs/second_degree_list_controller.cpp +++ b/apps/calculation/additional_outputs/second_degree_list_controller.cpp @@ -212,6 +212,7 @@ void SecondDegreeListController::setExpression(Poincare::Expression e) { else if (m_numberOfSolutions == 1) { Expression x0Opposite = getOppositeIfExists(x0, &reductionContext); Expression factor; + if (x0Opposite.isUninitialized()) { PoincareHelpers::Simplify(&x0, context, ExpressionNode::ReductionTarget::User); factor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), x0); @@ -220,6 +221,7 @@ void SecondDegreeListController::setExpression(Poincare::Expression e) { PoincareHelpers::Simplify(&x0Opposite, context, ExpressionNode::ReductionTarget::User); factor = Addition::Builder(Symbol::Builder("x", strlen("x")), x0Opposite); } + Expression solutionProduct = Power::Builder(Parenthesis::Builder(factor), Rational::Builder(2)); switch (multiplicationTypeForA) { @@ -262,6 +264,9 @@ Expression SecondDegreeListController::getOppositeIfExists(Expression e, Poincar Number n = static_cast(e); return std::move(n.setSign(ExpressionNode::Sign::Positive)); } + else if(e.type() == ExpressionNode::Type::Opposite) { + return std::move(e.childAtIndex(0).clone()); + } else if (e.type() == ExpressionNode::Type::Multiplication && e.numberOfChildren() > 0 && e.childAtIndex(0).isNumber() && e.childAtIndex(0).sign(reductionContext->context()) == ExpressionNode::Sign::Negative) { Multiplication m = static_cast(e); if (m.childAtIndex(0).type() == ExpressionNode::Type::Rational && static_cast(e).isMinusOne()) {