#include #include #include "fixedsizematrix.h" class QFixedSizeMatrixTest : public QObject { Q_OBJECT public: enum class TestEnum { ONE, TWO, THREE, FOUR }; Q_ENUM(TestEnum) private Q_SLOTS: void constructorTest(); void assignmentTest(); void comparisonTest(); void rotateLeftTest(); void rotateRightTest(); void rotate180Test(); private: static const std::array, 4> demoData; static const std::array, 2> demoDataRotatedLeft; static const std::array, 2> demoDataRotatedRight; static const std::array, 4> demoDataRotated180; template void verifyToDemoData(const FixedSizeMatrix& matrix, const std::array, height> &data); }; const std::array, 4> QFixedSizeMatrixTest::demoData { std::array { TestEnum::ONE, TestEnum::ONE }, std::array { TestEnum::TWO, TestEnum::TWO }, std::array { TestEnum::THREE, TestEnum::THREE }, std::array { TestEnum::FOUR, TestEnum::FOUR } }; const std::array, 2> QFixedSizeMatrixTest::demoDataRotatedLeft { std::array { TestEnum::ONE, TestEnum::TWO, TestEnum::THREE, TestEnum::FOUR }, std::array { TestEnum::ONE, TestEnum::TWO, TestEnum::THREE, TestEnum::FOUR } }; const std::array, 2> QFixedSizeMatrixTest::demoDataRotatedRight { std::array { TestEnum::FOUR, TestEnum::THREE, TestEnum::TWO, TestEnum::ONE }, std::array { TestEnum::FOUR, TestEnum::THREE, TestEnum::TWO, TestEnum::ONE } }; const std::array, 4> QFixedSizeMatrixTest::demoDataRotated180 { std::array { TestEnum::FOUR, TestEnum::FOUR }, std::array { TestEnum::THREE, TestEnum::THREE }, std::array { TestEnum::TWO, TestEnum::TWO }, std::array { TestEnum::ONE, TestEnum::ONE } }; template void QFixedSizeMatrixTest::verifyToDemoData(const FixedSizeMatrix &matrix, const std::array, height> &data) { for(unsigned int y = 0; y < height; y++) for(unsigned int x = 0; x < width; x++) QCOMPARE(matrix(x, y), data[y][x]); } void QFixedSizeMatrixTest::constructorTest() { FixedSizeMatrix matrix(demoData); verifyToDemoData(matrix, demoData); } void QFixedSizeMatrixTest::assignmentTest() { FixedSizeMatrix matrix(demoData); FixedSizeMatrix other; other = matrix; verifyToDemoData(other, demoData); } void QFixedSizeMatrixTest::comparisonTest() { FixedSizeMatrix matrix0(demoData); FixedSizeMatrix matrix1; QVERIFY2(matrix0 != matrix1, ""); matrix1 = FixedSizeMatrix { demoData }; QVERIFY2(matrix0 == matrix1, ""); } void QFixedSizeMatrixTest::rotateLeftTest() { FixedSizeMatrix matrix(demoData); FixedSizeMatrix rotatedContainer; rotatedContainer = matrix.rotatedLeft(); verifyToDemoData(rotatedContainer, demoDataRotatedLeft); matrix = rotatedContainer.rotatedLeft(); verifyToDemoData(matrix, demoDataRotated180); rotatedContainer = matrix.rotatedLeft(); verifyToDemoData(rotatedContainer, demoDataRotatedRight); matrix = rotatedContainer.rotatedLeft(); verifyToDemoData(matrix, demoData); } void QFixedSizeMatrixTest::rotateRightTest() { FixedSizeMatrix matrix(demoData); FixedSizeMatrix rotatedContainer; rotatedContainer = matrix.rotatedRight(); verifyToDemoData(rotatedContainer, demoDataRotatedRight); matrix = rotatedContainer.rotatedRight(); verifyToDemoData(matrix, demoDataRotated180); rotatedContainer = matrix.rotatedRight(); verifyToDemoData(rotatedContainer, demoDataRotatedLeft); matrix = rotatedContainer.rotatedRight(); verifyToDemoData(matrix, demoData); } void QFixedSizeMatrixTest::rotate180Test() { FixedSizeMatrix matrix(demoData); matrix = matrix.rotated180(); verifyToDemoData(matrix, demoDataRotated180); matrix = matrix.rotated180(); verifyToDemoData(matrix, demoData); } QTEST_APPLESS_MAIN(QFixedSizeMatrixTest) #include "tst_qfixedsizematrixtest.moc"