diff --git a/unit_tests/point.cpp b/unit_tests/point.cpp index a0cebc68551666a3df204bd27cb751d4d0fbc0b7..d29b99428a96775bc6a337cb82252ec3eca1d5ab 100644 --- a/unit_tests/point.cpp +++ b/unit_tests/point.cpp @@ -1,4 +1,5 @@ #include "simple/geom/vector.hpp" + #include <cmath> #include <cassert> #include <cstdio> @@ -671,117 +672,6 @@ void ExpressionTemplates() assert(z == vector(5,8)); } -// TODO: all the other ops -_- -void RowColumnVectorAndMatrix() -{ - - const vector row(0.1f, 0.2f, 0.3f); - - auto matrix = vector { - vector(1.0f, 2.0f, 3.0f), - vector(4.0f, 5.0f, 6.0f), - vector(7.0f, 8.0f, 9.0f), - }; - - assert(( matrix + row == - vector{ - vector(1.1f, 2.2f, 3.3f), - vector(4.1f, 5.2f, 6.3f), - vector(7.1f, 8.2f, 9.3f), - } - )); - assert(( row + matrix == - vector{ - vector(1.1f, 2.2f, 3.3f), - vector(4.1f, 5.2f, 6.3f), - vector(7.1f, 8.2f, 9.3f), - } - )); - matrix += row; - assert(( matrix == - vector{ - vector(1.1f, 2.2f, 3.3f), - vector(4.1f, 5.2f, 6.3f), - vector(7.1f, 8.2f, 9.3f), - } - )); - - const vector column{ - vector(0.1f), - vector(0.2f), - vector(0.3f), - }; - - matrix = vector { - vector(1.0f, 2.0f, 3.0f), - vector(4.0f, 5.0f, 6.0f), - vector(7.0f, 8.0f, 9.0f), - }; - - assert(( matrix + column == - vector{ - vector(1.1f, 2.1f, 3.1f), - vector(4.2f, 5.2f, 6.2f), - vector(7.3f, 8.3f, 9.3f), - } - )); - - assert(( column + matrix == - vector{ - vector(1.1f, 2.1f, 3.1f), - vector(4.2f, 5.2f, 6.2f), - vector(7.3f, 8.3f, 9.3f), - } - )); - - matrix += column; - assert(( matrix == - vector{ - vector(1.1f, 2.1f, 3.1f), - vector(4.2f, 5.2f, 6.2f), - vector(7.3f, 8.3f, 9.3f), - } - )); - - assert - ( - vector - ( - vector(10), - vector(20), - vector(30) - ) - + - vector(1,2,3) - == - vector - ( - vector(11, 12, 13), - vector(21, 22, 23), - vector(31, 32, 33) - ) - ); - - assert - ( - vector(1,2,3) - + - vector - ( - vector(10), - vector(20), - vector(30) - ) - == - vector - ( - vector(11, 12, 13), - vector(21, 22, 23), - vector(31, 32, 33) - ) - ); - -} void BoolBitwiseCorrections() { @@ -857,7 +747,6 @@ int main() ValueCategoryOfGet(); EmbracePromotion(); ExpressionTemplates(); - RowColumnVectorAndMatrix(); BoolBitwiseCorrections(); BoolReductionImplicitConversion(); OneDimentionalVectorDecays(); diff --git a/unit_tests/vector.cpp b/unit_tests/vector.cpp index 24425e26fa50711073baebdc339f7fedf200c090..6e4de386b84615a8a302a7203382dbdf29d16fd6 100644 --- a/unit_tests/vector.cpp +++ b/unit_tests/vector.cpp @@ -1,6 +1,7 @@ +#include "simple/geom/vector.hpp" + #include <fstream> #include <cassert> -#include "simple/geom/vector.hpp" using namespace simple; using geom::vector; @@ -140,6 +141,145 @@ void NonSquareMatrixMultiplication() } +// TODO: all the other ops -_- +void RowColumnVectorAndMatrix() +{ + + const vector row(0.1f, 0.2f, 0.3f); + + auto matrix = vector { + vector(1.0f, 2.0f, 3.0f), + vector(4.0f, 5.0f, 6.0f), + vector(7.0f, 8.0f, 9.0f), + }; + + assert(( matrix + row == + vector{ + vector(1.1f, 2.2f, 3.3f), + vector(4.1f, 5.2f, 6.3f), + vector(7.1f, 8.2f, 9.3f), + } + )); + assert(( row + matrix == + vector{ + vector(1.1f, 2.2f, 3.3f), + vector(4.1f, 5.2f, 6.3f), + vector(7.1f, 8.2f, 9.3f), + } + )); + matrix += row; + assert(( matrix == + vector{ + vector(1.1f, 2.2f, 3.3f), + vector(4.1f, 5.2f, 6.3f), + vector(7.1f, 8.2f, 9.3f), + } + )); + + const vector column{ + vector(0.1f), + vector(0.2f), + vector(0.3f), + }; + + matrix = vector { + vector(1.0f, 2.0f, 3.0f), + vector(4.0f, 5.0f, 6.0f), + vector(7.0f, 8.0f, 9.0f), + }; + + assert(( matrix + column == + vector{ + vector(1.1f, 2.1f, 3.1f), + vector(4.2f, 5.2f, 6.2f), + vector(7.3f, 8.3f, 9.3f), + } + )); + + assert(( column + matrix == + vector{ + vector(1.1f, 2.1f, 3.1f), + vector(4.2f, 5.2f, 6.2f), + vector(7.3f, 8.3f, 9.3f), + } + )); + + matrix += column; + assert(( matrix == + vector{ + vector(1.1f, 2.1f, 3.1f), + vector(4.2f, 5.2f, 6.2f), + vector(7.3f, 8.3f, 9.3f), + } + )); + + assert + ( + vector + ( + vector(10), + vector(20), + vector(30) + ) + + + vector(1,2,3) + == + vector + ( + vector(11, 12, 13), + vector(21, 22, 23), + vector(31, 32, 33) + ) + ); + + assert + ( + vector(1,2,3) + + + vector + ( + vector(10), + vector(20), + vector(30) + ) + == + vector + ( + vector(11, 12, 13), + vector(21, 22, 23), + vector(31, 32, 33) + ) + ); + +} + +void PolynomialMultiplication() +{ + const vector p1(1, -1, 3, 2); + + const vector p2{ + vector(4), + vector(2), + vector(1), + vector(-5), + }; + + // get a matrix all combination + const auto all_combos = p1 * p2; + + constexpr auto degree = std::max(p1.dimensions, p2.dimensions); + auto result = vector<int, degree + degree - 1>{}; + + // sum the secondary diagonals of the matrix + constexpr size_t x = -1; + result += all_combos[0].mix<0,1,2,3,x,x,x>(0); + result += all_combos[1].mix<x,0,1,2,3,x,x>(0); + result += all_combos[2].mix<x,x,0,1,2,3,x>(0); + result += all_combos[3].mix<x,x,x,0,1,2,3>(0); + + assert(result == vector(4,-2,11,8,12,-13,-10)); +} + constexpr bool Constexprness() { constexpr int3x3 A{}, B{}; @@ -154,6 +294,8 @@ int main() MatrixVectorMultiplication(); DotProduct(); NonSquareMatrixMultiplication(); + RowColumnVectorAndMatrix(); + PolynomialMultiplication(); static_assert(Constexprness()); return 0; }