From efd108b91fa2d5df17af91522f445c2c9fce4d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 15 Nov 2017 11:54:50 +0100 Subject: [PATCH] [poincare] Fix simplification engine and add tests Change-Id: Ibde03afc9036baf8562c8c635874f4188e1f7f6d --- poincare/src/simplification_engine.cpp | 6 ++++-- poincare/test/simplify_easy.cpp | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/poincare/src/simplification_engine.cpp b/poincare/src/simplification_engine.cpp index c3d43d6ff..f11d4250d 100644 --- a/poincare/src/simplification_engine.cpp +++ b/poincare/src/simplification_engine.cpp @@ -7,8 +7,10 @@ Expression * SimplificationEngine::map(Expression * e, Context & context, Expres Expression * op = e->editableOperand(0); for (int i = 0; i < op->numberOfOperands(); i++) { Expression * entry = op->editableOperand(i); - e->replaceOperand(op, entry, false); - op->replaceOperand(entry, op, false); + Expression * eCopy = e->clone(); + eCopy->replaceOperand(eCopy->editableOperand(0), entry, true); + op->replaceOperand(entry, eCopy, false); + eCopy->shallowReduce(context, angleUnit); } return e->replaceWith(op, true)->shallowReduce(context, angleUnit); } diff --git a/poincare/test/simplify_easy.cpp b/poincare/test/simplify_easy.cpp index f84765b10..59e44219e 100644 --- a/poincare/test/simplify_easy.cpp +++ b/poincare/test/simplify_easy.cpp @@ -55,6 +55,13 @@ QUIZ_CASE(poincare_simplify_easy) { assert_parsed_expression_simplify_to("[[1,2,3][4,5,6][7,8,9]]^(-1)", "undef"); assert_parsed_expression_simplify_to("[[1,2][3,4]]^(-1)", "[[-2,1][3/2,-1/2]]"); + // Function on matrix + assert_parsed_expression_simplify_to("abs([[1,-2][3,4]])", "[[1,2][3,4]]"); + assert_parsed_expression_simplify_to("acos([[1/R(2),1/2][1,-1]])", "[[P/4,P/3][0,P]]"); + assert_parsed_expression_simplify_to("asin([[1/R(2),1/2][1,-1]])", "[[P/4,P/6][P/2,-P/2]]"); + assert_parsed_expression_simplify_to("atan([[R(3),1][1/R(3),-1]])", "[[P/3,P/4][P/6,-P/4]]"); + assert_parsed_expression_simplify_to("acos([[1/R(2),1/2][1,-1]])", "[[P/4,P/3][0,P]]"); + assert_parsed_expression_simplify_to("1*tan(2)*tan(5)", "tan(2)*tan(5)"); assert_parsed_expression_simplify_to("P+(3R(2)-2R(3))/25", "(3R(2)-2R(3)+25P)/25"); assert_parsed_expression_simplify_to("-1/3", "-1/3");