##// END OF EJS Templates
Uses new iterator in DataSeries.cpp...
Uses new iterator in DataSeries.cpp The code of the old iterator is deleted. The new iterator is now built from the Implementation of DataSeriesIteratorValue :: Impl for a DataSeries

File last commit:

r586:70ca5d366d01
r596:96f73c42ec59
Show More
TestDataSeries.cpp
232 lines | 8.9 KiB | text/x-c | CppLexer
#include "Data/DataSeries.h"
#include "Data/ScalarSeries.h"
#include <QObject>
#include <QtTest>
Q_DECLARE_METATYPE(std::shared_ptr<ScalarSeries>)
class TestDataSeries : public QObject {
Q_OBJECT
private slots:
/// Input test data
/// @sa testCtor()
void testCtor_data();
/// Tests construction of a data series
void testCtor();
/// Input test data
/// @sa testMerge()
void testMerge_data();
/// Tests merge of two data series
void testMerge();
/// Input test data
/// @sa testSubdata()
void testSubdata_data();
/// Tests get subdata of two data series
void testSubdata();
};
void TestDataSeries::testCtor_data()
{
// ////////////// //
// Test structure //
// ////////////// //
// x-axis data
QTest::addColumn<QVector<double> >("xAxisData");
// values data
QTest::addColumn<QVector<double> >("valuesData");
// expected x-axis data
QTest::addColumn<QVector<double> >("expectedXAxisData");
// expected values data
QTest::addColumn<QVector<double> >("expectedValuesData");
// ////////// //
// Test cases //
// ////////// //
QTest::newRow("invalidData (different sizes of vectors)")
<< QVector<double>{1., 2., 3., 4., 5.} << QVector<double>{100., 200., 300.}
<< QVector<double>{} << QVector<double>{};
QTest::newRow("sortedData") << QVector<double>{1., 2., 3., 4., 5.}
<< QVector<double>{100., 200., 300., 400., 500.}
<< QVector<double>{1., 2., 3., 4., 5.}
<< QVector<double>{100., 200., 300., 400., 500.};
QTest::newRow("unsortedData") << QVector<double>{5., 4., 3., 2., 1.}
<< QVector<double>{100., 200., 300., 400., 500.}
<< QVector<double>{1., 2., 3., 4., 5.}
<< QVector<double>{500., 400., 300., 200., 100.};
QTest::newRow("unsortedData2")
<< QVector<double>{1., 4., 3., 5., 2.} << QVector<double>{100., 200., 300., 400., 500.}
<< QVector<double>{1., 2., 3., 4., 5.} << QVector<double>{100., 500., 300., 200., 400.};
}
void TestDataSeries::testCtor()
{
// Creates series
QFETCH(QVector<double>, xAxisData);
QFETCH(QVector<double>, valuesData);
auto series = std::make_shared<ScalarSeries>(std::move(xAxisData), std::move(valuesData),
Unit{}, Unit{});
// Validates results : we check that the data series is sorted on its x-axis data
QFETCH(QVector<double>, expectedXAxisData);
QFETCH(QVector<double>, expectedValuesData);
auto seriesXAxisData = series->xAxisData()->data();
auto seriesValuesData = series->valuesData()->data();
QVERIFY(
std::equal(expectedXAxisData.cbegin(), expectedXAxisData.cend(), seriesXAxisData.cbegin()));
QVERIFY(std::equal(expectedValuesData.cbegin(), expectedValuesData.cend(),
seriesValuesData.cbegin()));
}
namespace {
std::shared_ptr<ScalarSeries> createSeries(QVector<double> xAxisData, QVector<double> valuesData)
{
return std::make_shared<ScalarSeries>(std::move(xAxisData), std::move(valuesData), Unit{},
Unit{});
}
} // namespace
void TestDataSeries::testMerge_data()
{
// ////////////// //
// Test structure //
// ////////////// //
// Data series to merge
QTest::addColumn<std::shared_ptr<ScalarSeries> >("dataSeries");
QTest::addColumn<std::shared_ptr<ScalarSeries> >("dataSeries2");
// Expected values in the first data series after merge
QTest::addColumn<QVector<double> >("expectedXAxisData");
QTest::addColumn<QVector<double> >("expectedValuesData");
// ////////// //
// Test cases //
// ////////// //
QTest::newRow("sortedMerge")
<< createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< createSeries({6., 7., 8., 9., 10.}, {600., 700., 800., 900., 1000.})
<< QVector<double>{1., 2., 3., 4., 5., 6., 7., 8., 9., 10.}
<< QVector<double>{100., 200., 300., 400., 500., 600., 700., 800., 900., 1000.};
QTest::newRow("unsortedMerge")
<< createSeries({6., 7., 8., 9., 10.}, {600., 700., 800., 900., 1000.})
<< createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< QVector<double>{1., 2., 3., 4., 5., 6., 7., 8., 9., 10.}
<< QVector<double>{100., 200., 300., 400., 500., 600., 700., 800., 900., 1000.};
QTest::newRow("unsortedMerge2")
<< createSeries({1., 2., 8., 9., 10}, {100., 200., 300., 400., 500.})
<< createSeries({3., 4., 5., 6., 7.}, {600., 700., 800., 900., 1000.})
<< QVector<double>{1., 2., 3., 4., 5., 6., 7., 8., 9., 10.}
<< QVector<double>{100., 200., 600., 700., 800., 900., 1000., 300., 400., 500.};
QTest::newRow("unsortedMerge3")
<< createSeries({3., 5., 8., 7., 2}, {100., 200., 300., 400., 500.})
<< createSeries({6., 4., 9., 10., 1.}, {600., 700., 800., 900., 1000.})
<< QVector<double>{1., 2., 3., 4., 5., 6., 7., 8., 9., 10.}
<< QVector<double>{1000., 500., 100., 700., 200., 600., 400., 300., 800., 900.};
}
void TestDataSeries::testMerge()
{
// Merges series
QFETCH(std::shared_ptr<ScalarSeries>, dataSeries);
QFETCH(std::shared_ptr<ScalarSeries>, dataSeries2);
dataSeries->merge(dataSeries2.get());
// Validates results : we check that the merge is valid and the data series is sorted on its
// x-axis data
QFETCH(QVector<double>, expectedXAxisData);
QFETCH(QVector<double>, expectedValuesData);
auto seriesXAxisData = dataSeries->xAxisData()->data();
auto seriesValuesData = dataSeries->valuesData()->data();
QVERIFY(
std::equal(expectedXAxisData.cbegin(), expectedXAxisData.cend(), seriesXAxisData.cbegin()));
QVERIFY(std::equal(expectedValuesData.cbegin(), expectedValuesData.cend(),
seriesValuesData.cbegin()));
}
void TestDataSeries::testSubdata_data()
{
// ////////////// //
// Test structure //
// ////////////// //
// Data series to get subdata
QTest::addColumn<std::shared_ptr<ScalarSeries> >("dataSeries");
// Min/max values
QTest::addColumn<double>("min");
QTest::addColumn<double>("max");
// Expected values after subdata
QTest::addColumn<QVector<double> >("expectedXAxisData");
QTest::addColumn<QVector<double> >("expectedValuesData");
// ////////// //
// Test cases //
// ////////// //
QTest::newRow("subData1") << createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< -1. << 3.2 << QVector<double>{1., 2., 3.}
<< QVector<double>{100., 200., 300.};
QTest::newRow("subData2") << createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< 1. << 4. << QVector<double>{1., 2., 3., 4.}
<< QVector<double>{100., 200., 300., 400.};
QTest::newRow("subData3") << createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< 1. << 3.9 << QVector<double>{1., 2., 3.}
<< QVector<double>{100., 200., 300.};
QTest::newRow("subData4") << createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< 0. << 0.9 << QVector<double>{} << QVector<double>{};
QTest::newRow("subData5") << createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< 0. << 1. << QVector<double>{1.} << QVector<double>{100.};
QTest::newRow("subData6") << createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< 2.1 << 6. << QVector<double>{3., 4., 5.}
<< QVector<double>{300., 400., 500.};
QTest::newRow("subData7") << createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< 6. << 9. << QVector<double>{} << QVector<double>{};
QTest::newRow("subData8") << createSeries({1., 2., 3., 4., 5.}, {100., 200., 300., 400., 500.})
<< 5. << 9. << QVector<double>{5.} << QVector<double>{500.};
}
void TestDataSeries::testSubdata()
{
QFETCH(std::shared_ptr<ScalarSeries>, dataSeries);
QFETCH(double, min);
QFETCH(double, max);
QFETCH(QVector<double>, expectedXAxisData);
QFETCH(QVector<double>, expectedValuesData);
auto bounds = dataSeries->subData(min, max);
QVERIFY(std::equal(bounds.first, bounds.second, expectedXAxisData.cbegin(),
expectedXAxisData.cend(),
[](const auto &it, const auto &expectedX) { return it.x() == expectedX; }));
QVERIFY(std::equal(
bounds.first, bounds.second, expectedValuesData.cbegin(), expectedValuesData.cend(),
[](const auto &it, const auto &expectedVal) { return it.value() == expectedVal; }));
}
QTEST_MAIN(TestDataSeries)
#include "TestDataSeries.moc"