diff --git a/fixedsizematrix.h b/fixedsizematrix.h index b38a52e..820bd8b 100644 --- a/fixedsizematrix.h +++ b/fixedsizematrix.h @@ -177,13 +177,25 @@ auto FixedSizeMatrix::asRotated180() const template auto FixedSizeMatrix::asMirroredHorizontally() const { - //TODO + std::array, height> data; + + for(unsigned int y = 0; y < height; y++) + for(unsigned int x = 0; x < width; x++) + data[height-y-1][x] = m_data[y][x]; + + return FixedSizeMatrix(data); } template auto FixedSizeMatrix::asMirroredVertically() const { - //TODO + std::array, height> data; + + for(unsigned int y = 0; y < height; y++) + for(unsigned int x = 0; x < width; x++) + data[y][width-x-1] = m_data[y][x]; + + return FixedSizeMatrix(data); } #endif // FIXEDSIZEMATRIX_H diff --git a/tst_qfixedsizematrixtest.cpp b/tst_qfixedsizematrixtest.cpp index 69f750a..7e3bc81 100644 --- a/tst_qfixedsizematrixtest.cpp +++ b/tst_qfixedsizematrixtest.cpp @@ -39,6 +39,8 @@ private: static const std::array, 4> demoData4x4RotatedLeft; static const std::array, 4> demoData4x4RotatedRight; static const std::array, 4> demoData4x4Rotated180; + static const std::array, 4> demoData4x4HorizontallyMirrored; + static const std::array, 4> demoData4x4VerticallyMirrored; template void verifyData(const FixedSizeMatrix& matrix, @@ -70,31 +72,45 @@ const std::array, 4> QFixedSizeMat }; const std::array, 4> QFixedSizeMatrixTest::demoData4x4 { - std::array { TestEnum::ONE, TestEnum::ONE, TestEnum::ONE, TestEnum::ONE }, - std::array { TestEnum::TWO, TestEnum::TWO, TestEnum::TWO, TestEnum::TWO }, - std::array { TestEnum::THREE, TestEnum::THREE, TestEnum::THREE, TestEnum::THREE }, - std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::FOUR, TestEnum::FOUR } + std::array { TestEnum::ONE, TestEnum::ONE, TestEnum::TWO, TestEnum::TWO }, + std::array { TestEnum::TWO, TestEnum::TWO, TestEnum::ONE, TestEnum::ONE }, + std::array { TestEnum::THREE, TestEnum::THREE, TestEnum::FOUR, TestEnum::FOUR }, + std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::THREE, TestEnum::THREE } }; const std::array, 4> QFixedSizeMatrixTest::demoData4x4RotatedLeft { std::array { TestEnum::ONE, TestEnum::TWO, TestEnum::THREE, TestEnum::FOUR }, std::array { TestEnum::ONE, TestEnum::TWO, TestEnum::THREE, TestEnum::FOUR }, - std::array { TestEnum::ONE, TestEnum::TWO, TestEnum::THREE, TestEnum::FOUR }, - std::array { TestEnum::ONE, TestEnum::TWO, TestEnum::THREE, TestEnum::FOUR } + std::array { TestEnum::TWO, TestEnum::ONE, TestEnum::FOUR, TestEnum::THREE }, + std::array { TestEnum::TWO, TestEnum::ONE, TestEnum::FOUR, TestEnum::THREE } }; const std::array, 4> QFixedSizeMatrixTest::demoData4x4RotatedRight { - std::array { TestEnum::FOUR, TestEnum::THREE, TestEnum::TWO, TestEnum::ONE }, - std::array { TestEnum::FOUR, TestEnum::THREE, TestEnum::TWO, TestEnum::ONE }, - std::array { TestEnum::FOUR, TestEnum::THREE, TestEnum::TWO, TestEnum::ONE }, - std::array { TestEnum::FOUR, TestEnum::THREE, TestEnum::TWO, TestEnum::ONE } + std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::TWO, TestEnum::TWO }, + std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::TWO, TestEnum::TWO }, + std::array { TestEnum::THREE, TestEnum::THREE, TestEnum::ONE, TestEnum::ONE }, + std::array { TestEnum::THREE, TestEnum::THREE, TestEnum::ONE, TestEnum::ONE } }; const std::array, 4> QFixedSizeMatrixTest::demoData4x4Rotated180 { - std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::FOUR, TestEnum::FOUR }, - std::array { TestEnum::THREE, TestEnum::THREE, TestEnum::THREE, TestEnum::THREE }, - std::array { TestEnum::TWO, TestEnum::TWO, TestEnum::TWO, TestEnum::TWO }, - std::array { TestEnum::ONE, TestEnum::ONE, TestEnum::ONE, TestEnum::ONE } + std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::THREE, TestEnum::THREE }, + std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::THREE, TestEnum::THREE }, + std::array { TestEnum::TWO, TestEnum::TWO, TestEnum::ONE, TestEnum::ONE }, + std::array { TestEnum::TWO, TestEnum::TWO, TestEnum::ONE, TestEnum::ONE } +}; + +const std::array, 4> QFixedSizeMatrixTest::demoData4x4HorizontallyMirrored { + std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::THREE, TestEnum::THREE }, + std::array { TestEnum::THREE, TestEnum::THREE, TestEnum::FOUR, TestEnum::FOUR }, + std::array { TestEnum::TWO, TestEnum::TWO, TestEnum::ONE, TestEnum::ONE }, + std::array { TestEnum::ONE, TestEnum::ONE, TestEnum::TWO, TestEnum::TWO } +}; + +const std::array, 4> QFixedSizeMatrixTest::demoData4x4VerticallyMirrored { + std::array { TestEnum::TWO, TestEnum::TWO, TestEnum::ONE, TestEnum::ONE }, + std::array { TestEnum::ONE, TestEnum::ONE, TestEnum::TWO, TestEnum::TWO }, + std::array { TestEnum::FOUR, TestEnum::FOUR, TestEnum::THREE, TestEnum::THREE }, + std::array { TestEnum::THREE, TestEnum::THREE, TestEnum::FOUR, TestEnum::FOUR } }; template @@ -198,12 +214,24 @@ void QFixedSizeMatrixTest::rotate180Test() void QFixedSizeMatrixTest::mirrorHorizontallyTest() { - //TODO + FixedSizeMatrix matrix { demoData4x4 }; + + matrix.mirrorHorizontally(); + verifyData(matrix, demoData4x4HorizontallyMirrored); + + matrix.mirrorHorizontally(); + verifyData(matrix, demoData4x4); } void QFixedSizeMatrixTest::mirrorVerticallyTest() { - //TODO + FixedSizeMatrix matrix { demoData4x4 }; + + matrix.mirrorVertically(); + verifyData(matrix, demoData4x4VerticallyMirrored); + + matrix.mirrorVertically(); + verifyData(matrix, demoData4x4); } void QFixedSizeMatrixTest::asRotatedLeftTest() @@ -255,12 +283,24 @@ void QFixedSizeMatrixTest::asRotated180Test() void QFixedSizeMatrixTest::asMirroredHorizontally() { - //TODO + FixedSizeMatrix matrix { demoData4x4 }; + + matrix = matrix.asMirroredHorizontally(); + verifyData(matrix, demoData4x4HorizontallyMirrored); + + matrix = matrix.asMirroredHorizontally(); + verifyData(matrix, demoData4x4); } void QFixedSizeMatrixTest::asMirroredVertically() { - //TODO + FixedSizeMatrix matrix { demoData4x4 }; + + matrix = matrix.asMirroredVertically(); + verifyData(matrix, demoData4x4VerticallyMirrored); + + matrix = matrix.asMirroredVertically(); + verifyData(matrix, demoData4x4); } QTEST_APPLESS_MAIN(QFixedSizeMatrixTest)