From abca9f3eb8f62790c6d317214566d2b0bdb73546 Mon Sep 17 00:00:00 2001 From: ifv Date: Fri, 7 Aug 2020 15:33:12 +0300 Subject: [PATCH] 0031697: Foundation Classes - Expr_GeneralExpression::Derivative does not seem to work (691 & 720) --- src/Expr/Expr_NamedUnknown.cxx | 2 +- src/QABugs/QABugs_20.cxx | 50 ++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/Expr/Expr_NamedUnknown.cxx b/src/Expr/Expr_NamedUnknown.cxx index 41385a13a3..3aef079ef6 100644 --- a/src/Expr/Expr_NamedUnknown.cxx +++ b/src/Expr/Expr_NamedUnknown.cxx @@ -130,7 +130,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_20.cxx b/src/QABugs/QABugs_20.cxx index eac621941d..472ceba97e 100644 --- a/src/QABugs/QABugs_20.cxx +++ b/src/QABugs/QABugs_20.cxx @@ -2664,6 +2664,54 @@ static Standard_Integer OCC30869 (Draw_Interpretor& theDI, Standard_Integer theA 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_20(Draw_Interpretor& theCommands) { const char *group = "QABugs"; @@ -2707,5 +2755,7 @@ void QABugs::Commands_20(Draw_Interpretor& theCommands) { "Usage: OCC30869 wire", __FILE__, OCC30869, group); + theCommands.Add("OCC31697", "OCC31697 expression variable", __FILE__, OCC31697, group); + return; }