From 7bf8aa1b75d122d3b59041a4e7cc93a3413085cb Mon Sep 17 00:00:00 2001 From: ifv Date: Fri, 7 Aug 2020 12:20:40 +0300 Subject: [PATCH] 031697: Foundation Classes - Expr_GeneralExpression::Derivative does not seem to work (691 & 720) --- src/Expr/Expr_NamedUnknown.cxx | 2 +- src/QABugs/QABugs_19.cxx | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/Expr/Expr_NamedUnknown.cxx b/src/Expr/Expr_NamedUnknown.cxx index dead2e03a2..1d6fd6b1f5 100644 --- a/src/Expr/Expr_NamedUnknown.cxx +++ b/src/Expr/Expr_NamedUnknown.cxx @@ -123,7 +123,7 @@ Standard_Boolean Expr_NamedUnknown::IsLinear () const Handle(Expr_GeneralExpression) Expr_NamedUnknown::Derivative (const Handle(Expr_NamedUnknown)& X) const { Handle(Expr_NamedUnknown) me = this; - if (me != X) { + if (!me->IsIdentical(X)) { if (IsAssigned()) { return myExpression->Derivative(X); } diff --git a/src/QABugs/QABugs_19.cxx b/src/QABugs/QABugs_19.cxx index 39ab345eed..cb5755716a 100755 --- a/src/QABugs/QABugs_19.cxx +++ b/src/QABugs/QABugs_19.cxx @@ -4357,6 +4357,53 @@ static Standard_Integer OCC30708_2 (Draw_Interpretor& di, Standard_Integer, cons return 0; } +#include +#include +#include +//======================================================================= +//function : OCC31697 +//purpose : +//======================================================================= +static Standard_Integer OCC31697(Draw_Interpretor& di, Standard_Integer argc, const char ** argv) +{ + if (argc < 3) + { + di << "Usage : " << argv[0] << " expression variable\n"; + return 1; + } + + TCollection_AsciiString anExpStr(argv[1]); + TCollection_AsciiString aVarStr(argv[2]); + + Handle(ExprIntrp_GenExp) exprIntrp = ExprIntrp_GenExp::Create(); + + // + // Create the expression + exprIntrp->Process(anExpStr); + + if (!exprIntrp->IsDone()) + { + di << "Interpretation of expression " << argv[1] << " failed\n"; + return 1; + } + + Handle(Expr_GeneralExpression) anExpr = exprIntrp->Expression(); + Handle(Expr_NamedUnknown) aVar = new Expr_NamedUnknown(aVarStr); + + if (!anExpr->Contains(aVar)) + { + di << "Expression " << argv[1] << " does not contain variable " << argv[2] << "\n"; + return 1; + } + + Handle(Expr_GeneralExpression) aDer = anExpr->Derivative(aVar); + + TCollection_AsciiString aDerStr = aDer->String(); + + di << "The derivative of the " << argv[1] << " by " << argv[2] << " is equal to " << aDerStr << "\n"; + + return 0; +} void QABugs::Commands_19(Draw_Interpretor& theCommands) { const char *group = "QABugs"; @@ -4455,5 +4502,6 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) { theCommands.Add ("OCC30708_2", "Tests initialization of the BRepLib_MakeWire with null shape", __FILE__, OCC30708_2, group); + theCommands.Add("OCC31697", "OCC31697 expression variable", __FILE__, OCC31697, group); return; } -- 2.39.5