CVS commit by ariya: tester for checking formula evaluation only trivial cases are there, more will follow M +52 -0 formula_tester.cc 1.3 M +12 -0 formula_tester.h 1.2 M +1 -0 testrunner.cc 1.7 --- koffice/kspread/tests/formula_tester.cc #1.2:1.3 @@ -22,6 +22,8 @@ #include +#include #define CHECK_PARSE(x,y) checkParse(__FILE__,__LINE__,#x,x,y) +#define CHECK_EVAL(x,y) checkEval(__FILE__,__LINE__,#x,x,y) using namespace KSpread; @@ -162,2 +164,52 @@ void FormulaParserTester::run() CHECK_PARSE( "+1.23E", QString::null ); } + +FormulaEvalTester::FormulaEvalTester(): Tester() +{ +} + +QString FormulaEvalTester::name() +{ + return QString("Formula (Eval)"); +} + +void FormulaEvalTester::checkEval( const char *file, int line, const char* msg, + const QString& formula, const KSpreadValue& expected ) +{ + testCount++; + + Formula f; + QString expr = formula; + expr.prepend( '=' ); + f.setExpression( expr ); + KSpreadValue result = f.eval(); + + if( !result.equal( expected ) ) + { + QString message; + QTextStream ts( &message, IO_WriteOnly ); + ts << msg; + ts << " Result: " << result; + ts << " Expected: " << expected; + fail( file, line, message ); + } +} + + +void FormulaEvalTester::run() +{ + testCount = 0; + errorList.clear(); + + // simple constants + CHECK_EVAL( "0", KSpreadValue(0) ); + CHECK_EVAL( "1", KSpreadValue(1) ); + CHECK_EVAL( "-1", KSpreadValue(-1) ); + CHECK_EVAL( "3.14e7", KSpreadValue(3.14e7) ); + CHECK_EVAL( "3.14-e7", KSpreadValue(3.14e-7) ); + + + // simple binary operation + CHECK_EVAL( "0+0", KSpreadValue(0) ); + CHECK_EVAL( "1+1", KSpreadValue(2) ); +} --- koffice/kspread/tests/formula_tester.h #1.1:1.2 @@ -25,4 +25,6 @@ #include "tester.h" +#include + namespace KSpread { @@ -38,4 +40,14 @@ private: }; +class FormulaEvalTester: public Tester +{ +public: + FormulaEvalTester(); + virtual QString name(); + virtual void run(); +private: + void checkEval( const char *file, int line, const char* msg, const QString&, const KSpreadValue& ); +}; + }; // namespace KSpread --- koffice/kspread/tests/testrunner.cc #1.6:1.7 @@ -82,4 +82,5 @@ TestRunner::TestRunner(): addTester( new ValueTester() ); addTester( new FormulaParserTester() ); + addTester( new FormulaEvalTester() ); }