diff --git a/src/fintamath/expressions/binary/CompExpression.cpp b/src/fintamath/expressions/binary/CompExpression.cpp index f20ba3849..c9899cec5 100644 --- a/src/fintamath/expressions/binary/CompExpression.cpp +++ b/src/fintamath/expressions/binary/CompExpression.cpp @@ -59,6 +59,7 @@ ArgumentPtr CompExpression::preSimplify() const { CompExpression::SimplifyFunctionsVector CompExpression::getFunctionsForPostSimplify() const { static const CompExpression::SimplifyFunctionsVector simplifyFunctions = { + &CompExpression::divSimplify, // &CompExpression::coeffSimplify, // }; return simplifyFunctions; @@ -80,6 +81,14 @@ std::shared_ptr CompExpression::getOppositeFunction(const IFunction & return oppositeFunctions.at(function.toString()); } +ArgumentPtr CompExpression::divSimplify(const IFunction &func, const ArgumentPtr &lhs, const ArgumentPtr &rhs) { + if (const auto lhsExpr = cast(lhs); lhsExpr && is
(lhsExpr->getFunction())) { + return makeExpr(func, lhsExpr->getChildren().front(), rhs); + } + + return {}; +} + ArgumentPtr CompExpression::coeffSimplify(const IFunction &func, const ArgumentPtr &lhs, const ArgumentPtr &rhs) { if (auto lhsExpr = cast(lhs)) { if (is(lhsExpr->getFunction())) { diff --git a/src/fintamath/expressions/binary/CompExpression.hpp b/src/fintamath/expressions/binary/CompExpression.hpp index 1e8876d5a..c9a069f18 100644 --- a/src/fintamath/expressions/binary/CompExpression.hpp +++ b/src/fintamath/expressions/binary/CompExpression.hpp @@ -30,6 +30,8 @@ class CompExpression : public IBinaryExpressionCRTP { static std::shared_ptr getLogicOppositeFunction(const IFunction &function); private: + static ArgumentPtr divSimplify(const IFunction &func, const ArgumentPtr &lhs, const ArgumentPtr &rhs); + static ArgumentPtr coeffSimplify(const IFunction &func, const ArgumentPtr &lhs, const ArgumentPtr &rhs); bool isSolution = false; diff --git a/tests/src/FintamathTests.cpp b/tests/src/FintamathTests.cpp index 402d09cee..afeeee19f 100644 --- a/tests/src/FintamathTests.cpp +++ b/tests/src/FintamathTests.cpp @@ -57,7 +57,7 @@ TEST(FintamathTests, fintamathTests) { EXPECT_EQ(expr.toString(), "x^2 - x y + y^2 = 0"); expr = eqv(x / x - y / y, x / y); - EXPECT_EQ(expr.toString(), "x/y = 0"); + EXPECT_EQ(expr.toString(), "x = 0"); expr = eqv(pow(x, 2) - 10, 39); EXPECT_EQ(solve(expr).toString(), "x = -7 | x = 7"); diff --git a/tests/src/expressions/ExpressionFunctionsTests.cpp b/tests/src/expressions/ExpressionFunctionsTests.cpp index 5a84b988d..55ea8c39c 100644 --- a/tests/src/expressions/ExpressionFunctionsTests.cpp +++ b/tests/src/expressions/ExpressionFunctionsTests.cpp @@ -266,7 +266,7 @@ TEST(ExpressionFunctionsTests, solveTest) { EXPECT_EQ(solve(Expression("x y = 0")).toString(), "x y = 0"); EXPECT_EQ(solve(Expression("2 x^a = 0")).toString(), "x^a = 0"); EXPECT_EQ(solve(Expression("x^b a = 0")).toString(), "a x^b = 0"); - EXPECT_EQ(solve(Expression("x/y = 0")).toString(), "x/y = 0"); + EXPECT_EQ(solve(Expression("x/y = 0")).toString(), "x = 0"); EXPECT_EQ(solve(Expression("x^2 - 2*sin(2) = 0")).toString(), "x = -sqrt(2) sqrt(sin(2)) | x = sqrt(2) sqrt(sin(2))"); EXPECT_EQ(solve(Expression("E >= Ey")).toString(), "E y - E <= 0");