[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