From 719fc4d28a61ee8c4f875b251e35f3a3f4626c23 Mon Sep 17 00:00:00 2001 From: Cynopolis Date: Sat, 7 Jun 2025 10:58:59 -0400 Subject: [PATCH] Adjusted timing test repetition and added QR decomposition --- .gitea/workflows/Merge-Checker.yaml | 2 +- unit-tests/matrix-timing-tests.cpp | 34 ++++++++++++++++++----------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/.gitea/workflows/Merge-Checker.yaml b/.gitea/workflows/Merge-Checker.yaml index 886a17f..51d29df 100644 --- a/.gitea/workflows/Merge-Checker.yaml +++ b/.gitea/workflows/Merge-Checker.yaml @@ -41,7 +41,7 @@ jobs: mkdir -p unit-tests/timing-results if [ -x build/unit-tests/matrix-timing-tests ]; then echo "Running matrix-timing-tests with timing" - /usr/bin/time -v build/unit-tests/matrix-timing-tests -d yes &> unit-tests/timing-results/matrix-timing-tests.txt + ./build/unit-tests/matrix-timing-tests -d yes &> unit-tests/timing-results/matrix-timing-tests.txt cat unit-tests/timing-results/matrix-timing-tests.txt else echo "matrix-timing-tests executable not found or not executable" diff --git a/unit-tests/matrix-timing-tests.cpp b/unit-tests/matrix-timing-tests.cpp index 9c01347..0722e0c 100644 --- a/unit-tests/matrix-timing-tests.cpp +++ b/unit-tests/matrix-timing-tests.cpp @@ -8,6 +8,7 @@ // any other libraries #include #include +#include // basically re-run all of the matrix tests with huge matrices and time the // results. @@ -29,13 +30,13 @@ TEST_CASE("Timing Tests", "Matrix") { Matrix<4, 4> mat5{}; SECTION("Addition") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1 + mat2; } } SECTION("Subtraction") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1 - mat2; } } @@ -47,19 +48,19 @@ TEST_CASE("Timing Tests", "Matrix") { } SECTION("Scalar Multiplication") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1 * 3; } } SECTION("Element Multiply") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat1.ElementMultiply(mat2, mat3); } } SECTION("Element Divide") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat1.ElementDivide(mat2, mat3); } } @@ -68,52 +69,59 @@ TEST_CASE("Timing Tests", "Matrix") { // what about matrices of 0,0 or 1,1? // minor matrix for 2x2 matrix Matrix<49, 49> minorMat1{}; - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat1.MinorMatrix(minorMat1, 0, 0); } } SECTION("Determinant") { - for (uint32_t i{0}; i < 100000; i++) { + for (uint32_t i{0}; i < 1000000; i++) { float det1 = mat4.Det(); } } SECTION("Matrix of Minors") { - for (uint32_t i{0}; i < 100000; i++) { + for (uint32_t i{0}; i < 1000000; i++) { mat4.MatrixOfMinors(mat5); } } SECTION("Invert") { - for (uint32_t i{0}; i < 100000; i++) { + for (uint32_t i{0}; i < 1000000; i++) { mat5 = mat4.Invert(); } }; SECTION("Transpose") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1.Transpose(); } } SECTION("Normalize") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1 / mat1.EuclideanNorm(); } } SECTION("GET ROW") { Matrix<1, 50> mat1Rows{}; - for (uint32_t i{0}; i < 1000000; i++) { + for (uint32_t i{0}; i < 100000000; i++) { mat1.GetRow(0, mat1Rows); } } SECTION("GET COLUMN") { Matrix<50, 1> mat1Columns{}; - for (uint32_t i{0}; i < 1000000; i++) { + for (uint32_t i{0}; i < 100000000; i++) { mat1.GetColumn(0, mat1Columns); } } + + SECTION("QR Decomposition") { + Matrix<50, 50> Q, R{}; + for (uint32_t i{0}; i < 500; i++) { + mat1.QRDecomposition(Q, R); + } + } } \ No newline at end of file