##// END OF EJS Templates
Creates DataSeriesUtils file that will contain methods for handling data holes...
Creates DataSeriesUtils file that will contain methods for handling data holes Renames DataSeriesUtils file in unit tests to avoid conflicts

File last commit:

r977:fce4a3cd44f3
r977:fce4a3cd44f3
Show More
TestSpectrogramSeries.cpp
198 lines | 7.1 KiB | text/x-c | CppLexer
/ core / tests / Data / TestSpectrogramSeries.cpp
#include "Data/SpectrogramSeries.h"
#include "DataSeriesBuilders.h"
#include "DataSeriesTestsUtils.h"
#include <QObject>
#include <QtTest>
namespace {
// Aliases used to facilitate reading of test inputs
using X = DataContainer;
using Y = DataContainer;
using Values = DataContainer;
using Components = std::vector<DataContainer>;
} // namespace
/**
* @brief The TestSpectrogramSeries class defines unit tests on spectrogram series.
*
* Most of these unit tests use generic tests defined for DataSeries (@sa DataSeriesTestsUtils)
*/
class TestSpectrogramSeries : public QObject {
Q_OBJECT
private slots:
/// Tests construction of a spectrogram series
void testCtor_data();
void testCtor();
/// Tests merge of two spectrogram series
void testMerge_data();
void testMerge();
/// Tests get subdata of a spectrogram series
void testSubDataSeries_data();
void testSubDataSeries();
};
void TestSpectrogramSeries::testCtor_data()
{
// x-axis data
QTest::addColumn<X>("xAxisData");
// y-axis data
QTest::addColumn<Y>("yAxisData");
// values data
QTest::addColumn<Values>("valuesData");
// construction expected to be valid
QTest::addColumn<bool>("expectOK");
// expected x-axis data (when construction is valid)
QTest::addColumn<X>("expectedXAxisData");
// expected components data (when construction is valid)
QTest::addColumn<Components>("expectedComponentsData");
QTest::newRow(
"invalidData (number of values by component aren't equal to the number of x-axis data)")
<< X{1., 2., 3., 4., 5.} << Y{1., 2., 3.} << Values{1., 2., 3.} << false << X{}
<< Components{};
QTest::newRow("invalidData (number of components aren't equal to the number of y-axis data)")
<< X{1., 2., 3., 4., 5.} << Y{1., 2.} // 2 y-axis data
<< Values{1., 2., 3., 4., 5.} // 1 component
<< false << X{} << Components{};
QTest::newRow("sortedData") << X{1., 2., 3., 4., 5.} << Y{1., 2.} // 2 y-axis data
<< Values{1., 2., 3., 4., 5., 6., 7., 8., 9., 10.} // 2 components
<< true << X{1., 2., 3., 4., 5.}
<< Components{{1., 3., 5., 7., 9.}, {2., 4., 6., 8., 10.}};
QTest::newRow("unsortedData") << X{5., 4., 3., 2., 1.} << Y{1., 2.}
<< Values{1., 2., 3., 4., 5., 6., 7., 8., 9., 10.} << true
<< X{1., 2., 3., 4., 5.}
<< Components{{9., 7., 5., 3., 1.}, {10., 8., 6., 4., 2.}};
}
void TestSpectrogramSeries::testCtor()
{
// Creates series
QFETCH(X, xAxisData);
QFETCH(Y, yAxisData);
QFETCH(Values, valuesData);
QFETCH(bool, expectOK);
if (expectOK) {
auto series = SpectrogramBuilder{}
.setX(std::move(xAxisData))
.setY(std::move(yAxisData))
.setValues(std::move(valuesData))
.build();
// Validates results
QFETCH(X, expectedXAxisData);
QFETCH(Components, expectedComponentsData);
validateRange(series->cbegin(), series->cend(), expectedXAxisData, expectedComponentsData);
}
else {
QVERIFY_EXCEPTION_THROWN(SpectrogramBuilder{}
.setX(std::move(xAxisData))
.setY(std::move(yAxisData))
.setValues(std::move(valuesData))
.build(),
std::invalid_argument);
}
}
void TestSpectrogramSeries::testMerge_data()
{
testMerge_struct<SpectrogramSeries, Components>();
QTest::newRow("sortedMerge") << SpectrogramBuilder{}
.setX({1., 2., 3.})
.setY({1., 2.})
.setValues({10., 11., 20., 21., 30., 31})
.build()
<< SpectrogramBuilder{}
.setX({4., 5., 6.})
.setY({1., 2.})
.setValues({40., 41., 50., 51., 60., 61})
.build()
<< DataContainer{1., 2., 3., 4., 5., 6.}
<< Components{{10., 20., 30., 40., 50., 60.},
{11., 21., 31., 41., 51., 61}};
QTest::newRow(
"unsortedMerge (merge not made because the two data series have different y-axes)")
<< SpectrogramBuilder{}
.setX({4., 5., 6.})
.setY({1., 2.})
.setValues({40., 41., 50., 51., 60., 61})
.build()
<< SpectrogramBuilder{}
.setX({1., 2., 3.})
.setY({3., 4.})
.setValues({10., 11., 20., 21., 30., 31})
.build()
<< DataContainer{4., 5., 6.} << Components{{40., 50., 60.}, {41., 51., 61}};
QTest::newRow(
"unsortedMerge (unsortedMerge (merge is made because the two data series have the same "
"y-axis)")
<< SpectrogramBuilder{}
.setX({4., 5., 6.})
.setY({1., 2.})
.setValues({40., 41., 50., 51., 60., 61})
.build()
<< SpectrogramBuilder{}
.setX({1., 2., 3.})
.setY({1., 2.})
.setValues({10., 11., 20., 21., 30., 31})
.build()
<< DataContainer{1., 2., 3., 4., 5., 6.}
<< Components{{10., 20., 30., 40., 50., 60.}, {11., 21., 31., 41., 51., 61}};
}
void TestSpectrogramSeries::testMerge()
{
testMerge_t<SpectrogramSeries, Components>();
}
void TestSpectrogramSeries::testSubDataSeries_data()
{
testSubDataSeries_struct<SpectrogramSeries, Components>();
QTest::newRow("subDataSeries (the range includes all data)")
<< SpectrogramBuilder{}
.setX({1., 2., 3.})
.setY({1., 2.})
.setValues({10., 11., 20., 21., 30., 31})
.build()
<< SqpRange{0., 5.} << DataContainer{1., 2., 3.}
<< Components{{10., 20., 30.}, {11., 21., 31.}};
QTest::newRow("subDataSeries (the range includes no data)")
<< SpectrogramBuilder{}
.setX({1., 2., 3.})
.setY({1., 2.})
.setValues({10., 11., 20., 21., 30., 31})
.build()
<< SqpRange{4., 5.} << DataContainer{} << Components{{}, {}};
QTest::newRow("subDataSeries (the range includes some data)")
<< SpectrogramBuilder{}
.setX({1., 2., 3.})
.setY({1., 2.})
.setValues({10., 11., 20., 21., 30., 31})
.build()
<< SqpRange{1.1, 3} << DataContainer{2., 3.} << Components{{20., 30.}, {21., 31.}};
}
void TestSpectrogramSeries::testSubDataSeries()
{
testSubDataSeries_t<SpectrogramSeries, Components>();
}
QTEST_MAIN(TestSpectrogramSeries)
#include "TestSpectrogramSeries.moc"