#include "Data/ArrayData.h" #include #include namespace { using DataContainer = std::vector; void verifyArrayData(const ArrayData<1> &arrayData, const DataContainer &expectedData) { QVERIFY(std::equal( arrayData.cbegin(), arrayData.cend(), expectedData.cbegin(), expectedData.cend(), [](const auto &it, const auto &expectedData) { return it.at(0) == expectedData; })); } } // namespace class TestOneDimArrayData : public QObject { Q_OBJECT private slots: /// Tests @sa ArrayData::data() void testData_data(); void testData(); /// Tests @sa ArrayData::add() void testAdd_data(); void testAdd(); /// Tests @sa ArrayData::at(int index) void testAt_data(); void testAt(); /// Tests @sa ArrayData::clear() void testClear_data(); void testClear(); /// Tests @sa ArrayData::size() void testSize_data(); void testSize(); /// Tests @sa ArrayData::sort() void testSort_data(); void testSort(); }; void TestOneDimArrayData::testData_data() { // Test structure QTest::addColumn("inputData"); // array's data input QTest::addColumn("expectedData"); // expected data // Test cases QTest::newRow("data1") << DataContainer{1., 2., 3., 4., 5.} << DataContainer{1., 2., 3., 4., 5.}; } void TestOneDimArrayData::testData() { QFETCH(DataContainer, inputData); QFETCH(DataContainer, expectedData); ArrayData<1> arrayData{inputData}; verifyArrayData(arrayData, expectedData); } void TestOneDimArrayData::testAdd_data() { // Test structure QTest::addColumn("inputData"); // array's data input QTest::addColumn("otherData"); // array data's input to merge with QTest::addColumn("prepend"); // prepend or append merge QTest::addColumn("expectedData"); // expected data after merge // Test cases QTest::newRow("appendMerge") << DataContainer{1., 2., 3., 4., 5.} << DataContainer{6., 7., 8.} << false << DataContainer{1., 2., 3., 4., 5., 6., 7., 8.}; QTest::newRow("prependMerge") << DataContainer{1., 2., 3., 4., 5.} << DataContainer{6., 7., 8.} << true << DataContainer{6., 7., 8., 1., 2., 3., 4., 5.}; } void TestOneDimArrayData::testAdd() { QFETCH(DataContainer, inputData); QFETCH(DataContainer, otherData); QFETCH(bool, prepend); QFETCH(DataContainer, expectedData); ArrayData<1> arrayData{inputData}; ArrayData<1> other{otherData}; arrayData.add(other, prepend); verifyArrayData(arrayData, expectedData); } void TestOneDimArrayData::testAt_data() { // Test structure QTest::addColumn("inputData"); // array data's input QTest::addColumn("index"); // index to retrieve data QTest::addColumn("expectedData"); // expected data at index // Test cases QTest::newRow("data1") << DataContainer{1., 2., 3., 4., 5.} << 0 << 1.; QTest::newRow("data2") << DataContainer{1., 2., 3., 4., 5.} << 3 << 4.; } void TestOneDimArrayData::testAt() { QFETCH(DataContainer, inputData); QFETCH(int, index); QFETCH(double, expectedData); ArrayData<1> arrayData{inputData}; QVERIFY(arrayData.at(index) == expectedData); } void TestOneDimArrayData::testClear_data() { // Test structure QTest::addColumn("inputData"); // array data's input // Test cases QTest::newRow("data1") << DataContainer{1., 2., 3., 4., 5.}; } void TestOneDimArrayData::testClear() { QFETCH(DataContainer, inputData); ArrayData<1> arrayData{inputData}; arrayData.clear(); verifyArrayData(arrayData, DataContainer{}); } void TestOneDimArrayData::testSize_data() { // Test structure QTest::addColumn("inputData"); // array data's input QTest::addColumn("expectedSize"); // expected array data size // Test cases QTest::newRow("data1") << DataContainer{1., 2., 3., 4., 5.} << 5; } void TestOneDimArrayData::testSize() { QFETCH(DataContainer, inputData); QFETCH(int, expectedSize); ArrayData<1> arrayData{inputData}; QVERIFY(arrayData.size() == expectedSize); } void TestOneDimArrayData::testSort_data() { // Test structure QTest::addColumn("inputData"); // array data's input QTest::addColumn >("sortPermutation"); // permutation used to sort data QTest::addColumn("expectedData"); // expected data after sorting // Test cases QTest::newRow("data1") << DataContainer{1., 2., 3., 4., 5.} << std::vector{0, 2, 3, 1, 4} << DataContainer{1., 3., 4., 2., 5.}; QTest::newRow("data2") << DataContainer{1., 2., 3., 4., 5.} << std::vector{4, 1, 2, 3, 0} << DataContainer{5., 2., 3., 4., 1.}; } void TestOneDimArrayData::testSort() { QFETCH(DataContainer, inputData); QFETCH(std::vector, sortPermutation); QFETCH(DataContainer, expectedData); ArrayData<1> arrayData{inputData}; auto sortedArrayData = arrayData.sort(sortPermutation); QVERIFY(sortedArrayData != nullptr); verifyArrayData(*sortedArrayData, expectedData); } QTEST_MAIN(TestOneDimArrayData) #include "TestOneDimArrayData.moc"