@@ -0,0 +1,199 | |||
|
1 | #include "Data/SpectrogramSeries.h" | |
|
2 | ||
|
3 | #include "DataSeriesBuilders.h" | |
|
4 | #include "DataSeriesUtils.h" | |
|
5 | ||
|
6 | #include <QObject> | |
|
7 | #include <QtTest> | |
|
8 | ||
|
9 | namespace { | |
|
10 | ||
|
11 | // Aliases used to facilitate reading of test inputs | |
|
12 | using X = DataContainer; | |
|
13 | using Y = DataContainer; | |
|
14 | using Values = DataContainer; | |
|
15 | using Components = std::vector<DataContainer>; | |
|
16 | ||
|
17 | } // namespace | |
|
18 | ||
|
19 | /** | |
|
20 | * @brief The TestSpectrogramSeries class defines unit tests on spectrogram series. | |
|
21 | * | |
|
22 | * Most of these unit tests use generic tests defined for DataSeries (@sa DataSeriesUtils) | |
|
23 | */ | |
|
24 | class TestSpectrogramSeries : public QObject { | |
|
25 | Q_OBJECT | |
|
26 | private slots: | |
|
27 | ||
|
28 | /// Tests construction of a spectrogram series | |
|
29 | void testCtor_data(); | |
|
30 | void testCtor(); | |
|
31 | ||
|
32 | /// Tests merge of two spectrogram series | |
|
33 | void testMerge_data(); | |
|
34 | void testMerge(); | |
|
35 | ||
|
36 | /// @todo ALX: test subdataseries | |
|
37 | /// Tests get subdata of a spectrogram series | |
|
38 | void testSubDataSeries_data(); | |
|
39 | void testSubDataSeries(); | |
|
40 | }; | |
|
41 | ||
|
42 | void TestSpectrogramSeries::testCtor_data() | |
|
43 | { | |
|
44 | // x-axis data | |
|
45 | QTest::addColumn<X>("xAxisData"); | |
|
46 | // y-axis data | |
|
47 | QTest::addColumn<Y>("yAxisData"); | |
|
48 | // values data | |
|
49 | QTest::addColumn<Values>("valuesData"); | |
|
50 | ||
|
51 | // construction expected to be valid | |
|
52 | QTest::addColumn<bool>("expectOK"); | |
|
53 | // expected x-axis data (when construction is valid) | |
|
54 | QTest::addColumn<X>("expectedXAxisData"); | |
|
55 | // expected components data (when construction is valid) | |
|
56 | QTest::addColumn<Components>("expectedComponentsData"); | |
|
57 | ||
|
58 | QTest::newRow( | |
|
59 | "invalidData (number of values by component aren't equal to the number of x-axis data)") | |
|
60 | << X{1., 2., 3., 4., 5.} << Y{1., 2., 3.} << Values{1., 2., 3.} << false << X{} | |
|
61 | << Components{}; | |
|
62 | ||
|
63 | QTest::newRow("invalidData (number of components aren't equal to the number of y-axis data)") | |
|
64 | << X{1., 2., 3., 4., 5.} << Y{1., 2.} // 2 y-axis data | |
|
65 | << Values{1., 2., 3., 4., 5.} // 1 component | |
|
66 | << false << X{} << Components{}; | |
|
67 | ||
|
68 | QTest::newRow("sortedData") << X{1., 2., 3., 4., 5.} << Y{1., 2.} // 2 y-axis data | |
|
69 | << Values{1., 2., 3., 4., 5., 6., 7., 8., 9., 10.} // 2 components | |
|
70 | << true << X{1., 2., 3., 4., 5.} | |
|
71 | << Components{{1., 3., 5., 7., 9.}, {2., 4., 6., 8., 10.}}; | |
|
72 | ||
|
73 | QTest::newRow("unsortedData") << X{5., 4., 3., 2., 1.} << Y{1., 2.} | |
|
74 | << Values{1., 2., 3., 4., 5., 6., 7., 8., 9., 10.} << true | |
|
75 | << X{1., 2., 3., 4., 5.} | |
|
76 | << Components{{9., 7., 5., 3., 1.}, {10., 8., 6., 4., 2.}}; | |
|
77 | } | |
|
78 | ||
|
79 | void TestSpectrogramSeries::testCtor() | |
|
80 | { | |
|
81 | // Creates series | |
|
82 | QFETCH(X, xAxisData); | |
|
83 | QFETCH(Y, yAxisData); | |
|
84 | QFETCH(Values, valuesData); | |
|
85 | QFETCH(bool, expectOK); | |
|
86 | ||
|
87 | if (expectOK) { | |
|
88 | auto series = SpectrogramBuilder{} | |
|
89 | .setX(std::move(xAxisData)) | |
|
90 | .setY(std::move(yAxisData)) | |
|
91 | .setValues(std::move(valuesData)) | |
|
92 | .build(); | |
|
93 | ||
|
94 | // Validates results | |
|
95 | QFETCH(X, expectedXAxisData); | |
|
96 | QFETCH(Components, expectedComponentsData); | |
|
97 | validateRange(series->cbegin(), series->cend(), expectedXAxisData, expectedComponentsData); | |
|
98 | } | |
|
99 | else { | |
|
100 | QVERIFY_EXCEPTION_THROWN(SpectrogramBuilder{} | |
|
101 | .setX(std::move(xAxisData)) | |
|
102 | .setY(std::move(yAxisData)) | |
|
103 | .setValues(std::move(valuesData)) | |
|
104 | .build(), | |
|
105 | std::invalid_argument); | |
|
106 | } | |
|
107 | } | |
|
108 | ||
|
109 | void TestSpectrogramSeries::testMerge_data() | |
|
110 | { | |
|
111 | testMerge_struct<SpectrogramSeries, Components>(); | |
|
112 | ||
|
113 | QTest::newRow("sortedMerge") << SpectrogramBuilder{} | |
|
114 | .setX({1., 2., 3.}) | |
|
115 | .setY({1., 2.}) | |
|
116 | .setValues({10., 11., 20., 21., 30., 31}) | |
|
117 | .build() | |
|
118 | << SpectrogramBuilder{} | |
|
119 | .setX({4., 5., 6.}) | |
|
120 | .setY({1., 2.}) | |
|
121 | .setValues({40., 41., 50., 51., 60., 61}) | |
|
122 | .build() | |
|
123 | << DataContainer{1., 2., 3., 4., 5., 6.} | |
|
124 | << Components{{10., 20., 30., 40., 50., 60.}, | |
|
125 | {11., 21., 31., 41., 51., 61}}; | |
|
126 | ||
|
127 | QTest::newRow( | |
|
128 | "unsortedMerge (merge not made because the two data series have different y-axes)") | |
|
129 | << SpectrogramBuilder{} | |
|
130 | .setX({4., 5., 6.}) | |
|
131 | .setY({1., 2.}) | |
|
132 | .setValues({40., 41., 50., 51., 60., 61}) | |
|
133 | .build() | |
|
134 | << SpectrogramBuilder{} | |
|
135 | .setX({1., 2., 3.}) | |
|
136 | .setY({3., 4.}) | |
|
137 | .setValues({10., 11., 20., 21., 30., 31}) | |
|
138 | .build() | |
|
139 | << DataContainer{4., 5., 6.} << Components{{40., 50., 60.}, {41., 51., 61}}; | |
|
140 | ||
|
141 | QTest::newRow( | |
|
142 | "unsortedMerge (unsortedMerge (merge is made because the two data series have the same " | |
|
143 | "y-axis)") | |
|
144 | << SpectrogramBuilder{} | |
|
145 | .setX({4., 5., 6.}) | |
|
146 | .setY({1., 2.}) | |
|
147 | .setValues({40., 41., 50., 51., 60., 61}) | |
|
148 | .build() | |
|
149 | << SpectrogramBuilder{} | |
|
150 | .setX({1., 2., 3.}) | |
|
151 | .setY({1., 2.}) | |
|
152 | .setValues({10., 11., 20., 21., 30., 31}) | |
|
153 | .build() | |
|
154 | << DataContainer{1., 2., 3., 4., 5., 6.} | |
|
155 | << Components{{10., 20., 30., 40., 50., 60.}, {11., 21., 31., 41., 51., 61}}; | |
|
156 | } | |
|
157 | ||
|
158 | void TestSpectrogramSeries::testMerge() | |
|
159 | { | |
|
160 | testMerge_t<SpectrogramSeries, Components>(); | |
|
161 | } | |
|
162 | ||
|
163 | void TestSpectrogramSeries::testSubDataSeries_data() | |
|
164 | { | |
|
165 | testSubDataSeries_struct<SpectrogramSeries, Components>(); | |
|
166 | ||
|
167 | QTest::newRow("subDataSeries (the range includes all data)") | |
|
168 | << SpectrogramBuilder{} | |
|
169 | .setX({1., 2., 3.}) | |
|
170 | .setY({1., 2.}) | |
|
171 | .setValues({10., 11., 20., 21., 30., 31}) | |
|
172 | .build() | |
|
173 | << SqpRange{0., 5.} << DataContainer{1., 2., 3.} | |
|
174 | << Components{{10., 20., 30.}, {11., 21., 31.}}; | |
|
175 | ||
|
176 | QTest::newRow("subDataSeries (the range includes no data)") | |
|
177 | << SpectrogramBuilder{} | |
|
178 | .setX({1., 2., 3.}) | |
|
179 | .setY({1., 2.}) | |
|
180 | .setValues({10., 11., 20., 21., 30., 31}) | |
|
181 | .build() | |
|
182 | << SqpRange{4., 5.} << DataContainer{} << Components{{}, {}}; | |
|
183 | ||
|
184 | QTest::newRow("subDataSeries (the range includes some data)") | |
|
185 | << SpectrogramBuilder{} | |
|
186 | .setX({1., 2., 3.}) | |
|
187 | .setY({1., 2.}) | |
|
188 | .setValues({10., 11., 20., 21., 30., 31}) | |
|
189 | .build() | |
|
190 | << SqpRange{1.1, 3} << DataContainer{2., 3.} << Components{{20., 30.}, {21., 31.}}; | |
|
191 | } | |
|
192 | ||
|
193 | void TestSpectrogramSeries::testSubDataSeries() | |
|
194 | { | |
|
195 | testSubDataSeries_t<SpectrogramSeries, Components>(); | |
|
196 | } | |
|
197 | ||
|
198 | QTEST_MAIN(TestSpectrogramSeries) | |
|
199 | #include "TestSpectrogramSeries.moc" |
@@ -3,6 +3,7 | |||
|
3 | 3 | tests = [ |
|
4 | 4 | [['Common/TestStringUtils.cpp'],'test_string_utils','StringUtils test'], |
|
5 | 5 | [['Data/TestScalarSeries.cpp'],'test_scalar','ScalarSeries test'], |
|
6 | [['Data/TestSpectrogramSeries.cpp'],'test_spectrogram','SpectrogramSeries test'], | |
|
6 | 7 | [['Data/TestVectorSeries.cpp'],'test_vector','VectorSeries test'], |
|
7 | 8 | [['Data/TestOneDimArrayData.cpp'],'test_1d','One Dim Array test'], |
|
8 | 9 | [['Data/TestOptionalAxis.cpp'],'test_optional_axis','OptionalAxis test'], |
General Comments 0
You need to be logged in to leave comments.
Login now