@@ -0,0 +1,151 | |||||
|
1 | #include <Data/ArrayData.h> | |||
|
2 | #include <Data/OptionalAxis.h> | |||
|
3 | ||||
|
4 | #include <QObject> | |||
|
5 | #include <QtTest> | |||
|
6 | ||||
|
7 | Q_DECLARE_METATYPE(OptionalAxis) | |||
|
8 | Q_DECLARE_METATYPE(Unit) | |||
|
9 | ||||
|
10 | class TestOptionalAxis : public QObject { | |||
|
11 | Q_OBJECT | |||
|
12 | ||||
|
13 | private slots: | |||
|
14 | /// Tests the creation of a undefined axis | |||
|
15 | void testNotDefinedAxisCtor(); | |||
|
16 | ||||
|
17 | /// Tests the creation of a undefined axis | |||
|
18 | void testDefinedAxisCtor_data(); | |||
|
19 | void testDefinedAxisCtor(); | |||
|
20 | ||||
|
21 | /// Tests @sa OptionalAxis::at() method | |||
|
22 | void testAt_data(); | |||
|
23 | void testAt(); | |||
|
24 | ||||
|
25 | /// Tests @sa OptionalAxis::size() method | |||
|
26 | void testSize_data(); | |||
|
27 | void testSize(); | |||
|
28 | ||||
|
29 | /// Tests @sa OptionalAxis::unit() method | |||
|
30 | void testUnit_data(); | |||
|
31 | void testUnit(); | |||
|
32 | }; | |||
|
33 | ||||
|
34 | void TestOptionalAxis::testNotDefinedAxisCtor() | |||
|
35 | { | |||
|
36 | OptionalAxis notDefinedAxis{}; | |||
|
37 | QVERIFY(!notDefinedAxis.isDefined()); | |||
|
38 | } | |||
|
39 | ||||
|
40 | void TestOptionalAxis::testDefinedAxisCtor_data() | |||
|
41 | { | |||
|
42 | QTest::addColumn<bool>("noData"); // If set to true, nullptr is passed as data of the axis | |||
|
43 | QTest::addColumn<std::vector<double> >( | |||
|
44 | "data"); // Values assigned to the axis when 'noData' flag is set to false | |||
|
45 | QTest::addColumn<Unit>("unit"); // Unit assigned to the axis | |||
|
46 | ||||
|
47 | QTest::newRow("validData") << false << std::vector<double>{1, 2, 3} << Unit{"Hz"}; | |||
|
48 | QTest::newRow("invalidData") << true << std::vector<double>{} << Unit{"Hz"}; | |||
|
49 | } | |||
|
50 | ||||
|
51 | void TestOptionalAxis::testDefinedAxisCtor() | |||
|
52 | { | |||
|
53 | QFETCH(bool, noData); | |||
|
54 | QFETCH(Unit, unit); | |||
|
55 | ||||
|
56 | // When there is no data, we expect that the constructor returns exception | |||
|
57 | if (noData) { | |||
|
58 | QVERIFY_EXCEPTION_THROWN(OptionalAxis(nullptr, unit), std::invalid_argument); | |||
|
59 | } | |||
|
60 | else { | |||
|
61 | QFETCH(std::vector<double>, data); | |||
|
62 | ||||
|
63 | OptionalAxis axis{std::make_shared<ArrayData<1> >(data), unit}; | |||
|
64 | QVERIFY(axis.isDefined()); | |||
|
65 | } | |||
|
66 | } | |||
|
67 | ||||
|
68 | void TestOptionalAxis::testAt_data() | |||
|
69 | { | |||
|
70 | QTest::addColumn<OptionalAxis>("axis"); // Axis used for test case (defined or not) | |||
|
71 | QTest::addColumn<int>("index"); // Index to test in the axis | |||
|
72 | QTest::addColumn<double>("expectedValue"); // Expected axis value for the index | |||
|
73 | ||||
|
74 | OptionalAxis definedAxis{std::make_shared<ArrayData<1> >(std::vector<double>{1, 2, 3}), | |||
|
75 | Unit{"Hz"}}; | |||
|
76 | ||||
|
77 | QTest::newRow("data1") << definedAxis << 0 << 1.; | |||
|
78 | QTest::newRow("data2") << definedAxis << 1 << 2.; | |||
|
79 | QTest::newRow("data3") << definedAxis << 2 << 3.; | |||
|
80 | QTest::newRow("data4 (index out of bounds)") | |||
|
81 | << definedAxis << 3 | |||
|
82 | << std::numeric_limits<double>::quiet_NaN(); // Expects NaN for out of bounds index | |||
|
83 | QTest::newRow("data5 (index out of bounds)") | |||
|
84 | << definedAxis << -1 | |||
|
85 | << std::numeric_limits<double>::quiet_NaN(); // Expects NaN for out of bounds index | |||
|
86 | QTest::newRow("data6 (axis not defined)") | |||
|
87 | << OptionalAxis{} << 0 | |||
|
88 | << std::numeric_limits<double>::quiet_NaN(); // Expects NaN for undefined axis | |||
|
89 | } | |||
|
90 | ||||
|
91 | void TestOptionalAxis::testAt() | |||
|
92 | { | |||
|
93 | QFETCH(OptionalAxis, axis); | |||
|
94 | QFETCH(int, index); | |||
|
95 | QFETCH(double, expectedValue); | |||
|
96 | ||||
|
97 | auto value = axis.at(index); | |||
|
98 | QVERIFY((std::isnan(value) && std::isnan(expectedValue)) || value == expectedValue); | |||
|
99 | } | |||
|
100 | ||||
|
101 | void TestOptionalAxis::testSize_data() | |||
|
102 | { | |||
|
103 | QTest::addColumn<OptionalAxis>("axis"); // Axis used for test case (defined or not) | |||
|
104 | QTest::addColumn<int>("expectedSize"); // Expected number of data in the axis | |||
|
105 | ||||
|
106 | // Lambda that creates default defined axis (with the values passed in parameter) | |||
|
107 | auto axis = [](std::vector<double> values) { | |||
|
108 | return OptionalAxis{std::make_shared<ArrayData<1> >(std::move(values)), Unit{"Hz"}}; | |||
|
109 | }; | |||
|
110 | ||||
|
111 | QTest::newRow("data1") << axis({}) << 0; | |||
|
112 | QTest::newRow("data2") << axis({1, 2, 3}) << 3; | |||
|
113 | QTest::newRow("data3") << axis({1, 2, 3, 4}) << 4; | |||
|
114 | QTest::newRow("data4 (axis not defined)") | |||
|
115 | << OptionalAxis{} << 0; // Expects 0 for undefined axis | |||
|
116 | } | |||
|
117 | ||||
|
118 | void TestOptionalAxis::testSize() | |||
|
119 | { | |||
|
120 | QFETCH(OptionalAxis, axis); | |||
|
121 | QFETCH(int, expectedSize); | |||
|
122 | ||||
|
123 | QCOMPARE(axis.size(), expectedSize); | |||
|
124 | } | |||
|
125 | ||||
|
126 | void TestOptionalAxis::testUnit_data() | |||
|
127 | { | |||
|
128 | QTest::addColumn<OptionalAxis>("axis"); // Axis used for test case (defined or not) | |||
|
129 | QTest::addColumn<Unit>("expectedUnit"); // Expected unit for the axis | |||
|
130 | ||||
|
131 | // Lambda that creates default defined axis (with the unit passed in parameter) | |||
|
132 | auto axis = [](Unit unit) { | |||
|
133 | return OptionalAxis{std::make_shared<ArrayData<1> >(std::vector<double>{1, 2, 3}), unit}; | |||
|
134 | }; | |||
|
135 | ||||
|
136 | QTest::newRow("data1") << axis(Unit{"Hz"}) << Unit{"Hz"}; | |||
|
137 | QTest::newRow("data2") << axis(Unit{"t", true}) << Unit{"t", true}; | |||
|
138 | QTest::newRow("data3 (axis not defined)") | |||
|
139 | << OptionalAxis{} << Unit{}; // Expects default unit for undefined axis | |||
|
140 | } | |||
|
141 | ||||
|
142 | void TestOptionalAxis::testUnit() | |||
|
143 | { | |||
|
144 | QFETCH(OptionalAxis, axis); | |||
|
145 | QFETCH(Unit, expectedUnit); | |||
|
146 | ||||
|
147 | QCOMPARE(axis.unit(), expectedUnit); | |||
|
148 | } | |||
|
149 | ||||
|
150 | QTEST_MAIN(TestOptionalAxis) | |||
|
151 | #include "TestOptionalAxis.moc" |
@@ -4,6 +4,7 tests = [ | |||||
4 | [['Common/TestStringUtils.cpp'],'test_string_utils','StringUtils test'], |
|
4 | [['Common/TestStringUtils.cpp'],'test_string_utils','StringUtils test'], | |
5 | [['Data/TestDataSeries.cpp'],'test_data','DataSeries test'], |
|
5 | [['Data/TestDataSeries.cpp'],'test_data','DataSeries test'], | |
6 | [['Data/TestOneDimArrayData.cpp'],'test_1d','One Dim Array test'], |
|
6 | [['Data/TestOneDimArrayData.cpp'],'test_1d','One Dim Array test'], | |
|
7 | [['Data/TestOptionalAxis.cpp'],'test_optional_axis','OptionalAxis test'], | |||
7 | [['Data/TestTwoDimArrayData.cpp'],'test_2d','Two Dim Array test'], |
|
8 | [['Data/TestTwoDimArrayData.cpp'],'test_2d','Two Dim Array test'], | |
8 | [['DataSource/TestDataSourceController.cpp'],'test_data_source','DataSourceController test'], |
|
9 | [['DataSource/TestDataSourceController.cpp'],'test_data_source','DataSourceController test'], | |
9 | [['Variable/TestVariableCacheController.cpp'],'test_variable_cache','VariableCacheController test'], |
|
10 | [['Variable/TestVariableCacheController.cpp'],'test_variable_cache','VariableCacheController test'], |
General Comments 0
You need to be logged in to leave comments.
Login now