##// END OF EJS Templates
Updates generation of spectrogram in the mock plugin to set values' unit
Updates generation of spectrogram in the mock plugin to set values' unit

File last commit:

r913:fedc6e2cf64d
r915:487930a9dd9f
Show More
TestOptionalAxis.cpp
151 lines | 4.9 KiB | text/x-c | CppLexer
/ core / tests / Data / TestOptionalAxis.cpp
#include <Data/ArrayData.h>
#include <Data/OptionalAxis.h>
#include <QObject>
#include <QtTest>
Q_DECLARE_METATYPE(OptionalAxis)
Q_DECLARE_METATYPE(Unit)
class TestOptionalAxis : public QObject {
Q_OBJECT
private slots:
/// Tests the creation of a undefined axis
void testNotDefinedAxisCtor();
/// Tests the creation of a undefined axis
void testDefinedAxisCtor_data();
void testDefinedAxisCtor();
/// Tests @sa OptionalAxis::at() method
void testAt_data();
void testAt();
/// Tests @sa OptionalAxis::size() method
void testSize_data();
void testSize();
/// Tests @sa OptionalAxis::unit() method
void testUnit_data();
void testUnit();
};
void TestOptionalAxis::testNotDefinedAxisCtor()
{
OptionalAxis notDefinedAxis{};
QVERIFY(!notDefinedAxis.isDefined());
}
void TestOptionalAxis::testDefinedAxisCtor_data()
{
QTest::addColumn<bool>("noData"); // If set to true, nullptr is passed as data of the axis
QTest::addColumn<std::vector<double> >(
"data"); // Values assigned to the axis when 'noData' flag is set to false
QTest::addColumn<Unit>("unit"); // Unit assigned to the axis
QTest::newRow("validData") << false << std::vector<double>{1, 2, 3} << Unit{"Hz"};
QTest::newRow("invalidData") << true << std::vector<double>{} << Unit{"Hz"};
}
void TestOptionalAxis::testDefinedAxisCtor()
{
QFETCH(bool, noData);
QFETCH(Unit, unit);
// When there is no data, we expect that the constructor returns exception
if (noData) {
QVERIFY_EXCEPTION_THROWN(OptionalAxis(nullptr, unit), std::invalid_argument);
}
else {
QFETCH(std::vector<double>, data);
OptionalAxis axis{std::make_shared<ArrayData<1> >(data), unit};
QVERIFY(axis.isDefined());
}
}
void TestOptionalAxis::testAt_data()
{
QTest::addColumn<OptionalAxis>("axis"); // Axis used for test case (defined or not)
QTest::addColumn<int>("index"); // Index to test in the axis
QTest::addColumn<double>("expectedValue"); // Expected axis value for the index
OptionalAxis definedAxis{std::make_shared<ArrayData<1> >(std::vector<double>{1, 2, 3}),
Unit{"Hz"}};
QTest::newRow("data1") << definedAxis << 0 << 1.;
QTest::newRow("data2") << definedAxis << 1 << 2.;
QTest::newRow("data3") << definedAxis << 2 << 3.;
QTest::newRow("data4 (index out of bounds)")
<< definedAxis << 3
<< std::numeric_limits<double>::quiet_NaN(); // Expects NaN for out of bounds index
QTest::newRow("data5 (index out of bounds)")
<< definedAxis << -1
<< std::numeric_limits<double>::quiet_NaN(); // Expects NaN for out of bounds index
QTest::newRow("data6 (axis not defined)")
<< OptionalAxis{} << 0
<< std::numeric_limits<double>::quiet_NaN(); // Expects NaN for undefined axis
}
void TestOptionalAxis::testAt()
{
QFETCH(OptionalAxis, axis);
QFETCH(int, index);
QFETCH(double, expectedValue);
auto value = axis.at(index);
QVERIFY((std::isnan(value) && std::isnan(expectedValue)) || value == expectedValue);
}
void TestOptionalAxis::testSize_data()
{
QTest::addColumn<OptionalAxis>("axis"); // Axis used for test case (defined or not)
QTest::addColumn<int>("expectedSize"); // Expected number of data in the axis
// Lambda that creates default defined axis (with the values passed in parameter)
auto axis = [](std::vector<double> values) {
return OptionalAxis{std::make_shared<ArrayData<1> >(std::move(values)), Unit{"Hz"}};
};
QTest::newRow("data1") << axis({}) << 0;
QTest::newRow("data2") << axis({1, 2, 3}) << 3;
QTest::newRow("data3") << axis({1, 2, 3, 4}) << 4;
QTest::newRow("data4 (axis not defined)") << OptionalAxis{}
<< 0; // Expects 0 for undefined axis
}
void TestOptionalAxis::testSize()
{
QFETCH(OptionalAxis, axis);
QFETCH(int, expectedSize);
QCOMPARE(axis.size(), expectedSize);
}
void TestOptionalAxis::testUnit_data()
{
QTest::addColumn<OptionalAxis>("axis"); // Axis used for test case (defined or not)
QTest::addColumn<Unit>("expectedUnit"); // Expected unit for the axis
// Lambda that creates default defined axis (with the unit passed in parameter)
auto axis = [](Unit unit) {
return OptionalAxis{std::make_shared<ArrayData<1> >(std::vector<double>{1, 2, 3}), unit};
};
QTest::newRow("data1") << axis(Unit{"Hz"}) << Unit{"Hz"};
QTest::newRow("data2") << axis(Unit{"t", true}) << Unit{"t", true};
QTest::newRow("data3 (axis not defined)") << OptionalAxis{}
<< Unit{}; // Expects default unit for undefined axis
}
void TestOptionalAxis::testUnit()
{
QFETCH(OptionalAxis, axis);
QFETCH(Unit, expectedUnit);
QCOMPARE(axis.unit(), expectedUnit);
}
QTEST_MAIN(TestOptionalAxis)
#include "TestOptionalAxis.moc"