[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdeedu/kalgebra
From: Aleix Pol Gonzalez <aleixpol () gmail ! com>
Date: 2010-09-23 2:17:16
Message-ID: 20100923021716.AD0E9AC888 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1178422 by apol:
I can keep saying it...
Remember not to leave tests uncommented! **sigh**
M +7 -22 analitza/analyzer.cpp
M +1 -1 analitza/analyzer.h
M +36 -32 analitza/tests/analitzatest.cpp
M +3 -2 analitzagui/functioncartesian.cpp
--- trunk/KDE/kdeedu/kalgebra/analitza/analyzer.cpp #1178421:1178422
@@ -1896,49 +1896,34 @@
return val;
}
-typedef QPair<QString, double> StringDoublePair;
-double Analyzer::derivative(const QList<StringDoublePair>& values )
+double Analyzer::derivative(const QVector<Object*>& values )
{
//c++ numerical recipes p. 192. Only for f'
//Image
- //TODO: Should adapt to insertValueVariable
-
Q_ASSERT(m_exp.isCorrect());
+ Q_ASSERT(values.size()==m_exp.bvarList().size());
- QVector<Object*> deps(values.size());
+ setStack(values);
- int i=0;
- foreach(const StringDoublePair& valp, values) {//TODO: it should be +-hh
- deps[i]=new Cn(valp.second);
-// scope.insert(valp.first, &deps[i]);
-#warning todo
- i++;
- }
-
- if(hasVars(m_exp.tree(), QString(), m_vars->keys(), m_vars))
- return 0.;
-
Expression e1(calc(m_exp.tree()));
if(!isCorrect())
return 0.;
//Image+h
double h=0.0000000001;
- i=0;
- foreach(const StringDoublePair& valp, values) {
+ for(int i=0; i<values.size(); i++) {
// volatile double temp=valp.second+h;
// double hh=temp-valp.second;
- ((Cn*) deps[i])->setValue(valp.second+h);
- i++;
+ Q_ASSERT(values[i]->type()==Object::value);
+ Cn* v=static_cast<Cn*>(values[i]);
+ v->setValue(v->value()+h);
}
Expression e2(calc(m_exp.tree()));
if(!isCorrect())
return 0.;
- qDeleteAll(deps);
-
if(!e1.isReal() || !e2.isReal()) {
m_err << i18n("The result is not a number");
return 0;
--- trunk/KDE/kdeedu/kalgebra/analitza/analyzer.h #1178421:1178422
@@ -91,7 +91,7 @@
Expression derivative(const QString& var);
/** Evaluates the derivative of an expression expression. */
- double derivative(const QList< QPair<QString, double > >& values );
+ double derivative(const QVector<Object*>& values );
/** Returns whether there has been a problem in the last calculation. */
bool isCorrect() const { return m_err.isEmpty() && m_exp.isCorrect(); }
--- trunk/KDE/kdeedu/kalgebra/analitza/tests/analitzatest.cpp #1178421:1178422
@@ -236,23 +236,23 @@
QVERIFY(a->isCorrect());
double val=1.;
- QList<QPair<QString, double> > vars;
- vars.append(QPair<QString, double>("x", val));
+ QVector<Object*> vars;
+ vars.append(new Cn(val));
- a->setExpression(e);
+ a->setExpression(Expression("x->"+expression, false));
double valCalc=a->derivative(vars);
-#warning uncomment
-// if(a->isCorrect()) {
-// Expression ee(QString("(x->%1)(%2)").arg(result).arg(val));
-// a->setExpression(ee);
-// QVERIFY(a->isCorrect());
-//
-// qDebug() << "tutututut" << ee.toString() << a->errors() << a->variables()->keys();
-// Expression r=a->calculate();
-//
-// if(a->isCorrect())
-// QCOMPARE(QString::number(valCalc), QString::number(r.toReal().value()));
-// }
+ qDeleteAll(vars);
+
+ if(a->isCorrect()) {
+ Expression ee(QString("(x->%1)(%2)").arg(result).arg(val));
+ a->setExpression(ee);
+ QVERIFY(a->isCorrect());
+
+ Expression r=a->calculate();
+
+ if(a->isCorrect())
+ QCOMPARE(QString::number(valCalc), QString::number(r.toReal().value()));
+ }
a->setExpression(Expression("diff("+expression+":x)", false));
a->simplify();
QVERIFY(a->isCorrect());
@@ -359,24 +359,23 @@
QFETCH(QStringList, expression);
QFETCH(QString, result);
- Analitza::Analyzer b;
-
Analitza::Analyzer b1;
-// foreach(const QString &exp, expression) {
-// Expression e(exp, false);
-// if(!e.isCorrect()) qDebug() << "error:" << e.error();
-// QVERIFY(e.isCorrect());
-//
-// b1.setExpression(e);
-//
-// if(!b1.isCorrect()) qDebug() << "errors: " << b1.errors();
-// QVERIFY(b1.isCorrect());
-// b1.calculate();
-// if(!b1.isCorrect()) qDebug() << "errors:" << e.toString() << b1.errors();
-// QVERIFY(b1.isCorrect());
-// }
-// QCOMPARE(b1.calculate().toString(), result);
+ foreach(const QString &exp, expression) {
+ Expression e(exp, false);
+ if(!e.isCorrect()) qDebug() << "error:" << e.error();
+ QVERIFY(e.isCorrect());
+ b1.setExpression(e);
+
+ if(!b1.isCorrect()) qDebug() << "errors: " << b1.errors();
+ QVERIFY(b1.isCorrect());
+ b1.calculate();
+ if(!b1.isCorrect()) qDebug() << "errors:" << e.toString() << b1.errors();
+ QVERIFY(b1.isCorrect());
+ }
+ QCOMPARE(b1.calculate().toString(), result);
+
+ Analitza::Analyzer b;
Expression evalResult;
foreach(const QString &exp, expression) {
Expression e(exp, false);
@@ -823,7 +822,12 @@
a->evaluate();
a->simplify();
a->derivative("x");
- a->derivative(QList< QPair<QString, double> >() << qMakePair(bvar, v));
+
+ Cn* vv = new Cn(v);
+ QVector<Object*> stack;
+ stack += vv;
+ a->derivative(stack);
+ delete vv;
}
}
}
--- trunk/KDE/kdeedu/kalgebra/analitzagui/functioncartesian.cpp #1178421:1178422
@@ -226,10 +226,11 @@
return QLineF();
}
} else {
- QList<QPair<QString, double> > vars;
- vars.append(QPair<QString, double>(boundings().first(), p.x()));
+ QVector<Analitza::Object*> vars;
+ vars.append(new Cn(p.x()));
a.setExpression(func.expression());
ret=a.derivative(vars);
+ qDeleteAll(vars);
}
return slopeToLine(ret);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic