]> OCCT Git - occt-copy.git/commitdiff
0031697: Foundation Classes - Expr_GeneralExpression::Derivative does not seem to...
authorifv <ifv@opencascade.com>
Fri, 7 Aug 2020 12:33:12 +0000 (15:33 +0300)
committermsv <msv@opencascade.com>
Fri, 7 Aug 2020 13:09:47 +0000 (16:09 +0300)
src/Expr/Expr_NamedUnknown.cxx
src/QABugs/QABugs_20.cxx

index 41385a13a37cb67b3d2c7532a339a7df49a43099..3aef079ef63fc6f806c5c7b19d6b86a2a90c9ebb 100644 (file)
@@ -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);
     }
index eac621941d9cc57245fb4052ac775b70cd948f06..472ceba97e0b62aed304cede87c2030c3d07da9f 100644 (file)
@@ -2664,6 +2664,54 @@ static Standard_Integer OCC30869 (Draw_Interpretor& theDI, Standard_Integer theA
   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_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;
 }