From 3233263ffc03c7391d779e2bf0edfcd205a726c0 Mon Sep 17 00:00:00 2001 From: Quinn Henthorne Date: Tue, 10 Dec 2024 17:06:07 -0500 Subject: [PATCH] Started adding the first real unit test --- Matrix.hpp | 26 +++++++++++++------------- unit-tests/matrix-tests.cpp | 13 +++++++++++++ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/Matrix.hpp b/Matrix.hpp index 542265e..3bc9bc5 100644 --- a/Matrix.hpp +++ b/Matrix.hpp @@ -6,12 +6,11 @@ #include #include - template class Matrix { public: Matrix(); - Matrix(const std::array &array); + explicit Matrix(const std::array &array); /** * @brief Element-wise matrix addition @@ -76,7 +75,7 @@ public: * @brief Calculate the eigenvalues for a square matrix * @param result a buffer to store the result into */ - void EigenValues(Matrix &result) const; + void EigenValues(Matrix &eigenvalues) const; /** * @brief Element-wise multiply the two matrices @@ -110,7 +109,7 @@ public: */ std::array &operator[](uint8_t row_index) const; - void operator=(Matrix &other); + Matrix &operator=(const Matrix &other); /** * @brief Get a row from the matrix @@ -174,10 +173,10 @@ template Matrix::Matrix(const std::array &array) { for (uint8_t row_idx{0}; row_idx < rows; row_idx++) { for (uint8_t column_idx{0}; column_idx < columns; column_idx++) { - uint16_t i = + uint16_t array_idx = static_cast(row_idx) + static_cast(column_idx); - if (i < array.size()) { - this->Get(row_idx, column_idx) = array[i]; + if (array_idx < array.size()) { + this->Get(row_idx, column_idx) = array[array_idx]; } else { this->Get(row_idx, column_idx) = 0; } @@ -311,7 +310,8 @@ void Matrix::EigenValues(Matrix &eigenvalues) const { Matrix Av{}; Matrix z{}; - float d = 0.0, d_old = 0.0; + float d = 0.0; + float d_old = 0.0; constexpr float convergence_value{1e-6}; constexpr uint16_t max_iterations{500}; @@ -344,7 +344,7 @@ void Matrix::EigenValues(Matrix &eigenvalues) const { } /* Check for convergence */ - if (fabs(d - d_old) < convergence_value) { + if (std::fabs(d - d_old) < convergence_value) { eigenvalues[0][k] = d; k++; d = 0.0; @@ -439,12 +439,12 @@ void Matrix::minorMatrix(Matrix &result, for (uint8_t row_iter{0}; row_iter < rows; row_iter++) { for (uint8_t column_iter{0}; column_iter < columns; column_iter++) { - uint16_t i = + uint16_t array_idx = static_cast(row_iter) + static_cast(column_iter); if (row_iter == row_idx || column_iter == column_idx) { continue; } - subArray[i] = this->Get(row_iter, column_iter); + subArray[array_idx] = this->Get(row_iter, column_iter); } } @@ -455,8 +455,8 @@ template void Matrix::adjugate(Matrix &result) const { for (uint8_t row_iter{0}; row_iter < rows; row_iter++) { for (uint8_t column_iter{0}; column_iter < columns; column_iter++) { - float sign = ((row_iter + 1) % 2) ? -1 : 1; - sign *= ((column_iter + 1) % 2) ? -1 : 1; + float sign = ((row_iter + 1) % 2) == 0 ? -1 : 1; + sign *= ((column_iter + 1) % 2) == 0 ? -1 : 1; result.Get(row_iter, column_iter) = this->Get(row_iter, column_iter) * sign; } diff --git a/unit-tests/matrix-tests.cpp b/unit-tests/matrix-tests.cpp index ddf2bbb..d504500 100644 --- a/unit-tests/matrix-tests.cpp +++ b/unit-tests/matrix-tests.cpp @@ -13,4 +13,17 @@ TEST_CASE("Factorials are computed", "[factorial]") { REQUIRE(Factorial(2) == 2); REQUIRE(Factorial(3) == 6); REQUIRE(Factorial(10) == 3628800); +} + +TEST_CASE("Matrix Addition", "Matrix::Add") { + Matrix<2, 2> mat1{std::array{1, 2, 3, 4}}; + Matrix<2, 2> mat2{std::array{5, 6, 7, 8}}; + + Matrix<2, 2> mat3{}; + mat1.Add(mat2, mat3); + + REQUIRE(mat3.Get(0, 0) == 6); + REQUIRE(mat3.Get(0, 1) == 8); + REQUIRE(mat3.Get(1, 0) == 10); + REQUIRE(mat3.Get(1, 1) == 12); } \ No newline at end of file