00001 #include "DocumentModelCoords.h"
00002 #include "Logger.h"
00003 #include "MainWindow.h"
00004 #include "MainWindowModel.h"
00005 #include <qmath.h>
00006 #include <QtTest/QtTest>
00007 #include "Test/TestTransformation.h"
00008 #include "Transformation.h"
00009
00010 QTEST_MAIN (TestTransformation)
00011
00012 const double EPSILON = 1.0;
00013
00014 using namespace std;
00015
00016 TestTransformation::TestTransformation(QObject *parent) :
00017 QObject(parent)
00018 {
00019 }
00020
00021 void TestTransformation::cleanupTestCase ()
00022 {
00023
00024 }
00025
00026 double TestTransformation::differenceMagnitude (const QPointF &vector1,
00027 const QPointF &vector2) const
00028 {
00029 QPointF difference = vector1 - vector2;
00030 return qSqrt (difference.x() * difference.x() +
00031 difference.y() * difference.y());
00032 }
00033 void TestTransformation::initTestCase ()
00034 {
00035 const QString NO_ERROR_REPORT_LOG_FILE;
00036 const QString NO_REGRESSION_OPEN_FILE;
00037 const bool NO_GNUPLOT_LOG_FILES = false;
00038 const bool NO_REGRESSION_IMPORT = false;
00039 const bool DEBUG_FLAG = false;
00040 const QStringList NO_LOAD_STARTUP_FILES;
00041
00042 initializeLogging ("engauge_test",
00043 "engauge_test.log",
00044 DEBUG_FLAG);
00045
00046 MainWindow w (NO_ERROR_REPORT_LOG_FILE,
00047 NO_REGRESSION_OPEN_FILE,
00048 NO_GNUPLOT_LOG_FILES,
00049 NO_REGRESSION_IMPORT,
00050 NO_LOAD_STARTUP_FILES);
00051 w.show ();
00052 }
00053
00054 void TestTransformation::initTransformation (const QPointF &s0,
00055 const QPointF &s1,
00056 const QPointF &s2,
00057 const QPointF &g0,
00058 const QPointF &g1,
00059 const QPointF &g2,
00060 const DocumentModelCoords &modelCoords)
00061 {
00062 QTransform matrixScreen (s0.x(), s1.x(), s2.x(),
00063 s0.y(), s1.y(), s2.y(),
00064 1.0, 1.0, 1.0);
00065 QTransform matrixGraph (g0.x(), g1.x(), g2.x(),
00066 g0.y(), g1.y(), g2.y(),
00067 1.0, 1.0, 1.0);
00068
00069 Transformation t;
00070 MainWindowModel mainWindowModel;
00071 t.setModelCoords (modelCoords,
00072 mainWindowModel);
00073 t.updateTransformFromMatrices(matrixScreen,
00074 matrixGraph);
00075
00076 t.transformScreenToRawGraph (s0,
00077 m_g0Transformed);
00078 t.transformScreenToRawGraph (s1,
00079 m_g1Transformed);
00080 t.transformScreenToRawGraph (s2,
00081 m_g2Transformed);
00082 t.transformRawGraphToScreen (g0,
00083 m_s0Transformed);
00084 t.transformRawGraphToScreen (g1,
00085 m_s1Transformed);
00086 t.transformRawGraphToScreen (g2,
00087 m_s2Transformed);
00088 }
00089
00090 DocumentModelCoords TestTransformation::modelCoordsDefault() const
00091 {
00092 DocumentModelCoords modelCoords;
00093
00094 modelCoords.setCoordScaleXTheta (COORD_SCALE_LINEAR);
00095 modelCoords.setCoordScaleYRadius (COORD_SCALE_LINEAR);
00096 modelCoords.setCoordsType (COORDS_TYPE_CARTESIAN);
00097 modelCoords.setCoordUnitsDate(COORD_UNITS_DATE_YEAR_MONTH_DAY);
00098 modelCoords.setCoordUnitsRadius (COORD_UNITS_NON_POLAR_THETA_NUMBER);
00099 modelCoords.setCoordUnitsTheta (COORD_UNITS_POLAR_THETA_DEGREES);
00100 modelCoords.setCoordUnitsTime (COORD_UNITS_TIME_HOUR_MINUTE_SECOND);
00101 modelCoords.setCoordUnitsX (COORD_UNITS_NON_POLAR_THETA_NUMBER);
00102 modelCoords.setCoordUnitsY (COORD_UNITS_NON_POLAR_THETA_NUMBER);
00103 modelCoords.setOriginRadius (0.0);
00104
00105 return modelCoords;
00106 }
00107 void TestTransformation::testCartesianLinearLinear ()
00108 {
00109 QPointF s0 (10, 1000);
00110 QPointF s1 (1000, 1000);
00111 QPointF s2 (10, 10);
00112 QPointF g0 (1, 1);
00113 QPointF g1 (10, 1);
00114 QPointF g2 (1, 10);
00115
00116 initTransformation (s0,
00117 s1,
00118 s2,
00119 g0,
00120 g1,
00121 g2,
00122 modelCoordsDefault());
00123
00124 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
00125 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
00126 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
00127 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
00128 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
00129 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
00130 }
00131
00132 void TestTransformation::testCartesianLinearLog ()
00133 {
00134 QPointF s0 (10, 1000);
00135 QPointF s1 (1000, 1000);
00136 QPointF s2 (10, 10);
00137 QPointF g0 (1, 1);
00138 QPointF g1 (10, 1);
00139 QPointF g2 (1, 10);
00140
00141 DocumentModelCoords modelCoords = modelCoordsDefault();
00142 modelCoords.setCoordScaleYRadius (COORD_SCALE_LOG);
00143 initTransformation (s0,
00144 s1,
00145 s2,
00146 g0,
00147 g1,
00148 g2,
00149 modelCoordsDefault());
00150
00151 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
00152 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
00153 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
00154 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
00155 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
00156 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
00157 }
00158
00159 void TestTransformation::testCartesianLogLinear ()
00160 {
00161 QPointF s0 (10, 1000);
00162 QPointF s1 (1000, 1000);
00163 QPointF s2 (10, 10);
00164 QPointF g0 (1, 1);
00165 QPointF g1 (10, 1);
00166 QPointF g2 (1, 10);
00167
00168 DocumentModelCoords modelCoords = modelCoordsDefault();
00169 modelCoords.setCoordScaleXTheta (COORD_SCALE_LOG);
00170 initTransformation (s0,
00171 s1,
00172 s2,
00173 g0,
00174 g1,
00175 g2,
00176 modelCoordsDefault());
00177
00178 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
00179 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
00180 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
00181 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
00182 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
00183 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
00184 }
00185
00186 void TestTransformation::testCartesianLogLog ()
00187 {
00188 QPointF s0 (10, 1000);
00189 QPointF s1 (1000, 1000);
00190 QPointF s2 (10, 10);
00191 QPointF g0 (1, 1);
00192 QPointF g1 (10, 1);
00193 QPointF g2 (1, 10);
00194
00195 DocumentModelCoords modelCoords = modelCoordsDefault();
00196 modelCoords.setCoordScaleXTheta (COORD_SCALE_LOG);
00197 modelCoords.setCoordScaleYRadius (COORD_SCALE_LOG);
00198 initTransformation (s0,
00199 s1,
00200 s2,
00201 g0,
00202 g1,
00203 g2,
00204 modelCoordsDefault());
00205
00206 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
00207 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
00208 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
00209 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
00210 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
00211 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
00212 }
00213
00214 void TestTransformation::testPolarLinear ()
00215 {
00216 QPointF s0 (500, 1000);
00217 QPointF s1 (1000, 500);
00218 QPointF s2 (500, 500);
00219 QPointF g0 (-90, 100);
00220 QPointF g1 (0, 100);
00221 QPointF g2 (0, 0);
00222
00223 DocumentModelCoords modelCoords = modelCoordsDefault();
00224 modelCoords.setCoordsType (COORDS_TYPE_POLAR);
00225 initTransformation (s0,
00226 s1,
00227 s2,
00228 g0,
00229 g1,
00230 g2,
00231 modelCoordsDefault());
00232
00233 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
00234 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
00235 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
00236 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
00237 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
00238 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
00239 }
00240
00241 void TestTransformation::testPolarLogOffset1 ()
00242 {
00243 QPointF s0 (500, 1000);
00244 QPointF s1 (1000, 500);
00245 QPointF s2 (500, 500);
00246 QPointF g0 (-90, 100);
00247 QPointF g1 (0, 100);
00248 QPointF g2 (0, 1);
00249
00250 DocumentModelCoords modelCoords = modelCoordsDefault();
00251 modelCoords.setCoordsType (COORDS_TYPE_POLAR);
00252 modelCoords.setCoordScaleYRadius (COORD_SCALE_LOG);
00253 modelCoords.setOriginRadius (1.0);
00254 initTransformation (s0,
00255 s1,
00256 s2,
00257 g0,
00258 g1,
00259 g2,
00260 modelCoordsDefault());
00261
00262 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
00263 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
00264 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
00265 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
00266 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
00267 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
00268 }
00269
00270 void TestTransformation::testPolarLogOffset10 ()
00271 {
00272 QPointF s0 (500, 1000);
00273 QPointF s1 (1000, 500);
00274 QPointF s2 (500, 500);
00275 QPointF g0 (-90, 100);
00276 QPointF g1 (0, 100);
00277 QPointF g2 (0, 10);
00278
00279 DocumentModelCoords modelCoords = modelCoordsDefault();
00280 modelCoords.setCoordsType (COORDS_TYPE_POLAR);
00281 modelCoords.setCoordScaleYRadius (COORD_SCALE_LOG);
00282 modelCoords.setOriginRadius (10.0);
00283 initTransformation (s0,
00284 s1,
00285 s2,
00286 g0,
00287 g1,
00288 g2,
00289 modelCoordsDefault());
00290
00291 QVERIFY (differenceMagnitude (s0, m_s0Transformed) < EPSILON);
00292 QVERIFY (differenceMagnitude (s1, m_s1Transformed) < EPSILON);
00293 QVERIFY (differenceMagnitude (s2, m_s2Transformed) < EPSILON);
00294 QVERIFY (differenceMagnitude (g0, m_g0Transformed) < EPSILON);
00295 QVERIFY (differenceMagnitude (g1, m_g1Transformed) < EPSILON);
00296 QVERIFY (differenceMagnitude (g2, m_g2Transformed) < EPSILON);
00297 }