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