6#include <QtTest/QtTest>
21void TestFitting::cleanupTestCase ()
26bool TestFitting::generalFunctionTest (
int order,
29 int orderReduced = qMin (order, numPoints - 1);
32 FittingStatistics fitting;
33 double mse, rms, rSquared;
37 bool isOverfitting = (order >= numPoints - 1);
41 for (
int iPoint = 0; iPoint < numPoints; iPoint++) {
44 if (orderReduced > 0) {
46 for (
int ord = 0; ord < orderReduced; ord++) {
51 points.append (QPointF (x, y));
69 coefficientsExpected [0] = 0;
72 coefficientsExpected [0] = 1;
73 coefficientsExpected [1] = 1;
76 coefficientsExpected [0] = 2;
77 coefficientsExpected [1] = 3;
78 coefficientsExpected [2] = 1;
81 coefficientsExpected [0] = 6;
82 coefficientsExpected [1] = 11;
83 coefficientsExpected [2] = 6;
84 coefficientsExpected [3] = 1;
87 coefficientsExpected [0] = 24;
88 coefficientsExpected [1] = 50;
89 coefficientsExpected [2] = 35;
90 coefficientsExpected [3] = 10;
91 coefficientsExpected [4] = 1;
95 for (
int coef = 0; coef < order + 1; coef++) {
96 double coefGot = coefficientsGot [coef];
98 double coefExpected = 0;
99 if (coef <= orderReduced) {
100 coefExpected = coefficientsExpected [coef];
103 success = (success && ((qAbs (coefGot - coefExpected) <
EPSILON)));
108 success = (success && ((qAbs (mse) <
EPSILON)));
114bool TestFitting::generalNonFunctionTest ()
const
117 FittingStatistics fitting;
118 double mse, rms, rSquared;
123 const double Y1 = 1, Y2 = 2;
124 points.append (QPointF (1, Y1));
125 points.append (QPointF (1, Y2));
139 coefficientsExpected [0] = (Y1 + Y2) / 2.0;
140 coefficientsExpected [1] = 0;
142 for (
int coef = 0; coef < 2; coef++) {
143 double coefGot = coefficientsGot [coef];
145 double coefExpected = coefficientsExpected [coef];
147 success = (success && ((qAbs (coefGot - coefExpected) <
EPSILON)));
153void TestFitting::initTestCase ()
160 const bool NO_RESET =
false;
186int TestFitting::orderReducedVersusOrderAndSignificantDigits (
int order,
187 int significantDigits)
const
193 FittingStatistics fittingStatistics;
194 for (
double x = 1; x <= 10; x += 1) {
195 double y = 100.0 / x;
196 points.append (QPointF (x, y));
199 fittingStatistics.calculateCurveFit (order,
208 if (coefficients [orderReduced] != 0) {
216void TestFitting::testFunctionExactFit01 ()
218 QVERIFY (generalFunctionTest (0, 1));
221void TestFitting::testFunctionExactFit12 ()
223 QVERIFY (generalFunctionTest (1, 2));
226void TestFitting::testFunctionExactFit23 ()
228 QVERIFY (generalFunctionTest (2, 3));
231void TestFitting::testFunctionExactFit34 ()
233 QVERIFY (generalFunctionTest (3, 4));
236void TestFitting::testFunctionOverfit11 ()
238 QVERIFY (generalFunctionTest (1, 1));
241void TestFitting::testFunctionOverfit22 ()
243 QVERIFY (generalFunctionTest (2, 2));
246void TestFitting::testFunctionOverfit33 ()
248 QVERIFY (generalFunctionTest (3, 3));
251void TestFitting::testFunctionOverfit44 ()
253 QVERIFY (generalFunctionTest (4, 4));
256void TestFitting::testFunctionUnderfit02 ()
258 QVERIFY (generalFunctionTest (0, 2));
261void TestFitting::testFunctionUnderfit13 ()
263 QVERIFY (generalFunctionTest (1, 3));
266void TestFitting::testFunctionUnderfit24 ()
268 QVERIFY (generalFunctionTest (2, 4));
271void TestFitting::testFunctionUnderfit35 ()
273 QVERIFY (generalFunctionTest (3, 5));
276void TestFitting::testNonFunction ()
278 QVERIFY (generalNonFunctionTest ());
281void TestFitting::testOrderReduced3 ()
286void TestFitting::testOrderReduced4 ()
291void TestFitting::testOrderReduced5 ()
296void TestFitting::testOrderReduced6 ()
301void TestFitting::testSignificantDigits3 ()
306void TestFitting::testSignificantDigits4 ()
311void TestFitting::testSignificantDigits5 ()
316void TestFitting::testSignificantDigits6 ()
QVector< double > FittingCurveCoefficients
Coefficients x0, x1, ... in y = a0 + a1 * x + a2 * x^2 + ...
QList< QPointF > FittingPointsConvenient
Array of (x,y) points in graph coordinates.
const int MAX_POLYNOMIAL_ORDER
void initializeLogging(const QString &name, const QString &filename, bool isDebug)
const bool NO_EXPORT_ONLY
const QStringList NO_COMMAND_LINE
const QString NO_EXTRACT_IMAGE_EXTENSION
const QString NO_ERROR_REPORT_LOG_FILE
const bool NO_GNUPLOT_LOG_FILES
const QString NO_REGRESSION_OPEN_FILE
const QStringList NO_LOAD_STARTUP_FILES
const bool NO_REGRESSION_IMPORT
const bool NO_EXTRACT_IMAGE_ONLY
const bool NO_DROP_REGRESSION
const int NOMINAL_SIGNIFICANT_DIGITS
void calculateCurveFitAndStatistics(unsigned int order, const FittingPointsConvenient &pointsConvenient, FittingCurveCoefficients &coefficients, double &mse, double &rms, double &rSquared, int significantDigits)
Compute the curve fit and the statistics for that curve fit.
Unit test of Fitting classes.
TestFitting(QObject *parent=0)
Single constructor.