From c04ee29e82a000fb1ed77f524b9dd165db70df54 Mon Sep 17 00:00:00 2001 From: Cynopolis Date: Tue, 10 Dec 2024 22:42:02 -0500 Subject: [PATCH] Got unit tests compiling --- .../index/Matrix.hpp.B9C1D36F0ACA1714.idx | Bin 0 -> 5336 bytes .../matrix-tests.cpp.88D512D6040A12A3.idx | Bin 0 -> 3174 bytes .vscode/launch.json | 33 ++++++++ .vscode/settings.json | 74 ++++++++++++++++++ CMakeLists.txt | 4 + Matrix.hpp | 74 ++++++++++++------ unit-tests/matrix-tests.cpp | 9 ++- 7 files changed, 169 insertions(+), 25 deletions(-) create mode 100644 .cache/clangd/index/Matrix.hpp.B9C1D36F0ACA1714.idx create mode 100644 .cache/clangd/index/matrix-tests.cpp.88D512D6040A12A3.idx create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json diff --git a/.cache/clangd/index/Matrix.hpp.B9C1D36F0ACA1714.idx b/.cache/clangd/index/Matrix.hpp.B9C1D36F0ACA1714.idx new file mode 100644 index 0000000000000000000000000000000000000000..34b906c8263a0bb74a85f68f71a823cbecc34062 GIT binary patch literal 5336 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/matrix-tests.cpp.88D512D6040A12A3.idx b/.cache/clangd/index/matrix-tests.cpp.88D512D6040A12A3.idx new file mode 100644 index 0000000000000000000000000000000000000000..f7707e067e55300c1dc9039859394c655b473160 GIT binary patch literal 3174 zcmWIYbaRX2VPJ4h@vO*AElFfyU|`Dtz|5PufOA*uYLky%+e{KYqdtC~e#tjUevz%p#p=4cjl#wZYzy|}op63Ca`x24 zj)PMC>y-Yi*t+${le^LmmYd6^T|6^< zf*pk)tXUeYBE4nvL+fa%MDNyHZ5llXKkCYV)-22U*V?0JrPg}0p{>ef>s3Le)+3=x zRkg1erXN>6Y*nGN<>q=)*E zQgiGp?`-rxyhUtzab<4OY+$Ia3Fxr#TzgZNmqCDmL4=EeixW&RfI=Mz9;badwf&%? zDh~rMHtEct9-M7WS0Z>A_<_=Fyli4%0-~3JVV)TK$BsL;={yX4Kxsh+K~69MGrajk z*j2&br5U^og4m=Pic-^xxwse@W+yIAaD7KHlusknTI|NQf^u8 zMt6%9j_hHSh}}egix-zj9VxO};ej{7KaMzXHAIcup9?jb$WPgz{0YlVEF$Ekb6A1E z#)VQ4@QAQ0uxr93c|^FmxP@U!kVk}viwB9v%f*Yt-PKs2o7> zK;;08=cvYO{<-*OKHbx@*?Y|mru>_0=x*_)->@)+h7rPUd{P+21L=Vc|UC=EXd~?9aue3@hh>JXJ0u1drTm zPLNAb8kTv0SxQz=3&A6=Xjq#UGBv-}Zynte!iAtmi0Rb1M!%d{V`7@hmVE3P}pdA(<;F4ChVt zJ5~_4M(hzIkBAt%7#B=Ys?JZos!J!H;n0DGTW^KzYfzDLKIACj%D`4-+#BD?5iM8z&<-0M$$2{{R30 literal 0 HcmV?d00001 diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..6cb6f46 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Matrix Tests", + "type": "cppdbg", + "request": "launch", + "program": "enter program name, for example ${workspaceFolder}/build/unit-tests/matrix-tests", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8344eb9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,74 @@ +{ + "C_Cpp.intelliSenseEngine": "default", + "clangd.arguments": [ + "--include-directory=build/unit-tests" + ], + "C_Cpp.default.intelliSenseMode": "linux-gcc-x64", + "files.associations": { + "*.h": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "regex": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "future": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "typeinfo": "cpp", + "variant": "cpp" + } +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 6567852..59ec225 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,9 @@ add_subdirectory(unit-tests) set(CMAKE_CXX_STANDARD 11) +add_compile_options(-fdiagnostics-color=always) + +# Vector3d add_library(Vector3D STATIC Vector3D.hpp @@ -19,6 +22,7 @@ target_include_directories(Vector3D PUBLIC include ) +# Matrix add_library(Matrix STATIC Matrix.hpp diff --git a/Matrix.hpp b/Matrix.hpp index 3bc9bc5..353b34b 100644 --- a/Matrix.hpp +++ b/Matrix.hpp @@ -10,7 +10,16 @@ template class Matrix { public: Matrix(); - explicit Matrix(const std::array &array); + /** + * @brief Initialize a matrix with an array + */ + Matrix(const std::array &array); + + /** + * @brief Initialize a matrix directly with any number of arguments + */ + // template + // Matrix(Args&&... args); /** * @brief Element-wise matrix addition @@ -101,15 +110,23 @@ public: * @param column the column index of the element * @return The value of the element you want to get */ - float &Get(uint8_t row_index, uint8_t column_index) const; + float Get(uint8_t row_index, uint8_t column_index) const; /** * @brief get the specified row of the matrix returned as a reference to the * internal array */ - std::array &operator[](uint8_t row_index) const; + std::array &operator[](uint8_t row_index){ + return this->matrix[row_index]; + } - Matrix &operator=(const Matrix &other); + Matrix &operator=(const Matrix &other){ + for(uint8_t row_idx{0}; row_idx < rows; row_idx++){ + for(uint8_t column_idx{0}; column_idx < columns; column_idx++){ + this->matrix[row_idx][column_idx] = other.Get(row_idx, column_idx); + } + } + } /** * @brief Get a row from the matrix @@ -170,26 +187,37 @@ template Matrix::Matrix() { } template -Matrix::Matrix(const std::array &array) { +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 array_idx = static_cast(row_idx) + static_cast(column_idx); if (array_idx < array.size()) { - this->Get(row_idx, column_idx) = array[array_idx]; + this->matrix[row_idx][column_idx] = array[array_idx]; } else { - this->Get(row_idx, column_idx) = 0; + this->matrix[row_idx][column_idx] = 0; } } } } +// template +// template +// Matrix::Matrix(Args&&... args){ + +// // Initialize a std::array with the arguments +// std::array values = {args...}; + +// // now call our other constructor which can take this array as an argument +// this = Matrix{values}; +// } + template void Matrix::Add(const Matrix &other, Matrix &result) const { - for (uint8_t row{0}; row < rows; row++) { - for (uint8_t column{0}; column < columns; column++) { - result.Get(row, column) = this->Get(row, column) + other.Get(row, column); + for (uint8_t row_idx{0}; row_idx < rows; row_idx++) { + for (uint8_t column_idx{0}; column_idx < columns; column_idx++) { + result[row_idx][column_idx] = this->Get(row_idx, column_idx) + other.Get(row_idx, column_idx); } } } @@ -197,9 +225,9 @@ void Matrix::Add(const Matrix &other, template void Matrix::Subtract(const Matrix &other, Matrix &result) const { - for (uint8_t row{0}; row < rows; row++) { - for (uint8_t column{0}; column < columns; column++) { - result.Get(row, column) = this->Get(row, column) - other.Get(row, column); + for (uint8_t row_idx{0}; row_idx < rows; row_idx++) { + for (uint8_t column_idx{0}; column_idx < columns; column_idx++) { + result[row_idx][column_idx] = this->Get(row_idx, column_idx) - other.Get(row_idx, column_idx); } } } @@ -222,7 +250,7 @@ void Matrix::Multiply( other_column.Transpose(other_column_t); // the result's index is equal to the dot product of these two vectors - result.Get(row_idx, column_idx) = + result[row_idx][column_idx] = this->dotProduct(this_row, other_column_t); } } @@ -233,7 +261,7 @@ void Matrix::Multiply(float scalar, Matrix &result) const { for (uint8_t row_idx{0}; row_idx < rows; row_idx++) { for (uint8_t column_idx{0}; column_idx < columns; column_idx++) { - result.Get(row_idx, column_idx) = this->Get(row_idx, column_idx) * scalar; + result[row_idx][column_idx] = this->Get(row_idx, column_idx) * scalar; } } } @@ -273,7 +301,7 @@ template void Matrix::Transpose(Matrix &result) const { for (uint8_t column_idx{0}; column_idx < rows; column_idx++) { for (uint8_t row_idx{0}; row_idx < columns; row_idx++) { - result.Get(row_idx, column_idx) = this->Get(column_idx, row_idx); + result[row_idx][column_idx] = this->Get(column_idx, row_idx); } } } @@ -360,7 +388,7 @@ void Matrix::ElementMultiply( const Matrix &other, Matrix &result) const { for (uint8_t row_idx{0}; row_idx < rows; row_idx++) { for (uint8_t column_idx{0}; column_idx < columns; column_idx++) { - result.Get(row_idx, column_idx) = + result[row_idx][column_idx] = this->Get(row_idx, column_idx) * other.Get(row_idx, column_idx); } } @@ -371,14 +399,14 @@ void Matrix::ElementDivide(const Matrix &other, Matrix &result) const { for (uint8_t row_idx{0}; row_idx < rows; row_idx++) { for (uint8_t column_idx{0}; column_idx < columns; column_idx++) { - result.Get(row_idx, column_idx) = + result[row_idx][column_idx] = this->Get(row_idx, column_idx) / other.Get(row_idx, column_idx); } } } template -float &Matrix::Get(uint8_t row_index, +float Matrix::Get(uint8_t row_index, uint8_t column_index) const { return this->matrix[row_index][column_index]; } @@ -393,7 +421,7 @@ template void Matrix::GetColumn(uint8_t column_index, Matrix &column) const { for (uint8_t row_idx{0}; row_idx < rows; row_idx++) { - column.Get(0, column_index) = this->Get(row_idx, column_index); + column[0][column_index] = this->Get(row_idx, column_index); } } @@ -426,7 +454,7 @@ void Matrix::matrixOfMinors( for (uint8_t row_idx{0}; row_idx < rows; row_idx++) { for (uint8_t column_idx{0}; column_idx < columns; column_idx++) { this->minorMatrix(minorMatrix, row_idx, column_idx); - result.Get(row_idx, column_idx) = minorMatrix.Det(); + result[row_idx][column_idx] = minorMatrix.Det(); } } } @@ -457,7 +485,7 @@ void Matrix::adjugate(Matrix &result) const { for (uint8_t column_iter{0}; column_iter < columns; column_iter++) { float sign = ((row_iter + 1) % 2) == 0 ? -1 : 1; sign *= ((column_iter + 1) % 2) == 0 ? -1 : 1; - result.Get(row_iter, column_iter) = + result[row_iter][column_iter] = this->Get(row_iter, column_iter) * sign; } } @@ -480,7 +508,7 @@ void Matrix::normalize(Matrix &result) const { for (uint8_t column_idx{0}; column_idx < rows; column_idx++) { for (uint8_t row_idx{0}; row_idx < columns; row_idx++) { - result.Get(row_idx, column_idx) = this->Get(row_idx, column_idx) / sum; + result[row_idx][column_idx] = this->Get(row_idx, column_idx) / sum; } } } \ No newline at end of file diff --git a/unit-tests/matrix-tests.cpp b/unit-tests/matrix-tests.cpp index d504500..c06a1f6 100644 --- a/unit-tests/matrix-tests.cpp +++ b/unit-tests/matrix-tests.cpp @@ -4,6 +4,9 @@ // include the module you're going to test next #include "Matrix.hpp" +// any other libraries +#include + unsigned int Factorial(unsigned int number) { return number <= 1 ? number : Factorial(number - 1) * number; } @@ -16,8 +19,10 @@ TEST_CASE("Factorials are computed", "[factorial]") { } 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}}; + std::array arr1{1, 2, 3, 4}; + std::array arr2{5, 6, 7, 8}; + Matrix<2, 2> mat1{arr1}; + Matrix<2, 2> mat2{arr2}; Matrix<2, 2> mat3{}; mat1.Add(mat2, mat3);