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;
 }