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);
}
#include <Expr_NamedUnknown.hxx>
#include <Expr_GeneralExpression.hxx>
#include <Expr_Exponential.hxx>
+#include <ExprIntrp_GenExp.hxx>
//=======================================================================
//function : OCC902
//purpose :
return 1;
}
- TCollection_AsciiString myStr(argv[1]);
+ TCollection_AsciiString anExpStr(argv[1]);
+ anExpStr.AssignCat("*x");
+ anExpStr.Prepend("Exp(");
+ anExpStr.AssignCat(")");
+
+ 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_NamedUnknown) myNamed = new Expr_NamedUnknown(myStr);
- Handle (Expr_Exponential) oldExpr = new Expr_Exponential(myNamed);
- Handle (Expr_GeneralExpression) newExpr = oldExpr->Derivative(myNamed);
+ Handle(Expr_GeneralExpression) anExpr = exprIntrp->Expression();
+ Handle(Expr_NamedUnknown) aVar = new Expr_NamedUnknown("x");
+ Handle (Expr_GeneralExpression) newExpr = anExpr->Derivative(aVar);
TCollection_AsciiString res = newExpr->String();
Standard_CString resStr = res.ToCString();
- TCollection_AsciiString res_old = oldExpr->String();
+ TCollection_AsciiString res_old = anExpr->String();
Standard_CString res_oldStr = res_old.ToCString();
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";
theCommands.Add("OCC30704_1", "OCC30704_1", __FILE__, OCC30704_1, group);
theCommands.Add("OCC31294", "OCC31294", __FILE__, OCC31294, group);
+ theCommands.Add("OCC31697", "OCC31697 expression variable", __FILE__, OCC31697, group);
+
return;
}
--- /dev/null
+puts "======="
+puts "OCC31697 - Expr_GeneralExpression::Derivative does not seem to work"
+puts "======="
+puts ""
+
+
+pload QAcommands
+
+set exp Exp(2*Sin(x^2))
+set var x
+set list [OCC31697 $exp $var]
+
+set we_have [lindex $list 10]
+puts "we_have = $we_have"
+
+set must_be "Exp(2*Sin(x^2))*Cos(x^2)*x*4"
+puts "must_be = $must_be"
+
+
+if {[string compare $we_have $must_be] == 0} {
+ puts "OCC31697 OK"
+} else {
+ puts "OCC31697 Faulty"
+}
+
-puts "TODO OCC12345 ALL: OCC902 Faulty"
-
puts "======="
puts "OCC902"
puts "======="
set we_have [lindex $list 8]
puts "we_have = $we_have"
-set must_be_1 "Exp($arg)*$arg"
+set must_be_1 "Exp($arg*x)*$arg"
puts "must_be_1 = $must_be_1"
-set must_be_2 "$arg*Exp($arg)"
+set must_be_2 "$arg*Exp($arg*x)"
puts "must_be_2 = $must_be_2"
if {[string compare $we_have $must_be_1] == 0} {