diff --git a/MathTestFPU/test.cpp b/MathTestFPU/test.cpp
index 84adde6..7cb1c53 100644
--- a/MathTestFPU/test.cpp
+++ b/MathTestFPU/test.cpp
@@ -343,4 +343,135 @@ namespace VectorTests
         EXPECT_TRUE(PMath::Project(v0, v1) == PMath::Vector3(3.657324613f, 1.792806183f, 5.163281807f));
         EXPECT_TRUE(PMath::Reject(v0, v1) == PMath::Vector3(-1.257324613f, 1.307193817f, 0.436718193f));
     }
+
+    TEST(Vector4, OperatorTests)
+    {
+        PMath::Vector4 v0(2.4f, 3.1f, 5.6f, -3.7f);
+        PMath::Vector4 v1(5.1f, 2.5f, 7.2f, 2.6f);
+
+
+        v0 += v1;
+        EXPECT_TRUE(v0 == PMath::Vector4(7.5f, 5.6f, 12.8f, -1.1f));
+
+        v0 -= v1;
+        EXPECT_TRUE(v0 == PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f));
+
+        v0 *= v1;
+        EXPECT_TRUE(v0 == PMath::Vector4(12.24f, 7.75f, 40.32f, -9.62f));
+
+        v0 /= v1;
+        EXPECT_TRUE(v0 == PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f));
+
+
+        v0 += 4.0f;
+        EXPECT_TRUE(v0 == PMath::Vector4(6.4f, 7.1f, 9.6f, 0.3f));
+
+        v0 -= 4.0f;
+        EXPECT_TRUE(v0 == PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f));
+
+        v0 *= 4.0f;
+        EXPECT_TRUE(v0 == PMath::Vector4(9.6f, 12.4f, 22.4f, -14.8f));
+
+        v0 /= 4.0f;
+        EXPECT_TRUE(v0 == PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f));
+
+        // ------------------------------------------
+
+        PMath::Vector4 r;
+
+        r = v0 + v1;
+        EXPECT_TRUE(r == PMath::Vector4(7.5f, 5.6f, 12.8f, -1.1f));
+
+        r = v0 - v1;
+        EXPECT_TRUE(r == PMath::Vector4(-2.7f, 0.6f, -1.6f, -6.3f));
+
+        r = v0 * v1;
+        EXPECT_TRUE(r == PMath::Vector4(12.24f, 7.75f, 40.32f, -9.62f));
+
+        r = v0 / v1;
+        EXPECT_TRUE(r == PMath::Vector4(0.470588f, 1.24f, 0.777777777777f, -1.423076923076f));
+
+
+
+        r = v0 + 4.0f;
+        EXPECT_TRUE(r == PMath::Vector4(6.4f, 7.1f, 9.6f, 0.3f));
+
+        r = v0 - 4.0f;
+        EXPECT_TRUE(r == PMath::Vector4(-1.6f, -0.9f, 1.6f, -7.7f));
+
+        r = v0 * 4.0f;
+        EXPECT_TRUE(r == PMath::Vector4(9.6f, 12.4f, 22.4f, -14.8f));
+
+        r = v0 / 4.0f;
+        EXPECT_TRUE(r == PMath::Vector4(0.6f, 0.775f, 1.4f, -0.925f));
+
+        // --------------------------------------------
+
+        EXPECT_TRUE(r != PMath::Vector4(0.480588f, 3.24f, 34.5f, 73.3f));
+
+        EXPECT_FALSE(r != PMath::Vector4(0.6f, 0.775f, 1.4f, -0.925f));
+    }
+
+    TEST(Vector4, FunctionTest)
+    {
+        PMath::Vector4 v0(2.4f, 3.1f, 5.6f, -3.7f);
+        PMath::Vector4 v1(5.1f, 2.5f, 7.2f, 2.6f);
+        PMath::Vector4 n(0.535037f, 0.262273f, 0.755346f, 0.272764f);
+
+
+        EXPECT_FLOAT_EQ(PMath::Magnitude(v0), 7.773030297f);
+
+        EXPECT_FLOAT_EQ(PMath::SqrMagnitude(v0), 60.42f);
+
+        EXPECT_FLOAT_EQ(PMath::Angle(v0, v1), 46.83191757_deg);
+
+        EXPECT_FLOAT_EQ(PMath::CosineAngle(v0, v1), 0.68414091f);
+
+        EXPECT_FLOAT_EQ(PMath::Magnitude(PMath::NormalizeV(v0)), 1.0f);
+
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        EXPECT_FLOAT_EQ(PMath::DotP(v0, v1), 50.69f);
+        
+        EXPECT_TRUE(PMath::MaxV(v0, v1) == PMath::Vector4(5.1f, 3.1f, 7.2f, 2.6f)) << PMath::ToString(v0);
+
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        EXPECT_TRUE(PMath::MinV(v0, v1) == PMath::Vector4(2.4f, 2.5f, 5.6f, -3.7f)) << PMath::ToString(v0);
+
+        EXPECT_TRUE(PMath::NegateV(v0) == PMath::Vector4(-2.4f, -2.5f, -5.6f, 3.7f)) << PMath::ToString(v0);
+        
+        EXPECT_TRUE(PMath::CompInverseV(v0) == PMath::Vector4(1.0f / -2.4f, 1.0f / -2.5f, 1.0f / -5.6f, 1.0f / 3.7f)) << PMath::ToString(v0);
+        
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        EXPECT_TRUE(PMath::ClampToMagnitudeV(v0, 6.0f, 7.0f) == PMath::Vector4(2.1613193f, 2.791704135f, 5.043078439f, -3.332034f)) << PMath::ToString(v0);
+
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        EXPECT_TRUE(PMath::ScaleToMagnitudeV(v0, 7.0f) == PMath::Vector4(2.1613193f, 2.791704135f, 5.043078439f, -3.332034f)) << PMath::ToString(v0);
+
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        EXPECT_TRUE(PMath::ReflectV(v0, n) == PMath::Vector4(3.290488f, -0.310545f, 2.433628f, 6.601034f));
+        
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        EXPECT_TRUE(PMath::ProjectV(v0, v1) == PMath::Vector4(2.845245432533568f, 1.394728153202729f, 4.016817081223861f, 1.450517279330839f));
+        
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        EXPECT_TRUE(PMath::RejectV(v0, v1) == PMath::Vector4(-0.445245432533f, 1.705271846797271f, 1.583182918776139f, -5.150517279330839f));
+
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        EXPECT_TRUE(PMath::PerspectiveDivideV(v0) == PMath::Vector4(1.0f / 2.4f, 1.0f / 3.1f, 1.0f / 5.6f, 1.0f / -3.7f));
+
+
+        v0 = PMath::Vector4(2.4f, 3.1f, 5.6f, -3.7f);
+        // EXPECT_FLOAT_EQ(PMath::SqrMagnitude(PMath::Normalize(v0)), 1.0f);
+        // EXPECT_TRUE(PMath::Max(v0, v1) == PMath::Vector4(5.1f, 3.1f, 7.2f, 2.6f));
+        // EXPECT_TRUE(PMath::Min(v0, v1) == PMath::Vector4(2.4f, 2.5f, 5.6f, -3.7f));
+        // EXPECT_TRUE(PMath::ClampToMagnitude(v0, 6.0f, 7.0f) == PMath::Vector4(2.1613193f, 2.791704135f, 5.043078439f, -3.332034f)) << PMath::ToString(v0);
+        // EXPECT_TRUE(PMath::ScaleToMagnitude(v0, 7.0f) == PMath::Vector4(2.1613193f, 2.791704135f, 5.043078439f, -3.332034f)) << PMath::ToString(v0);
+        // EXPECT_TRUE(PMath::Reflect(v0, n) == PMath::Vector4(3.290488f, -0.310545f, 2.433628f, 6.601034f));
+        // EXPECT_TRUE(PMath::Project(v0, v1) == PMath::Vector4(2.845245432533568f, 1.394728153202729f, 4.016817081223861f, 1.450517279330839f));
+        // EXPECT_TRUE(PMath::Reject(v0, v1) == PMath::Vector4(2.845245432533568f, 1.394728153202729f, 4.016817081223861f, 1.450517279330839f));
+        // EXPECT_TRUE(PMath::PerspectiveDivide(v0) == PMath::Vector4(1.0f / 2.4f, 1.0f / 3.1f, 1.0f / 5.6f, 1.0f / -3.7f));
+
+        // EXPECT_TRUE(PMath::CompInverseV(v0) == PMath::Vector4(1.0f / -2.4f, 1.0f / -2.5f, 1.0f / -5.6f, 1.0f / 3.7f));
+    }
+
 }
\ No newline at end of file