Engauge Digitizer 2
Loading...
Searching...
No Matches
TestSplineDrawer.cpp
Go to the documentation of this file.
3#include "Logger.h"
4#include "MainWindow.h"
5#include "MainWindowModel.h"
6#include <map>
7#include <qmath.h>
8#include <QtTest/QtTest>
9#include "Spline.h"
10#include "SplineDrawer.h"
11#include "SplinePair.h"
12#include <sstream>
14#include "Transformation.h"
15
16QTEST_MAIN (TestSplineDrawer)
17
18using namespace std;
19
21 QObject(parent)
22{
23}
24
25void TestSplineDrawer::cleanupTestCase ()
26{
27
28}
29
30void TestSplineDrawer::initTestCase ()
31{
32 const bool NO_DROP_REGRESSION = false;
33 const QString NO_ERROR_REPORT_LOG_FILE;
34 const QString NO_REGRESSION_OPEN_FILE;
35 const bool NO_GNUPLOT_LOG_FILES = false;
36 const bool NO_REGRESSION_IMPORT = false;
37 const bool NO_RESET = false;
38 const bool NO_EXPORT_ONLY = false;
39 const bool NO_EXPORT_IMAGE_ONLY = false;
40 const QString NO_EXPORT_IMAGE_EXTENSION;
41 const bool DEBUG_FLAG = false;
42 const QStringList NO_LOAD_STARTUP_FILES;
43 const QStringList NO_COMMAND_LINE;
44
45 initializeLogging ("engauge_test",
46 "engauge_test.log",
48
49 MainWindow w (NO_ERROR_REPORT_LOG_FILE,
54 NO_RESET,
56 NO_EXPORT_IMAGE_ONLY,
57 NO_EXPORT_IMAGE_EXTENSION,
60 w.show ();
61}
62
63bool TestSplineDrawer::testMultiValuedGeneric (const vector<SplinePair> &xy,
64 const vector<bool> &isMultiValued) const
65{
66 bool success = true;
67 vector<double> t;
68
69 // Models
70 DocumentModelCoords modelCoords;
71 DocumentModelGeneral modelGeneral;
72 MainWindowModel modelMainWindow;
73
76
77 // Transformation
78 Transformation trans;
79 trans.setModelCoords (modelCoords,
80 modelGeneral,
81 modelMainWindow);
82 QTransform matrixScreen (198.5 , 627.562, 55.625 ,
83 562.562, 562.562, 155.562,
84 1 , 1 , 1 );
85 QTransform matrixGraph (0.001, 1.0, 0.0001,
86 0 , 0 , 30 ,
87 1 , 1 , 1 );
88 trans.updateTransformFromMatrices (matrixScreen,
89 matrixGraph);
90
91 int counter = 0;
92 vector<SplinePair>::const_iterator itr;
93 for (itr = xy.begin(); itr != xy.end(); itr++) {
94 t.push_back (counter++);
95 }
96
97 // Generate the spline
98 Spline s (t, xy);
99
100 SplineDrawer sd (trans);
101 for (unsigned int segment = 0; segment < isMultiValued.size(); segment++) {
102 if (isMultiValued [segment] != sd.segmentIsMultiValued (s,
103 xy.size(),
104 segment)) {
105 success = false;
106 }
107 }
108
109 return success;
110}
111
112void TestSplineDrawer::testMultiValuedLeadingOverlap ()
113{
114 vector<SplinePair> xy;
115 vector<bool> isMultiValued;
116
117 xy.push_back (SplinePair (198.388, 426.423)); isMultiValued.push_back (true);
118 xy.push_back (SplinePair (198.531, 399.463)); isMultiValued.push_back (false);
119 xy.push_back (SplinePair (384.589, 263.384)); isMultiValued.push_back (true);
120 xy.push_back (SplinePair (409.525, 250.684)); isMultiValued.push_back (true);
121 xy.push_back (SplinePair (441.360, 535.685)); isMultiValued.push_back (false);
122 xy.push_back (SplinePair (484.557, 358.601)); isMultiValued.push_back (false);
123 xy.push_back (SplinePair (495.663, 454.633)); isMultiValued.push_back (false);
124 xy.push_back (SplinePair (527.411, 182.426)); isMultiValued.push_back (false);
125 xy.push_back (SplinePair (633.561, 155.353)); isMultiValued.push_back (false);
126 xy.push_back (SplinePair (756.603, 358.646)); // Last point has no corresponding segment
127
128 bool success = testMultiValuedGeneric (xy,
129 isMultiValued);
130
131 QVERIFY (success);
132}
133
134void TestSplineDrawer::testMultiValuedTrailingOverlap ()
135{
136 vector<SplinePair> xy;
137 vector<bool> isMultiValued;
138
139 // Same data as testMultiValuedLeadingOverlap but horizontally flipped about x=(198+756)/2
140 double maxPlusMin = 756.603 + 198.388;
141 xy.push_back (SplinePair (maxPlusMin - 756.603, 358.646)); isMultiValued.push_back (false);
142 xy.push_back (SplinePair (maxPlusMin - 633.561, 155.353)); isMultiValued.push_back (false);
143 xy.push_back (SplinePair (maxPlusMin - 527.411, 182.426)); isMultiValued.push_back (false);
144 xy.push_back (SplinePair (maxPlusMin - 495.663, 454.633)); isMultiValued.push_back (false);
145 xy.push_back (SplinePair (maxPlusMin - 484.557, 358.601)); isMultiValued.push_back (false);
146 xy.push_back (SplinePair (maxPlusMin - 441.360, 535.685)); isMultiValued.push_back (true);
147 xy.push_back (SplinePair (maxPlusMin - 409.525, 250.684)); isMultiValued.push_back (true);
148 xy.push_back (SplinePair (maxPlusMin - 384.589, 263.384)); isMultiValued.push_back (false);
149 xy.push_back (SplinePair (maxPlusMin - 198.531, 399.463)); isMultiValued.push_back (true);
150 xy.push_back (SplinePair (maxPlusMin - 198.388, 426.423)); // Last point has no corresponding segment
151
152 bool success = testMultiValuedGeneric (xy,
153 isMultiValued);
154
155 QVERIFY (success);
156}
@ COORD_SCALE_LINEAR
Definition CoordScale.h:13
@ COORD_SCALE_LOG
Definition CoordScale.h:14
void initializeLogging(const QString &name, const QString &filename, bool isDebug)
Definition Logger.cpp:21
const bool NO_EXPORT_ONLY
const QStringList NO_COMMAND_LINE
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_DROP_REGRESSION
const bool DEBUG_FLAG
void setCoordScaleXTheta(CoordScale coordScale)
Set method for linear/log scale on x/theta.
void setCoordScaleYRadius(CoordScale coordScale)
Set method for linear/log scale on y/radius.
Unit test of spline drawer, which classifies single- versus multi-valued data.
TestSplineDrawer(QObject *parent=0)
Single constructor.