]> OCCT Git - occt-copy.git/commitdiff
031697: Foundation Classes - Expr_GeneralExpression::Derivative does not seem to...
authorifv <ifv@opencascade.com>
Fri, 7 Aug 2020 09:20:40 +0000 (12:20 +0300)
committerifv <ifv@opencascade.com>
Fri, 7 Aug 2020 10:43:47 +0000 (13:43 +0300)
src/Expr/Expr_NamedUnknown.cxx
src/QABugs/QABugs_19.cxx

index dead2e03a25c3108d7e79dda52a8c8e157b9dca7..1d6fd6b1f54453228595a6271f6243b192f2f8a2 100644 (file)
@@ -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);
     }
index 39ab345eedb2015f9e0cf8a19043e1b99dff7d5b..cb5755716a9581fe475b572ff0a0ef23b640d720 100755 (executable)
@@ -4357,6 +4357,53 @@ static Standard_Integer OCC30708_2 (Draw_Interpretor& di, Standard_Integer, cons
 
   return 0;
 }
+#include <ExprIntrp_GenExp.hxx>
+#include <Expr_GeneralExpression.hxx>
+#include <Expr_NamedUnknown.hxx>
+//=======================================================================
+//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;
 }