diff --git a/Angle.cpp b/Angle.cpp index d000f6b..4a039ce 100644 --- a/Angle.cpp +++ b/Angle.cpp @@ -73,11 +73,11 @@ float Angle::SineRuleAngle(float a, float beta, float b) { */ //---------------------- -template <> Angle2 Angle2::Rad2Deg = 57.29578F; -template <> Angle2 Angle2::Deg2Rad = 0.0174532924F; - template <> Angle2 Angle2::pi = 3.1415927410125732421875F; +template <> Angle2 Angle2::Rad2Deg = 360.0f / (pi * 2); +template <> Angle2 Angle2::Deg2Rad = (pi * 2) / 360.0f; + template <> Angle2 Angle2::Normalize(Angle2 angle) { float angleValue = angle; if (!isfinite(angleValue)) diff --git a/Matrix.cpp b/Matrix.cpp index 7115dbe..7a67504 100644 --- a/Matrix.cpp +++ b/Matrix.cpp @@ -1,6 +1,12 @@ #include "Matrix.h" template <> MatrixOf::MatrixOf(unsigned int rows, unsigned int cols) { + if (rows <= 0 || cols <= 0) { + this->rows = 0; + this->cols = 0; + this->data = nullptr; + return; + } this->rows = rows; this->cols = cols; @@ -15,8 +21,8 @@ template <> MatrixOf::MatrixOf(Vector3 v) : MatrixOf(3, 1) { } template <> -void MatrixOf::Multiply(const MatrixOf *m1, MatrixOf *m2, - MatrixOf *r) { +void MatrixOf::Multiply(const MatrixOf *m1, + const MatrixOf *m2, MatrixOf *r) { for (unsigned int rowIx1 = 0; rowIx1 < m1->rows; rowIx1++) { for (unsigned int colIx2 = 0; colIx2 < m2->cols; colIx2++) { unsigned int rDataIx = colIx2 * m2->cols + rowIx1; diff --git a/Matrix.h b/Matrix.h index adaa8e2..c8ed8ca 100644 --- a/Matrix.h +++ b/Matrix.h @@ -43,8 +43,11 @@ public: } } - static void Multiply(const MatrixOf *m1, MatrixOf *m2, MatrixOf *r); - void Multiply(MatrixOf *m, MatrixOf *r) { Multiply(this, m, r); } + static void Multiply(const MatrixOf *m1, const MatrixOf *m2, + MatrixOf *r); + void Multiply(const MatrixOf *m, MatrixOf *r) const { + Multiply(this, m, r); + } static Vector3 Multiply(const MatrixOf *m, Vector3 v); Vector3 operator*(const Vector3 v) const; diff --git a/Vector2.cpp b/Vector2.cpp index 22c039d..b373299 100644 --- a/Vector2.cpp +++ b/Vector2.cpp @@ -120,12 +120,13 @@ float Vector2::SignedAngle(Vector2 from, Vector2 to) { } Vector2 Vector2::Rotate(Vector2 v, float angle) { + float angleRad = angle * Angle::Deg2Rad; #if defined(AVR) - float sinValue = sin(angle * Angle::Deg2Rad); - float cosValue = cos(angle * Angle::Deg2Rad); + float sinValue = sin(angleRad); + float cosValue = cos(angleRad); // * Angle::Deg2Rad); #else - float sinValue = (float)sinf(angle * Angle::Deg2Rad); - float cosValue = (float)cosf(angle * Angle::Deg2Rad); + float sinValue = (float)sinf(angleRad); + float cosValue = (float)cosf(angleRad); #endif float tx = v.x; diff --git a/test/Matrix_test.cc b/test/Matrix_test.cc index c3b0de6..26fe0e0 100644 --- a/test/Matrix_test.cc +++ b/test/Matrix_test.cc @@ -1,14 +1,13 @@ #if GTEST #include -#include #include +#include #include "Matrix.h" TEST(MatrixSingle, Init) { // zero - float data0[] = {}; - MatrixOf m0 = MatrixOf(0, 0, data0); + MatrixOf m0 = MatrixOf(0, 0); // one float data1[] = {1.0F}; @@ -19,15 +18,14 @@ TEST(MatrixSingle, Init) { MatrixOf m2 = MatrixOf(2, 2, data2); // negative - MatrixOf m_1 = MatrixOf(-1, -1, data0); + MatrixOf m_1 = MatrixOf(-1, -1); } TEST(MatrixSingle, Transpose) { float data1[] = {1.0F}; MatrixOf m = MatrixOf(1, 1, data1); - float data2[] = {1.0F}; - MatrixOf r = MatrixOf(1, 1, data2); + MatrixOf r = MatrixOf(1, 1); m.Transpose(&r); // 2 x 2 diff --git a/test/Vector2_test.cc b/test/Vector2_test.cc index e5f0391..83c52ce 100644 --- a/test/Vector2_test.cc +++ b/test/Vector2_test.cc @@ -1,429 +1,465 @@ #if GTEST #include -#include #include +#include #include "Vector2.h" #define FLOAT_INFINITY std::numeric_limits::infinity() TEST(Vector2, Magnitude) { - Vector2 v = Vector2(1, 2); - float m = 0; + Vector2 v = Vector2(1, 2); + float m = 0; - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, 2.236068F) << "v.magnitude 1 2"; + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, 2.236068F) << "v.magnitude 1 2"; - m = Vector2::Magnitude(v); - EXPECT_FLOAT_EQ(m, 2.236068F) << "Vector2::Magnitude 1 2"; + m = Vector2::Magnitude(v); + EXPECT_FLOAT_EQ(m, 2.236068F) << "Vector2::Magnitude 1 2"; - v = Vector2(-1, -2); - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, 2.236068F) << "v.magnitude -1 -2"; + v = Vector2(-1, -2); + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, 2.236068F) << "v.magnitude -1 -2"; - v = Vector2(0, 0); - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, 0) << "v.magnitude 0 0 "; + v = Vector2(0, 0); + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, 0) << "v.magnitude 0 0 "; - if (std::numeric_limits::is_iec559) { - v = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.magnitude INFINITY INFINITY "; + if (std::numeric_limits::is_iec559) { + v = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.magnitude INFINITY INFINITY "; - v = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.magnitude -INFINITY -INFINITY "; - } + v = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.magnitude -INFINITY -INFINITY "; + } } TEST(Vector2, SqrMagnitude) { - Vector2 v = Vector2(1, 2); - float m = 0; + Vector2 v = Vector2(1, 2); + float m = 0; - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, 5) << "v.sqrMagnitude 1 2"; + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, 5) << "v.sqrMagnitude 1 2"; - m = Vector2::SqrMagnitude(v); - EXPECT_FLOAT_EQ(m, 5) << "Vector2::SqrMagnitude 1 2"; + m = Vector2::SqrMagnitude(v); + EXPECT_FLOAT_EQ(m, 5) << "Vector2::SqrMagnitude 1 2"; - v = Vector2(-1, -2); - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, 5) << "v.sqrMagnitude -1 -2"; + v = Vector2(-1, -2); + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, 5) << "v.sqrMagnitude -1 -2"; - v = Vector2(0, 0); - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, 0) << "v.sqrMagnitude 0 0 "; + v = Vector2(0, 0); + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, 0) << "v.sqrMagnitude 0 0 "; - if (std::numeric_limits::is_iec559) { - v = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.sqrMagnitude INFINITY INFINITY "; + if (std::numeric_limits::is_iec559) { + v = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.sqrMagnitude INFINITY INFINITY "; - v = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.sqrMagnitude -INFINITY -INFINITY "; - } + v = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.sqrMagnitude -INFINITY -INFINITY "; + } } - TEST(Vector2, Normalize) { - bool r = false; + bool r = false; - Vector2 v1 = Vector2(0, 2); - Vector2 v = Vector2::zero; + Vector2 v1 = Vector2(0, 2); + Vector2 v = Vector2::zero; - v = v1.normalized(); - EXPECT_TRUE(v == Vector2(0, 1)) << "v.normalized 0 2"; + v = v1.normalized(); + EXPECT_TRUE(v == Vector2(0, 1)) << "v.normalized 0 2"; - v = Vector2::Normalize(v1); - EXPECT_TRUE(v == Vector2(0, 1)) << "Vector3::Normalize 0 2"; + v = Vector2::Normalize(v1); + EXPECT_TRUE(v == Vector2(0, 1)) << "Vector3::Normalize 0 2"; - v1 = Vector2(0, -2); - v = v1.normalized(); - EXPECT_TRUE(v == Vector2(0, -1)) << "v.normalized 0 -2"; + v1 = Vector2(0, -2); + v = v1.normalized(); + EXPECT_TRUE(v == Vector2(0, -1)) << "v.normalized 0 -2"; - v1 = Vector2(0, 0); - v = v1.normalized(); - EXPECT_TRUE(v == Vector2(0, 0)) << "v.normalized 0 0"; + v1 = Vector2(0, 0); + v = v1.normalized(); + EXPECT_TRUE(v == Vector2(0, 0)) << "v.normalized 0 0"; - if (std::numeric_limits::is_iec559) { - v1 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - v = v1.normalized(); - r = isnan(v.x) && isnan(v.y); - EXPECT_TRUE(r) << "v.normalized INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v1 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + v = v1.normalized(); + r = isnan(v.x) && isnan(v.y); + EXPECT_TRUE(r) << "v.normalized INFINITY INFINITY"; - v1 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - v = v1.normalized(); - r = isnan(v.x) && isnan(v.y); - EXPECT_TRUE(r) << "v.normalized -INFINITY -INFINITY"; - - } + v1 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + v = v1.normalized(); + r = isnan(v.x) && isnan(v.y); + EXPECT_TRUE(r) << "v.normalized -INFINITY -INFINITY"; + } } TEST(Vector2, Negate) { - bool r = false; + bool r = false; - Vector2 v1 = Vector2(4, 5); - Vector2 v = Vector2::zero; + Vector2 v1 = Vector2(4, 5); + Vector2 v = Vector2::zero; - v = -v1; - EXPECT_TRUE(v == Vector2(-4, -5)) << "- 4 5"; + v = -v1; + EXPECT_TRUE(v == Vector2(-4, -5)) << "- 4 5"; - v1 = Vector2(-4, -5); - v = -v1; - EXPECT_TRUE(v == Vector2(4, 5)) << "- -4 -5"; + v1 = Vector2(-4, -5); + v = -v1; + EXPECT_TRUE(v == Vector2(4, 5)) << "- -4 -5"; - v1 = Vector2(0, 0); - v = -v1; - EXPECT_TRUE(v == Vector2(0, 0)) << "- 0 0"; + v1 = Vector2(0, 0); + v = -v1; + EXPECT_TRUE(v == Vector2(0, 0)) << "- 0 0"; - if (std::numeric_limits::is_iec559) { - v1 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - v = -v1; - EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) << "- INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v1 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + v = -v1; + EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) + << "- INFINITY INFINITY"; - v1 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - v = -v1; - EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) << "- -INFINITY -INFINITY"; - } + v1 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + v = -v1; + EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) + << "- -INFINITY -INFINITY"; + } } TEST(Vector2, Subtract) { - bool r = false; + bool r = false; - Vector2 v1 = Vector2(4, 5); - Vector2 v2 = Vector2(1, 2); - Vector2 v = Vector2::zero; + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + Vector2 v = Vector2::zero; - v = v1 - v2; - EXPECT_TRUE(v == Vector2(3, 3)) << "4 5 - 1 2"; + v = v1 - v2; + EXPECT_TRUE(v == Vector2(3, 3)) << "4 5 - 1 2"; - v2 = Vector2(-1, -2); - v = v1 - v2; - EXPECT_TRUE(v == Vector2(5, 7)) << "4 5 - -1 -2"; + v2 = Vector2(-1, -2); + v = v1 - v2; + EXPECT_TRUE(v == Vector2(5, 7)) << "4 5 - -1 -2"; - v2 = Vector2(4, 5); - v = v1 - v2; - EXPECT_TRUE(v == Vector2(0, 0)) << "4 5 - 4 5"; + v2 = Vector2(4, 5); + v = v1 - v2; + EXPECT_TRUE(v == Vector2(0, 0)) << "4 5 - 4 5"; - v2 = Vector2(0, 0); - v = v1 - v2; - EXPECT_TRUE(v == Vector2(4, 5)) << "4 5 - 0 0"; + v2 = Vector2(0, 0); + v = v1 - v2; + EXPECT_TRUE(v == Vector2(4, 5)) << "4 5 - 0 0"; - if (std::numeric_limits::is_iec559) { - v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - v = v1 - v2; - EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) << "4 5 - INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + v = v1 - v2; + EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) + << "4 5 - INFINITY INFINITY"; - v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - v = v1 - v2; - EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 - -INFINITY -INFINITY"; - } + v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + v = v1 - v2; + EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 - -INFINITY -INFINITY"; + } } TEST(Vector2, Addition) { - Vector2 v1 = Vector2(4, 5); - Vector2 v2 = Vector2(1, 2); - Vector2 v = Vector2::zero; - bool r = false; + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + Vector2 v = Vector2::zero; + bool r = false; - v = v1 + v2; - EXPECT_TRUE(v == Vector2(5, 7)) << "4 5 + 1 2"; + v = v1 + v2; + EXPECT_TRUE(v == Vector2(5, 7)) << "4 5 + 1 2"; - v2 = Vector2(-1, -2); - v = v1 + v2; - EXPECT_TRUE(v == Vector2(3, 3)) << "4 5 + -1 -2"; + v2 = Vector2(-1, -2); + v = v1 + v2; + EXPECT_TRUE(v == Vector2(3, 3)) << "4 5 + -1 -2"; - v2 = Vector2(0, 0); - v = v1 + v2; - EXPECT_TRUE(v == Vector2(4, 5)) << "4 5 + 0 0"; + v2 = Vector2(0, 0); + v = v1 + v2; + EXPECT_TRUE(v == Vector2(4, 5)) << "4 5 + 0 0"; - if (std::numeric_limits::is_iec559) { - v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - v = v1 + v2; - EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 + INFINITY INFINITY"; - - v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - v = v1 + v2; - EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) << "4 5 + -INFINITY -INFINITY"; - } + if (std::numeric_limits::is_iec559) { + v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + v = v1 + v2; + EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 + INFINITY INFINITY"; + v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + v = v1 + v2; + EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) + << "4 5 + -INFINITY -INFINITY"; + } } TEST(Vector2, Scale) { - bool r = false; + bool r = false; - Vector2 v1 = Vector2(4, 5); - Vector2 v2 = Vector2(1, 2); - Vector2 v = Vector2::zero; + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + Vector2 v = Vector2::zero; - v = Vector2::Scale(v1, v2); - EXPECT_TRUE(v == Vector2(4, 10)) << "Scale 4 5 , 1 2"; + v = Vector2::Scale(v1, v2); + EXPECT_TRUE(v == Vector2(4, 10)) << "Scale 4 5 , 1 2"; - v2 = Vector2(-1, -2); - v = Vector2::Scale(v1, v2); - EXPECT_TRUE(v == Vector2(-4, -10)) << "Scale 4 5 , -1 -2"; + v2 = Vector2(-1, -2); + v = Vector2::Scale(v1, v2); + EXPECT_TRUE(v == Vector2(-4, -10)) << "Scale 4 5 , -1 -2"; - v2 = Vector2(0, 0); - v = Vector2::Scale(v1, v2); - EXPECT_TRUE(v == Vector2(0, 0)) << "Scale 4 5 , 0 0"; + v2 = Vector2(0, 0); + v = Vector2::Scale(v1, v2); + EXPECT_TRUE(v == Vector2(0, 0)) << "Scale 4 5 , 0 0"; - if (std::numeric_limits::is_iec559) { - v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - v = Vector2::Scale(v1, v2); - EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 + INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + v = Vector2::Scale(v1, v2); + EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 + INFINITY INFINITY"; - v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - v = Vector2::Scale(v1, v2); - EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) << "4 5 + -INFINITY -INFINITY"; - } + v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + v = Vector2::Scale(v1, v2); + EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) + << "4 5 + -INFINITY -INFINITY"; + } } TEST(Vector2, Multiply) { - bool r = false; + bool r = false; - Vector2 v1 = Vector2(4, 5); - float f = 3; - Vector2 v = Vector2::zero; + Vector2 v1 = Vector2(4, 5); + float f = 3; + Vector2 v = Vector2::zero; - v = v1 * f; - EXPECT_TRUE(v == Vector2(12, 15)) << "4 5 * 3"; + v = v1 * f; + EXPECT_TRUE(v == Vector2(12, 15)) << "4 5 * 3"; - f = -3; - v = v1 * f; - EXPECT_TRUE(v == Vector2(-12, -15)) << "4 5 * -3"; + f = -3; + v = v1 * f; + EXPECT_TRUE(v == Vector2(-12, -15)) << "4 5 * -3"; - f = 0; - v = v1 * f; - EXPECT_TRUE(v == Vector2(0, 0)) << "4 5 * 0"; + f = 0; + v = v1 * f; + EXPECT_TRUE(v == Vector2(0, 0)) << "4 5 * 0"; - if (std::numeric_limits::is_iec559) { - f = FLOAT_INFINITY; - v = v1 * f; - EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 * INFINITY"; + if (std::numeric_limits::is_iec559) { + f = FLOAT_INFINITY; + v = v1 * f; + EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 * INFINITY"; - f = -FLOAT_INFINITY; - v = v1 * f; - EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) << "4 5 * -INFINITY"; - } + f = -FLOAT_INFINITY; + v = v1 * f; + EXPECT_TRUE(v == Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY)) + << "4 5 * -INFINITY"; + } } TEST(Vector2, Divide) { - bool r = false; + bool r = false; - Vector2 v1 = Vector2(4, 5); - float f = 2; - Vector2 v = Vector2::zero; + Vector2 v1 = Vector2(4, 5); + float f = 2; + Vector2 v = Vector2::zero; - v = v1 / f; - EXPECT_TRUE(v == Vector2(2, 2.5F)) << "4 5 / 3"; + v = v1 / f; + EXPECT_TRUE(v == Vector2(2, 2.5F)) << "4 5 / 3"; - f = -2; - v = v1 / f; - EXPECT_TRUE(v == Vector2(-2, -2.5F)) << "4 5 / -3"; + f = -2; + v = v1 / f; + EXPECT_TRUE(v == Vector2(-2, -2.5F)) << "4 5 / -3"; - if (std::numeric_limits::is_iec559) { - f = 0; - v = v1 / f; - EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 / 0"; + if (std::numeric_limits::is_iec559) { + f = 0; + v = v1 / f; + EXPECT_TRUE(v == Vector2(FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 / 0"; - f = FLOAT_INFINITY; - v = v1 / f; - EXPECT_TRUE(v == Vector2(0, 0)) << "4 5 / INFINITY"; + f = FLOAT_INFINITY; + v = v1 / f; + EXPECT_TRUE(v == Vector2(0, 0)) << "4 5 / INFINITY"; - f = -FLOAT_INFINITY; - v = v1 / f; - EXPECT_TRUE(v == Vector2(0, 0)) << "4 5 / -INFINITY"; - } + f = -FLOAT_INFINITY; + v = v1 / f; + EXPECT_TRUE(v == Vector2(0, 0)) << "4 5 / -INFINITY"; + } } TEST(Vector2, Dot) { - Vector2 v1 = Vector2(4, 5); - Vector2 v2 = Vector2(1, 2); - float f = 0; + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + float f = 0; - f = Vector2::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, 14) << "Dot(4 5, 1 2)"; + f = Vector2::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, 14) << "Dot(4 5, 1 2)"; - v2 = Vector2(-1, -2); - f = Vector2::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, -14) << "Dot(4 5, -1 -2)"; + v2 = Vector2(-1, -2); + f = Vector2::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, -14) << "Dot(4 5, -1 -2)"; - v2 = Vector2(0, 0); - f = Vector2::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, 0) << "Dot(4 5, 0 0)"; + v2 = Vector2(0, 0); + f = Vector2::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, 0) << "Dot(4 5, 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - f = Vector2::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Dot(4 5, INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + f = Vector2::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Dot(4 5, INFINITY INFINITY)"; - v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - f = Vector2::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, -FLOAT_INFINITY) << "Dot(4 5, -INFINITY -INFINITY)"; - } + v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + f = Vector2::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, -FLOAT_INFINITY) << "Dot(4 5, -INFINITY -INFINITY)"; + } } TEST(Vector2, Equality) { - Vector2 v1 = Vector2(4, 5); - Vector2 v2 = Vector2(1, 2); - bool r = false; + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + bool r = false; - r = v1 == v2; - EXPECT_FALSE(r) << "4 5 == 1 2"; + r = v1 == v2; + EXPECT_FALSE(r) << "4 5 == 1 2"; - v2 = Vector2(4, 5); - r = v1 == v2; - EXPECT_TRUE(r) << "4 5 == 1 2"; + v2 = Vector2(4, 5); + r = v1 == v2; + EXPECT_TRUE(r) << "4 5 == 1 2"; - if (std::numeric_limits::is_iec559) { - v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - r = v1 == v2; - EXPECT_FALSE(r) << "4 5 == INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + r = v1 == v2; + EXPECT_FALSE(r) << "4 5 == INFINITY INFINITY"; - v1 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - r = v1 == v2; - EXPECT_FALSE(r) << "-INFINITY -INFINITY == INFINITY INFINITY"; - } + v1 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + r = v1 == v2; + EXPECT_FALSE(r) << "-INFINITY -INFINITY == INFINITY INFINITY"; + } } TEST(Vector2, Distance) { - Vector2 v1 = Vector2(4, 5); - Vector2 v2 = Vector2(1, 2); - float f = 0; + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + float f = 0; - f = Vector2::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, 4.24264F) << "Distance(4 5, 1 2)"; + f = Vector2::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, 4.24264F) << "Distance(4 5, 1 2)"; - v2 = Vector2(-1, -2); - f = Vector2::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, 8.602325F) << "Distance(4 5, -1 -2)"; + v2 = Vector2(-1, -2); + f = Vector2::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, 8.602325F) << "Distance(4 5, -1 -2)"; - v2 = Vector2(0, 0); - f = Vector2::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, 6.403124F) << "Distance(4 5, 0 0)"; + v2 = Vector2(0, 0); + f = Vector2::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, 6.403124F) << "Distance(4 5, 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - f = Vector2::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Distance(4 5, INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + f = Vector2::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Distance(4 5, INFINITY INFINITY)"; - v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - f = Vector2::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Distance(4 5, -INFINITY -INFINITY)"; - } + v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + f = Vector2::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Distance(4 5, -INFINITY -INFINITY)"; + } } TEST(Vector2, Angle) { - Vector2 v1 = Vector2(4, 5); - Vector2 v2 = Vector2(1, 2); - float f = 0; - bool r = false; + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + float f = 0; + bool r = false; - f = Vector2::Angle(v1, v2); - EXPECT_FLOAT_EQ(f, 12.09476F) << "Angle(4 5, 1 2)"; + f = Vector2::Angle(v1, v2); + EXPECT_FLOAT_EQ(f, 12.09476F) << "Angle(4 5, 1 2)"; - v2 = Vector2(-1, -2); - f = Vector2::Angle(v1, v2); - EXPECT_FLOAT_EQ(f, 167.9052F) << "Angle(4 5, -1 -2)"; + v2 = Vector2(-1, -2); + f = Vector2::Angle(v1, v2); + EXPECT_FLOAT_EQ(f, 167.9052F) << "Angle(4 5, -1 -2)"; - v2 = Vector2(0, 0); - f = Vector2::Angle(v1, v2); - EXPECT_FLOAT_EQ(f, 0) << "Angle(4 5, 0 0)"; + v2 = Vector2(0, 0); + f = Vector2::Angle(v1, v2); + EXPECT_FLOAT_EQ(f, 0) << "Angle(4 5, 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - f = Vector2::Angle(v1, v2); - r = isnan(f); - EXPECT_TRUE(r) << "Angle(4 5, INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + f = Vector2::Angle(v1, v2); + r = isnan(f); + EXPECT_TRUE(r) << "Angle(4 5, INFINITY INFINITY)"; - v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - f = Vector2::Angle(v1, v2); - r = isnan(f); - EXPECT_TRUE(r) << "Angle(4 5, -INFINITY -INFINITY)"; - - } + v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + f = Vector2::Angle(v1, v2); + r = isnan(f); + EXPECT_TRUE(r) << "Angle(4 5, -INFINITY -INFINITY)"; + } } TEST(Vector2, SignedAngle) { - Vector2 v1 = Vector2(4, 5); - Vector2 v2 = Vector2(1, 2); - float f = 0; - bool r = false; + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + float f = 0; + bool r = false; - f = Vector2::SignedAngle(v1, v2); - EXPECT_FLOAT_EQ(f, 12.09476F) << "SignedAngle(4 5, 1 2)"; + f = Vector2::SignedAngle(v1, v2); + EXPECT_FLOAT_EQ(f, 12.09476F) << "SignedAngle(4 5, 1 2)"; - v2 = Vector2(-1, -2); - f = Vector2::SignedAngle(v1, v2); - EXPECT_FLOAT_EQ(f, -167.9052F) << "SignedAngle(4 5, -1 -2)"; + v2 = Vector2(-1, -2); + f = Vector2::SignedAngle(v1, v2); + EXPECT_FLOAT_EQ(f, -167.9052F) << "SignedAngle(4 5, -1 -2)"; - v2 = Vector2(0, 0); - f = Vector2::SignedAngle(v1, v2); - EXPECT_FLOAT_EQ(f, 0) << "SignedAngle(4 5, 0 0)"; + v2 = Vector2(0, 0); + f = Vector2::SignedAngle(v1, v2); + EXPECT_FLOAT_EQ(f, 0) << "SignedAngle(4 5, 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); - f = Vector2::SignedAngle(v1, v2); - r = isnan(f); - EXPECT_TRUE(r) << "SignedAngle(4 5, INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector2(FLOAT_INFINITY, FLOAT_INFINITY); + f = Vector2::SignedAngle(v1, v2); + r = isnan(f); + EXPECT_TRUE(r) << "SignedAngle(4 5, INFINITY INFINITY)"; - v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); - f = Vector2::SignedAngle(v1, v2); - r = isnan(f); - EXPECT_TRUE(r) << "SignedAngle(4 5, -INFINITY -INFINITY)"; - - } + v2 = Vector2(-FLOAT_INFINITY, -FLOAT_INFINITY); + f = Vector2::SignedAngle(v1, v2); + r = isnan(f); + EXPECT_TRUE(r) << "SignedAngle(4 5, -INFINITY -INFINITY)"; + } } -TEST(Vector2, DISABLED_Lerp) { +TEST(Vector2, Rotate) { + Vector2 v1 = Vector2(1, 2); + Vector2 r = Vector2(0, 0); + + r = Vector2::Rotate(v1, 0); + EXPECT_FLOAT_EQ(Vector2::Distance(r, v1), 0); + + r = Vector2::Rotate(v1, 180); + EXPECT_NEAR(Vector2::Distance(r, Vector2(-1, -2)), 0, 1.0e-06); + + r = Vector2::Rotate(v1, -90); + EXPECT_NEAR(Vector2::Distance(r, Vector2(2, -1)), 0, 1.0e-06); + + r = Vector2::Rotate(v1, 270); + EXPECT_NEAR(Vector2::Distance(r, Vector2(2, -1)), 0, 1.0e-06); } -TEST(Vector2, DISABLED_ToFactor) { +TEST(Vector2, Lerp) { + Vector2 v1 = Vector2(4, 5); + Vector2 v2 = Vector2(1, 2); + Vector2 r = Vector2(0, 0); + + r = Vector2::Lerp(v1, v2, 0); + EXPECT_FLOAT_EQ(Vector2::Distance(r, v1), 0); + + r = Vector2::Lerp(v1, v2, 1); + EXPECT_FLOAT_EQ(Vector2::Distance(r, v2), 0); + + r = Vector2::Lerp(v1, v2, 0.5f); + EXPECT_FLOAT_EQ(Vector2::Distance(r, Vector2(2.5f, 3.5f)), 0); + + r = Vector2::Lerp(v1, v2, -1); + EXPECT_FLOAT_EQ(Vector2::Distance(r, Vector2(7.0f, 8.0f)), 0); + + r = Vector2::Lerp(v1, v2, 2); + EXPECT_FLOAT_EQ(Vector2::Distance(r, Vector2(-2.0, -1.0f)), 0); } -TEST(Vector2, DISABLED_Rotate) { -} +TEST(Vector2, DISABLED_ToFactor) {} #endif \ No newline at end of file diff --git a/test/Vector3_test.cc b/test/Vector3_test.cc index a0d7135..e8f61f8 100644 --- a/test/Vector3_test.cc +++ b/test/Vector3_test.cc @@ -1,532 +1,565 @@ #if GTEST #include -#include #include +#include #include "Vector3.h" #define FLOAT_INFINITY std::numeric_limits::infinity() TEST(Vector3, Magnitude) { - Vector3 v = Vector3(1, 2, 3); - float m = 0; + Vector3 v = Vector3(1, 2, 3); + float m = 0; - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, 3.741657F) << "v.magnitude 1 2 3"; + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, 3.741657F) << "v.magnitude 1 2 3"; - m = Vector3::Magnitude(v); - EXPECT_FLOAT_EQ(m, 3.741657F) << "Vector3::Magnitude 1 2 3"; + m = Vector3::Magnitude(v); + EXPECT_FLOAT_EQ(m, 3.741657F) << "Vector3::Magnitude 1 2 3"; - v = Vector3(-1, -2, -3); - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, 3.741657F) << "v.magnitude -1 -2 -3"; + v = Vector3(-1, -2, -3); + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, 3.741657F) << "v.magnitude -1 -2 -3"; - v = Vector3(0, 0, 0); - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, 0) << "v.magnitude 0 0 0 "; + v = Vector3(0, 0, 0); + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, 0) << "v.magnitude 0 0 0 "; - if (std::numeric_limits::is_iec559) { - v = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.magnitude INFINITY INFINITY INFINITY "; + if (std::numeric_limits::is_iec559) { + v = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) + << "v.magnitude INFINITY INFINITY INFINITY "; - v = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - m = v.magnitude(); - EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.magnitude -INFINITY -INFINITY -INFINITY "; - } + v = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + m = v.magnitude(); + EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) + << "v.magnitude -INFINITY -INFINITY -INFINITY "; + } } TEST(Vector3, SqrMagnitude) { - Vector3 v = Vector3(1, 2, 3); - float m = 0; + Vector3 v = Vector3(1, 2, 3); + float m = 0; - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, 14) << "v.sqrMagnitude 1 2 3"; + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, 14) << "v.sqrMagnitude 1 2 3"; - m = Vector3::SqrMagnitude(v); - EXPECT_FLOAT_EQ(m, 14) << "Vector3::SqrMagnitude 1 2 3"; + m = Vector3::SqrMagnitude(v); + EXPECT_FLOAT_EQ(m, 14) << "Vector3::SqrMagnitude 1 2 3"; - v = Vector3(-1, -2, -3); - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, 14) << "v.sqrMagnitude -1 -2 -3"; + v = Vector3(-1, -2, -3); + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, 14) << "v.sqrMagnitude -1 -2 -3"; - v = Vector3(0, 0, 0); - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, 0) << "v.sqrMagnitude 0 0 0 "; + v = Vector3(0, 0, 0); + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, 0) << "v.sqrMagnitude 0 0 0 "; - if (std::numeric_limits::is_iec559) { - v = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.sqrMagnitude INFINITY INFINITY INFINITY "; + if (std::numeric_limits::is_iec559) { + v = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) + << "v.sqrMagnitude INFINITY INFINITY INFINITY "; - v = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - m = v.sqrMagnitude(); - EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) << "v.sqrMagnitude -INFINITY -INFINITY -INFINITY "; - } + v = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + m = v.sqrMagnitude(); + EXPECT_FLOAT_EQ(m, FLOAT_INFINITY) + << "v.sqrMagnitude -INFINITY -INFINITY -INFINITY "; + } } TEST(Vector3, Normalize) { - bool r = false; + bool r = false; - Vector3 v1 = Vector3(0, 2, 0); - Vector3 v = Vector3::zero; + Vector3 v1 = Vector3(0, 2, 0); + Vector3 v = Vector3::zero; - v = v1.normalized(); - EXPECT_TRUE(v == Vector3(0, 1, 0)) << "v.normalized 0 2 0"; + v = v1.normalized(); + EXPECT_TRUE(v == Vector3(0, 1, 0)) << "v.normalized 0 2 0"; - v = Vector3::Normalize(v1); - EXPECT_TRUE(v == Vector3(0, 1, 0)) << "Vector3::Normalize 0 2 0"; + v = Vector3::Normalize(v1); + EXPECT_TRUE(v == Vector3(0, 1, 0)) << "Vector3::Normalize 0 2 0"; - v1 = Vector3(0, -2, 0); - v = v1.normalized(); - EXPECT_TRUE(v == Vector3(0, -1, 0)) << "v.normalized 0 -2 0"; + v1 = Vector3(0, -2, 0); + v = v1.normalized(); + EXPECT_TRUE(v == Vector3(0, -1, 0)) << "v.normalized 0 -2 0"; - v1 = Vector3(0, 0, 0); - v = v1.normalized(); - EXPECT_TRUE(v == Vector3(0, 0, 0)) << "v.normalized 0 0 0"; + v1 = Vector3(0, 0, 0); + v = v1.normalized(); + EXPECT_TRUE(v == Vector3(0, 0, 0)) << "v.normalized 0 0 0"; - if (std::numeric_limits::is_iec559) { - v1 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - v = v1.normalized(); - r = isnan(v.x) && isnan(v.y) && isnan(v.z); - EXPECT_TRUE(r) << "v.normalized INFINITY INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v1 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + v = v1.normalized(); + r = isnan(v.x) && isnan(v.y) && isnan(v.z); + EXPECT_TRUE(r) << "v.normalized INFINITY INFINITY INFINITY"; - v1 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - v = v1.normalized(); - r = isnan(v.x) && isnan(v.y) && isnan(v.z); - EXPECT_TRUE(r) << "v.normalized -INFINITY -INFINITY -INFINITY"; - - } + v1 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + v = v1.normalized(); + r = isnan(v.x) && isnan(v.y) && isnan(v.z); + EXPECT_TRUE(r) << "v.normalized -INFINITY -INFINITY -INFINITY"; + } } TEST(Vector3, Negate) { - bool r = false; + bool r = false; - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v = Vector3::zero; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v = Vector3::zero; - v = -v1; - EXPECT_TRUE(v == Vector3(-4, -5, -6)) << "- 4 5 6"; + v = -v1; + EXPECT_TRUE(v == Vector3(-4, -5, -6)) << "- 4 5 6"; - v1 = Vector3(-4, -5, -6); - v = -v1; - EXPECT_TRUE(v == Vector3(4, 5, 6)) << "- -4 -5 -6"; + v1 = Vector3(-4, -5, -6); + v = -v1; + EXPECT_TRUE(v == Vector3(4, 5, 6)) << "- -4 -5 -6"; - v1 = Vector3(0, 0, 0); - v = -v1; - EXPECT_TRUE(v == Vector3(0, 0, 0)) << "- 0 0 0"; + v1 = Vector3(0, 0, 0); + v = -v1; + EXPECT_TRUE(v == Vector3(0, 0, 0)) << "- 0 0 0"; - if (std::numeric_limits::is_iec559) { - v1 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - v = -v1; - EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) << "- INFINITY INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v1 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + v = -v1; + EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) + << "- INFINITY INFINITY INFINITY"; - v1 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - v = -v1; - EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) << "- -INFINITY -INFINITY -INFINITY"; - } + v1 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + v = -v1; + EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) + << "- -INFINITY -INFINITY -INFINITY"; + } } TEST(Vector3, Subtract) { - bool r = false; + bool r = false; - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - Vector3 v = Vector3::zero; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + Vector3 v = Vector3::zero; - v = v1 - v2; - EXPECT_TRUE(v == Vector3(3, 3, 3)) << "4 5 6 - 1 2 3"; + v = v1 - v2; + EXPECT_TRUE(v == Vector3(3, 3, 3)) << "4 5 6 - 1 2 3"; - v2 = Vector3(-1, -2, -3); - v = v1 - v2; - EXPECT_TRUE(v == Vector3(5, 7, 9)) << "4 5 6 - -1 -2 -3"; + v2 = Vector3(-1, -2, -3); + v = v1 - v2; + EXPECT_TRUE(v == Vector3(5, 7, 9)) << "4 5 6 - -1 -2 -3"; - v2 = Vector3(4, 5, 6); - v = v1 - v2; - EXPECT_TRUE(v == Vector3(0, 0, 0)) << "4 5 6 - 4 5 6"; + v2 = Vector3(4, 5, 6); + v = v1 - v2; + EXPECT_TRUE(v == Vector3(0, 0, 0)) << "4 5 6 - 4 5 6"; - v2 = Vector3(0, 0, 0); - v = v1 - v2; - EXPECT_TRUE(v == Vector3(4, 5, 6)) << "4 5 6 - 0 0 0"; + v2 = Vector3(0, 0, 0); + v = v1 - v2; + EXPECT_TRUE(v == Vector3(4, 5, 6)) << "4 5 6 - 0 0 0"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - v = v1 - v2; - EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) << "4 5 6 - INFINITY INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + v = v1 - v2; + EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) + << "4 5 6 - INFINITY INFINITY INFINITY"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - v = v1 - v2; - EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 6 - -INFINITY -INFINITY -INFINITY"; - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + v = v1 - v2; + EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 6 - -INFINITY -INFINITY -INFINITY"; + } } TEST(Vector3, Addition) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - Vector3 v = Vector3::zero; - bool r = false; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + Vector3 v = Vector3::zero; + bool r = false; - v = v1 + v2; - EXPECT_TRUE(v == Vector3(5, 7, 9)) << "4 5 6 + 1 2 3"; + v = v1 + v2; + EXPECT_TRUE(v == Vector3(5, 7, 9)) << "4 5 6 + 1 2 3"; - v2 = Vector3(-1, -2, -3); - v = v1 + v2; - EXPECT_TRUE(v == Vector3(3, 3, 3)) << "4 5 6 + -1 -2 -3"; + v2 = Vector3(-1, -2, -3); + v = v1 + v2; + EXPECT_TRUE(v == Vector3(3, 3, 3)) << "4 5 6 + -1 -2 -3"; - v2 = Vector3(0, 0, 0); - v = v1 + v2; - EXPECT_TRUE(v == Vector3(4, 5, 6)) << "4 5 6 + 0 0 0"; + v2 = Vector3(0, 0, 0); + v = v1 + v2; + EXPECT_TRUE(v == Vector3(4, 5, 6)) << "4 5 6 + 0 0 0"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - v = v1 + v2; - EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 6 + INFINITY INFINITY INFINITY"; - - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - v = v1 + v2; - EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) << "4 5 6 + -INFINITY -INFINITY -INFINITY"; - } + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + v = v1 + v2; + EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 6 + INFINITY INFINITY INFINITY"; + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + v = v1 + v2; + EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) + << "4 5 6 + -INFINITY -INFINITY -INFINITY"; + } } TEST(Vector3, Scale) { - bool r = false; + bool r = false; - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - Vector3 v = Vector3::zero; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + Vector3 v = Vector3::zero; - v = Vector3::Scale(v1, v2); - EXPECT_TRUE(v == Vector3(4, 10, 18)) << "Scale 4 5 6 , 1 2 3"; + v = Vector3::Scale(v1, v2); + EXPECT_TRUE(v == Vector3(4, 10, 18)) << "Scale 4 5 6 , 1 2 3"; - v2 = Vector3(-1, -2, -3); - v = Vector3::Scale(v1, v2); - EXPECT_TRUE(v == Vector3(-4, -10, -18)) << "Scale 4 5 6 , -1 -2 -3"; + v2 = Vector3(-1, -2, -3); + v = Vector3::Scale(v1, v2); + EXPECT_TRUE(v == Vector3(-4, -10, -18)) << "Scale 4 5 6 , -1 -2 -3"; - v2 = Vector3(0, 0, 0); - v = Vector3::Scale(v1, v2); - EXPECT_TRUE(v == Vector3(0, 0, 0)) << "Scale 4 5 6 , 0 0 0"; + v2 = Vector3(0, 0, 0); + v = Vector3::Scale(v1, v2); + EXPECT_TRUE(v == Vector3(0, 0, 0)) << "Scale 4 5 6 , 0 0 0"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - v = Vector3::Scale(v1, v2); - EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 6 + INFINITY INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + v = Vector3::Scale(v1, v2); + EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 6 + INFINITY INFINITY INFINITY"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - v = Vector3::Scale(v1, v2); - EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) << "4 5 6 + -INFINITY -INFINITY -INFINITY"; - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + v = Vector3::Scale(v1, v2); + EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) + << "4 5 6 + -INFINITY -INFINITY -INFINITY"; + } } TEST(Vector3, Multiply) { - bool r = false; + bool r = false; - Vector3 v1 = Vector3(4, 5, 6); - float f = 3; - Vector3 v = Vector3::zero; + Vector3 v1 = Vector3(4, 5, 6); + float f = 3; + Vector3 v = Vector3::zero; - v = v1 * f; - EXPECT_TRUE(v == Vector3(12, 15, 18)) << "4 5 6 * 3"; + v = v1 * f; + EXPECT_TRUE(v == Vector3(12, 15, 18)) << "4 5 6 * 3"; - f = -3; - v = v1 * f; - EXPECT_TRUE(v == Vector3(-12, -15, -18)) << "4 5 6 * -3"; + f = -3; + v = v1 * f; + EXPECT_TRUE(v == Vector3(-12, -15, -18)) << "4 5 6 * -3"; - f = 0; - v = v1 * f; - EXPECT_TRUE(v == Vector3(0, 0, 0)) << "4 5 6 * 0"; + f = 0; + v = v1 * f; + EXPECT_TRUE(v == Vector3(0, 0, 0)) << "4 5 6 * 0"; - if (std::numeric_limits::is_iec559) { - f = FLOAT_INFINITY; - v = v1 * f; - EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 6 * INFINITY"; + if (std::numeric_limits::is_iec559) { + f = FLOAT_INFINITY; + v = v1 * f; + EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 6 * INFINITY"; - f = -FLOAT_INFINITY; - v = v1 * f; - EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) << "4 5 6 * -INFINITY"; - } + f = -FLOAT_INFINITY; + v = v1 * f; + EXPECT_TRUE(v == Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY)) + << "4 5 6 * -INFINITY"; + } } TEST(Vector3, Divide) { - bool r = false; + bool r = false; - Vector3 v1 = Vector3(4, 5, 6); - float f = 2; - Vector3 v = Vector3::zero; + Vector3 v1 = Vector3(4, 5, 6); + float f = 2; + Vector3 v = Vector3::zero; - v = v1 / f; - EXPECT_TRUE(v == Vector3(2, 2.5F, 3)) << "4 5 6 / 3"; + v = v1 / f; + EXPECT_TRUE(v == Vector3(2, 2.5F, 3)) << "4 5 6 / 3"; - f = -2; - v = v1 / f; - EXPECT_TRUE(v == Vector3(-2, -2.5F, -3)) << "4 5 6 / -3"; + f = -2; + v = v1 / f; + EXPECT_TRUE(v == Vector3(-2, -2.5F, -3)) << "4 5 6 / -3"; - if (std::numeric_limits::is_iec559) { - f = 0; - v = v1 / f; - EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) << "4 5 6 / 0"; + if (std::numeric_limits::is_iec559) { + f = 0; + v = v1 / f; + EXPECT_TRUE(v == Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY)) + << "4 5 6 / 0"; - f = FLOAT_INFINITY; - v = v1 / f; - EXPECT_TRUE(v == Vector3(0, 0, 0)) << "4 5 6 / INFINITY"; + f = FLOAT_INFINITY; + v = v1 / f; + EXPECT_TRUE(v == Vector3(0, 0, 0)) << "4 5 6 / INFINITY"; - f = -FLOAT_INFINITY; - v = v1 / f; - EXPECT_TRUE(v == Vector3(0, 0, 0)) << "4 5 6 / -INFINITY"; - } + f = -FLOAT_INFINITY; + v = v1 / f; + EXPECT_TRUE(v == Vector3(0, 0, 0)) << "4 5 6 / -INFINITY"; + } } TEST(Vector3, Dot) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - float f = 0; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + float f = 0; - f = Vector3::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, 32) << "Dot(4 5 6, 1 2 3)"; + f = Vector3::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, 32) << "Dot(4 5 6, 1 2 3)"; - v2 = Vector3(-1, -2, -3); - f = Vector3::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, -32) << "Dot(4 5 6, -1 -2 -3)"; + v2 = Vector3(-1, -2, -3); + f = Vector3::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, -32) << "Dot(4 5 6, -1 -2 -3)"; - v2 = Vector3(0, 0, 0); - f = Vector3::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, 0) << "Dot(4 5 6, 0 0 0)"; + v2 = Vector3(0, 0, 0); + f = Vector3::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, 0) << "Dot(4 5 6, 0 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - f = Vector3::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Dot(4 5 6, INFINITY INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + f = Vector3::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) + << "Dot(4 5 6, INFINITY INFINITY INFINITY)"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - f = Vector3::Dot(v1, v2); - EXPECT_FLOAT_EQ(f, -FLOAT_INFINITY) << "Dot(4 5 6, -INFINITY -INFINITY -INFINITY)"; - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + f = Vector3::Dot(v1, v2); + EXPECT_FLOAT_EQ(f, -FLOAT_INFINITY) + << "Dot(4 5 6, -INFINITY -INFINITY -INFINITY)"; + } } TEST(Vector3, Equality) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - bool r = false; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + bool r = false; - r = v1 == v2; - EXPECT_FALSE(r) << "4 5 6 == 1 2 3"; + r = v1 == v2; + EXPECT_FALSE(r) << "4 5 6 == 1 2 3"; - v2 = Vector3(4, 5, 6); - r = v1 == v2; - EXPECT_TRUE(r) << "4 5 6 == 1 2 3"; + v2 = Vector3(4, 5, 6); + r = v1 == v2; + EXPECT_TRUE(r) << "4 5 6 == 1 2 3"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - r = v1 == v2; - EXPECT_FALSE(r) << "4 5 6 == INFINITY INFINITY INFINITY"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + r = v1 == v2; + EXPECT_FALSE(r) << "4 5 6 == INFINITY INFINITY INFINITY"; - v1 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - r = v1 == v2; - EXPECT_FALSE(r) << "-INFINITY -INFINITY -INFINITY == INFINITY INFINITY INFINITY"; - } + v1 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + r = v1 == v2; + EXPECT_FALSE(r) + << "-INFINITY -INFINITY -INFINITY == INFINITY INFINITY INFINITY"; + } } TEST(Vector3, Distance) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - float f = 0; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + float f = 0; - f = Vector3::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, 5.19615221F) << "Distance(4 5 6, 1 2 3)"; + f = Vector3::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, 5.19615221F) << "Distance(4 5 6, 1 2 3)"; - v2 = Vector3(-1, -2, -3); - f = Vector3::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, 12.4498997F) << "Distance(4 5 6, -1 -2 -3)"; + v2 = Vector3(-1, -2, -3); + f = Vector3::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, 12.4498997F) << "Distance(4 5 6, -1 -2 -3)"; - v2 = Vector3(0, 0, 0); - f = Vector3::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, 8.77496433F) << "Distance(4 5 6, 0 0 0)"; + v2 = Vector3(0, 0, 0); + f = Vector3::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, 8.77496433F) << "Distance(4 5 6, 0 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - f = Vector3::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Distance(4 5 6, INFINITY INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + f = Vector3::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) + << "Distance(4 5 6, INFINITY INFINITY INFINITY)"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - f = Vector3::Distance(v1, v2); - EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) << "Distance(4 5 6, -INFINITY -INFINITY -INFINITY)"; - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + f = Vector3::Distance(v1, v2); + EXPECT_FLOAT_EQ(f, FLOAT_INFINITY) + << "Distance(4 5 6, -INFINITY -INFINITY -INFINITY)"; + } } TEST(Vector3, Cross) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - Vector3 v = Vector3::zero; - bool r = false; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + Vector3 v = Vector3::zero; + bool r = false; - v = Vector3::Cross(v1, v2); - r = v == Vector3(3, -6, 3); - EXPECT_TRUE(r) << "Cross(4 5 6, 1 2 3)"; + v = Vector3::Cross(v1, v2); + r = v == Vector3(3, -6, 3); + EXPECT_TRUE(r) << "Cross(4 5 6, 1 2 3)"; - v2 = Vector3(-1, -2, -3); - v = Vector3::Cross(v1, v2); - r = v == Vector3(-3, 6, -3); - EXPECT_TRUE(r) << "Cross(4 5 6, -1 -2 -3)"; + v2 = Vector3(-1, -2, -3); + v = Vector3::Cross(v1, v2); + r = v == Vector3(-3, 6, -3); + EXPECT_TRUE(r) << "Cross(4 5 6, -1 -2 -3)"; - v2 = Vector3(0, 0, 0); - v = Vector3::Cross(v1, v2); - r = v == Vector3(0, 0, 0); - EXPECT_TRUE(r) << "Cross(4 5 6, 0 0 0)"; + v2 = Vector3(0, 0, 0); + v = Vector3::Cross(v1, v2); + r = v == Vector3(0, 0, 0); + EXPECT_TRUE(r) << "Cross(4 5 6, 0 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - v = Vector3::Cross(v1, v2); - r = isnan(v.x) && isnan(v.y) && isnan(v.z); - EXPECT_TRUE(r) << "Cross(4 5 6, INFINITY INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + v = Vector3::Cross(v1, v2); + r = isnan(v.x) && isnan(v.y) && isnan(v.z); + EXPECT_TRUE(r) << "Cross(4 5 6, INFINITY INFINITY INFINITY)"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - v = Vector3::Cross(v1, v2); - r = isnan(v.x) && isnan(v.y) && isnan(v.z); - EXPECT_TRUE(r) << "Cross(4 5 6, -INFINITY -INFINITY -INFINITY)"; - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + v = Vector3::Cross(v1, v2); + r = isnan(v.x) && isnan(v.y) && isnan(v.z); + EXPECT_TRUE(r) << "Cross(4 5 6, -INFINITY -INFINITY -INFINITY)"; + } } TEST(Vector3, Project) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - Vector3 v = Vector3::zero; - bool r = false; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + Vector3 v = Vector3::zero; + bool r = false; - v = Vector3::Project(v1, v2); - r = v == Vector3(2.28571439F, 4.57142878F, 6.85714293F); - EXPECT_TRUE(r) << "Project(4 5 6, 1 2 3)"; + v = Vector3::Project(v1, v2); + r = v == Vector3(2.28571439F, 4.57142878F, 6.85714293F); + EXPECT_TRUE(r) << "Project(4 5 6, 1 2 3)"; - v2 = Vector3(-1, -2, -3); - v = Vector3::Project(v1, v2); - r = v == Vector3(2.28571439F, 4.57142878F, 6.85714293F); - EXPECT_TRUE(r) << "Project(4 5 6, -1 -2 -3)"; + v2 = Vector3(-1, -2, -3); + v = Vector3::Project(v1, v2); + r = v == Vector3(2.28571439F, 4.57142878F, 6.85714293F); + EXPECT_TRUE(r) << "Project(4 5 6, -1 -2 -3)"; - v2 = Vector3(0, 0, 0); - v = Vector3::Project(v1, v2); - r = v == Vector3(0, 0, 0); - EXPECT_TRUE(r) << "Project(4 5 6, 0 0 0)"; + v2 = Vector3(0, 0, 0); + v = Vector3::Project(v1, v2); + r = v == Vector3(0, 0, 0); + EXPECT_TRUE(r) << "Project(4 5 6, 0 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - v = Vector3::Project(v1, v2); - r = isnan(v.x) && isnan(v.y) && isnan(v.z); - EXPECT_TRUE(r) << "Project(4 5 6, INFINITY INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + v = Vector3::Project(v1, v2); + r = isnan(v.x) && isnan(v.y) && isnan(v.z); + EXPECT_TRUE(r) << "Project(4 5 6, INFINITY INFINITY INFINITY)"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - v = Vector3::Project(v1, v2); - r = isnan(v.x) && isnan(v.y) && isnan(v.z); - EXPECT_TRUE(r) << "Project(4 5 6, -INFINITY -INFINITY -INFINITY)"; - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + v = Vector3::Project(v1, v2); + r = isnan(v.x) && isnan(v.y) && isnan(v.z); + EXPECT_TRUE(r) << "Project(4 5 6, -INFINITY -INFINITY -INFINITY)"; + } } TEST(Vector3, ProjectOnPlane) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - Vector3 v = Vector3::zero; - bool r = false; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + Vector3 v = Vector3::zero; + bool r = false; - v = Vector3::ProjectOnPlane(v1, v2); - r = v == Vector3(1.71428561F, 0.428571224F, -0.857142925F); - EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, 1 2 3)"; + v = Vector3::ProjectOnPlane(v1, v2); + r = v == Vector3(1.71428561F, 0.428571224F, -0.857142925F); + EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, 1 2 3)"; - v2 = Vector3(-1, -2, -3); - v = Vector3::ProjectOnPlane(v1, v2); - r = v == Vector3(1.71428561F, 0.428571224F, -0.857142925F); - EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, -1 -2 -3)"; + v2 = Vector3(-1, -2, -3); + v = Vector3::ProjectOnPlane(v1, v2); + r = v == Vector3(1.71428561F, 0.428571224F, -0.857142925F); + EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, -1 -2 -3)"; - v2 = Vector3(0, 0, 0); - v = Vector3::ProjectOnPlane(v1, v2); - r = v == Vector3(4, 5, 6); - EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, 0 0 0)"; + v2 = Vector3(0, 0, 0); + v = Vector3::ProjectOnPlane(v1, v2); + r = v == Vector3(4, 5, 6); + EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, 0 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - v = Vector3::ProjectOnPlane(v1, v2); - r = isnan(v.x) && isnan(v.y) && isnan(v.z); - EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, INFINITY INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + v = Vector3::ProjectOnPlane(v1, v2); + r = isnan(v.x) && isnan(v.y) && isnan(v.z); + EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, INFINITY INFINITY INFINITY)"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - v = Vector3::ProjectOnPlane(v1, v2); - r = isnan(v.x) && isnan(v.y) && isnan(v.z); - EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, -INFINITY -INFINITY -INFINITY)"; - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + v = Vector3::ProjectOnPlane(v1, v2); + r = isnan(v.x) && isnan(v.y) && isnan(v.z); + EXPECT_TRUE(r) << "ProjectOnPlane(4 5 6, -INFINITY -INFINITY -INFINITY)"; + } } TEST(Vector3, Angle) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - float f = 0; - bool r = false; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + float f = 0; + bool r = false; - f = Vector3::Angle(v1, v2); - EXPECT_FLOAT_EQ(f, 12.9331388F) << "Angle(4 5 6, 1 2 3)"; + f = Vector3::Angle(v1, v2); + EXPECT_FLOAT_EQ(f, 12.9331388F) << "Angle(4 5 6, 1 2 3)"; - v2 = Vector3(-1, -2, -3); - f = Vector3::Angle(v1, v2); - EXPECT_FLOAT_EQ(f, 167.066864F) << "Angle(4 5 6, -1 -2 -3)"; + v2 = Vector3(-1, -2, -3); + f = Vector3::Angle(v1, v2); + EXPECT_FLOAT_EQ(f, 167.066864F) << "Angle(4 5 6, -1 -2 -3)"; - v2 = Vector3(0, 0, 0); - f = Vector3::Angle(v1, v2); - EXPECT_FLOAT_EQ(f, 0) << "Angle(4 5 6, 0 0 0)"; + v2 = Vector3(0, 0, 0); + f = Vector3::Angle(v1, v2); + EXPECT_FLOAT_EQ(f, 0) << "Angle(4 5 6, 0 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - f = Vector3::Angle(v1, v2); - r = isnan(f); - EXPECT_TRUE(r) << "Angle(4 5 6, INFINITY INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + f = Vector3::Angle(v1, v2); + r = isnan(f); + EXPECT_TRUE(r) << "Angle(4 5 6, INFINITY INFINITY INFINITY)"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - f = Vector3::Angle(v1, v2); - r = isnan(f); - EXPECT_TRUE(r) << "Angle(4 5 6, -INFINITY -INFINITY -INFINITY)"; - - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + f = Vector3::Angle(v1, v2); + r = isnan(f); + EXPECT_TRUE(r) << "Angle(4 5 6, -INFINITY -INFINITY -INFINITY)"; + } } TEST(Vector3, SignedAngle) { - Vector3 v1 = Vector3(4, 5, 6); - Vector3 v2 = Vector3(1, 2, 3); - Vector3 v3 = Vector3(7, 8, -9); - float f = 0; - bool r = false; + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + Vector3 v3 = Vector3(7, 8, -9); + float f = 0; + bool r = false; - f = Vector3::SignedAngle(v1, v2, v3); - EXPECT_FLOAT_EQ(f, -12.9331388F) << "SignedAngle(4 5 6, 1 2 3, 7 8 -9)"; + f = Vector3::SignedAngle(v1, v2, v3); + EXPECT_FLOAT_EQ(f, -12.9331388F) << "SignedAngle(4 5 6, 1 2 3, 7 8 -9)"; - v2 = Vector3(-1, -2, -3); - f = Vector3::SignedAngle(v1, v2, v3); - EXPECT_FLOAT_EQ(f, 167.066864F) << "SignedAngle(4 5 6, -1 -2 -3, 7 8 -9)"; + v2 = Vector3(-1, -2, -3); + f = Vector3::SignedAngle(v1, v2, v3); + EXPECT_FLOAT_EQ(f, 167.066864F) << "SignedAngle(4 5 6, -1 -2 -3, 7 8 -9)"; - v2 = Vector3(0, 0, 0); - f = Vector3::SignedAngle(v1, v2, v3); - EXPECT_FLOAT_EQ(f, 0) << "SignedAngle(4 5 6, 0 0 0, 7 8 -9 )"; + v2 = Vector3(0, 0, 0); + f = Vector3::SignedAngle(v1, v2, v3); + EXPECT_FLOAT_EQ(f, 0) << "SignedAngle(4 5 6, 0 0 0, 7 8 -9 )"; - v2 = Vector3(1, 2, 3); + v2 = Vector3(1, 2, 3); - v3 = Vector3(-7, -8, 9); - f = Vector3::SignedAngle(v1, v2, v3); - EXPECT_FLOAT_EQ(f, 12.9331388F) << "SignedAngle(4 5 6, 1 2 3, -7 -8 9)"; + v3 = Vector3(-7, -8, 9); + f = Vector3::SignedAngle(v1, v2, v3); + EXPECT_FLOAT_EQ(f, 12.9331388F) << "SignedAngle(4 5 6, 1 2 3, -7 -8 9)"; - v3 = Vector3(0, 0, 0); - f = Vector3::SignedAngle(v1, v2, v3); - EXPECT_FLOAT_EQ(f, 0) << "SignedAngle(4 5 6, 1 2 3, 0 0 0)"; + v3 = Vector3(0, 0, 0); + f = Vector3::SignedAngle(v1, v2, v3); + EXPECT_FLOAT_EQ(f, 0) << "SignedAngle(4 5 6, 1 2 3, 0 0 0)"; - if (std::numeric_limits::is_iec559) { - v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); - f = Vector3::SignedAngle(v1, v2, v3); - r = isnan(f); - EXPECT_TRUE(r) << "SignedAngle(4 5 6, INFINITY INFINITY INFINITY)"; + if (std::numeric_limits::is_iec559) { + v2 = Vector3(FLOAT_INFINITY, FLOAT_INFINITY, FLOAT_INFINITY); + f = Vector3::SignedAngle(v1, v2, v3); + r = isnan(f); + EXPECT_TRUE(r) << "SignedAngle(4 5 6, INFINITY INFINITY INFINITY)"; - v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); - f = Vector3::SignedAngle(v1, v2, v3); - r = isnan(f); - EXPECT_TRUE(r) << "SignedAngle(4 5 6, -INFINITY -INFINITY -INFINITY)"; - - } + v2 = Vector3(-FLOAT_INFINITY, -FLOAT_INFINITY, -FLOAT_INFINITY); + f = Vector3::SignedAngle(v1, v2, v3); + r = isnan(f); + EXPECT_TRUE(r) << "SignedAngle(4 5 6, -INFINITY -INFINITY -INFINITY)"; + } } -TEST(Vector3, DISABLED_Lerp) { +TEST(Vector3, Lerp) { + Vector3 v1 = Vector3(4, 5, 6); + Vector3 v2 = Vector3(1, 2, 3); + Vector3 r = Vector3(0, 0, 0); + r = Vector3::Lerp(v1, v2, 0); + EXPECT_FLOAT_EQ(Vector3::Distance(r, v1), 0); + + r = Vector3::Lerp(v1, v2, 1); + EXPECT_FLOAT_EQ(Vector3::Distance(r, v2), 0); + + r = Vector3::Lerp(v1, v2, 0.5f); + EXPECT_FLOAT_EQ(Vector3::Distance(r, Vector3(2.5f, 3.5f, 4.5f)), 0); + + r = Vector3::Lerp(v1, v2, -1); + EXPECT_FLOAT_EQ(Vector3::Distance(r, Vector3(7.0f, 8.0f, 9.0f)), 0); + + r = Vector3::Lerp(v1, v2, 2); + EXPECT_FLOAT_EQ(Vector3::Distance(r, Vector3(-2.0, -1.0f, 0.0f)), 0); } #endif \ No newline at end of file