Improved unit tests
This commit is contained in:
parent
5489b3c45c
commit
6ddb074225
13
Polar.cpp
13
Polar.cpp
@ -9,15 +9,14 @@ Polar::Polar() {
|
||||
distance = 0.0F;
|
||||
}
|
||||
|
||||
// Polar::Polar(float newAngle, float newDistance) {
|
||||
Polar::Polar(float newDistance, Angle newAngle) {
|
||||
Polar::Polar(float distance, Angle angle) {
|
||||
// distance should always be 0 or greater
|
||||
if (newDistance < 0) {
|
||||
angle = Angle::Normalize(newAngle - 180);
|
||||
distance = -newDistance;
|
||||
if (distance < 0) {
|
||||
this->distance = -distance;
|
||||
this->angle = Angle::Normalize(angle - 180);
|
||||
} else {
|
||||
angle = Angle::Normalize(newAngle);
|
||||
distance = newDistance;
|
||||
this->distance = distance;
|
||||
this->angle = Angle::Normalize(angle);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,9 +19,18 @@ Spherical::Spherical(Polar polar) {
|
||||
this->distance = polar.distance;
|
||||
}
|
||||
|
||||
Spherical::Spherical(float distance, Angle horizontalAngle, Angle verticalAngle)
|
||||
: distance(distance), horizontalAngle(horizontalAngle),
|
||||
verticalAngle(verticalAngle) {}
|
||||
Spherical::Spherical(float distance, Angle horizontalAngle,
|
||||
Angle verticalAngle) {
|
||||
if (distance < 0) {
|
||||
this->distance = -distance;
|
||||
this->horizontalAngle = Angle::Normalize(horizontalAngle - 180);
|
||||
this->verticalAngle = verticalAngle;
|
||||
} else {
|
||||
this->distance = distance;
|
||||
this->horizontalAngle = Angle::Normalize(horizontalAngle);
|
||||
this->verticalAngle = Angle::Normalize(verticalAngle);
|
||||
}
|
||||
}
|
||||
|
||||
Spherical::Spherical(Vector3 v) {
|
||||
distance = v.magnitude();
|
||||
|
@ -33,6 +33,15 @@ Vector2::Vector2(Vector3 v) {
|
||||
y = v.z;
|
||||
}
|
||||
|
||||
Vector2::Vector2(Polar p) {
|
||||
float horizontalRad = p.angle * Angle::Deg2Rad;
|
||||
float cosHorizontal = cosf(horizontalRad);
|
||||
float sinHorizontal = sinf(horizontalRad);
|
||||
|
||||
x = p.distance * sinHorizontal;
|
||||
y = p.distance * cosHorizontal;
|
||||
}
|
||||
|
||||
Vector2::~Vector2() {}
|
||||
|
||||
const Vector2 Vector2::zero = Vector2(0, 0);
|
||||
|
@ -27,6 +27,7 @@ typedef struct Vec2 {
|
||||
namespace Passer {
|
||||
|
||||
struct Vector3;
|
||||
struct Polar;
|
||||
|
||||
/// <summary>
|
||||
/// A 2-dimensional vector
|
||||
@ -56,6 +57,8 @@ public:
|
||||
/// <param name="v">The 3D vector</param>
|
||||
Vector2(Vector3 v);
|
||||
|
||||
Vector2(Polar p);
|
||||
|
||||
/// <summary>
|
||||
/// Vector2 destructor
|
||||
/// </summary
|
||||
@ -246,4 +249,6 @@ public:
|
||||
} // namespace Passer
|
||||
using namespace Passer;
|
||||
|
||||
#include "Polar.h"
|
||||
|
||||
#endif
|
@ -278,4 +278,6 @@ public:
|
||||
} // namespace Passer
|
||||
using namespace Passer;
|
||||
|
||||
#include "Spherical.h"
|
||||
|
||||
#endif
|
@ -26,4 +26,46 @@ TEST(Polar, FromVector2) {
|
||||
EXPECT_FLOAT_EQ(p.distance, sqrt(2.0F)) << "p.distance -1 1";
|
||||
EXPECT_NEAR(p.angle, -45.0F, 1.0e-05) << "s.angle -1 1";
|
||||
}
|
||||
|
||||
TEST(Polar, FromSpherical) {
|
||||
Spherical s;
|
||||
Polar p;
|
||||
|
||||
s = Spherical(1, 0, 0);
|
||||
p = Polar(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(p.distance, 1.0F) << "p.distance FromSpherical(1 0 0)";
|
||||
EXPECT_FLOAT_EQ(p.angle, 0.0F) << "p.angle FromSpherical(1 0 0)";
|
||||
|
||||
s = Spherical(1, 45, 0);
|
||||
p = Polar(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(p.distance, 1.0F) << "p.distance FromSpherical(1 45 0)";
|
||||
EXPECT_FLOAT_EQ(p.angle, 45.0F) << "p.angle FromSpherical(1 45 0)";
|
||||
|
||||
s = Spherical(1, -45, 0);
|
||||
p = Polar(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(p.distance, 1.0F) << "p.distance FromSpherical(1 -45 0)";
|
||||
EXPECT_FLOAT_EQ(p.angle, -45.0F) << "p.angle FromSpherical(1 -45 0)";
|
||||
|
||||
s = Spherical(0, 0, 0);
|
||||
p = Polar(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(p.distance, 0.0F) << "p.distance FromSpherical(0 0 0)";
|
||||
EXPECT_FLOAT_EQ(p.angle, 0.0F) << "p.angle FromSpherical(0 0 0)";
|
||||
|
||||
s = Spherical(-1, 0, 0);
|
||||
p = Polar(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(p.distance, 1.0F) << "p.distance FromSpherical(-1 0 0)";
|
||||
EXPECT_FLOAT_EQ(p.angle, 180.0F) << "p.angle FromSpherical(-1 0 0)";
|
||||
|
||||
s = Spherical(0, 0, 90);
|
||||
p = Polar(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(p.distance, 0.0F) << "p.distance FromSpherical(0 0 90)";
|
||||
EXPECT_FLOAT_EQ(p.angle, 0.0F) << "p.angle FromSpherical(0 0 90)";
|
||||
}
|
||||
|
||||
#endif
|
@ -30,30 +30,41 @@ TEST(Spherical, FromVector3) {
|
||||
EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert 1 0 0";
|
||||
}
|
||||
|
||||
TEST(Spherical, ToVector3) {
|
||||
Vector3 v = Vector3(0, 0, 1);
|
||||
Spherical s = Spherical(v);
|
||||
Vector3 r = Vector3(s); // s.ToVector3();
|
||||
TEST(Spherical, FromPolar) {
|
||||
Polar p = Polar(1, 0);
|
||||
Spherical s = Spherical(p);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 0.0F) << "toVector3.x 0 0 1";
|
||||
EXPECT_NEAR(r.y, 0.0F, 1.0e-06) << "toVector3.y 0 0 1";
|
||||
EXPECT_FLOAT_EQ(r.z, 1.0F) << "toVector3.z 0 0 1";
|
||||
EXPECT_FLOAT_EQ(s.distance, 1.0F) << "s.distance Polar(1 0)";
|
||||
EXPECT_FLOAT_EQ(s.horizontalAngle, 0.0F) << "s.hor Polar(1 0)";
|
||||
EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert Polar(1 0)";
|
||||
|
||||
v = Vector3(0, 1, 0);
|
||||
s = Spherical(v);
|
||||
r = Vector3(s); // s.ToVector3();
|
||||
p = Polar(1, 45);
|
||||
s = Spherical(p);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 0.0F) << "toVector3.x 0 1 0";
|
||||
EXPECT_FLOAT_EQ(r.y, 1.0F) << "toVector3.y 0 1 0";
|
||||
EXPECT_NEAR(r.z, 0.0F, 1.0e-06) << "toVector3.z 0 1 0";
|
||||
EXPECT_FLOAT_EQ(s.distance, 1.0F) << "s.distance Polar(1 45)";
|
||||
EXPECT_FLOAT_EQ(s.horizontalAngle, 45.0F) << "s.hor Polar(1 45)";
|
||||
EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert Polar(1 45)";
|
||||
|
||||
v = Vector3(1, 0, 0);
|
||||
s = Spherical(v);
|
||||
r = Vector3(s); // s.ToVector3();
|
||||
p = Polar(1, -45);
|
||||
s = Spherical(p);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 1.0F) << "toVector3.x 1 0 0";
|
||||
EXPECT_NEAR(r.y, 0.0F, 1.0e-06) << "toVector3.y 1 0 0";
|
||||
EXPECT_NEAR(r.z, 0.0F, 1.0e-06) << "toVector3.z 1 0 0";
|
||||
EXPECT_FLOAT_EQ(s.distance, 1.0F) << "s.distance Polar(1 -45)";
|
||||
EXPECT_FLOAT_EQ(s.horizontalAngle, -45.0F) << "s.hor Polar(1 -45)";
|
||||
EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert Polar(1 -45)";
|
||||
|
||||
p = Polar(0, 0);
|
||||
s = Spherical(p);
|
||||
|
||||
EXPECT_FLOAT_EQ(s.distance, 0.0F) << "s.distance Polar(0 0)";
|
||||
EXPECT_FLOAT_EQ(s.horizontalAngle, 0.0F) << "s.hor Polar(0 0)";
|
||||
EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert Polar(0 0)";
|
||||
|
||||
p = Polar(-1, 0);
|
||||
s = Spherical(p);
|
||||
|
||||
EXPECT_FLOAT_EQ(s.distance, 1.0F) << "s.distance Polar(-1 0)";
|
||||
EXPECT_FLOAT_EQ(s.horizontalAngle, 180.0F) << "s.hor Polar(-1 0)";
|
||||
EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert Polar(-1 0)";
|
||||
}
|
||||
|
||||
TEST(Spherical, Incident1) {
|
||||
@ -65,7 +76,7 @@ TEST(Spherical, Incident1) {
|
||||
EXPECT_NEAR(s.horizontalAngle, sr.horizontalAngle, 1.0e-02);
|
||||
EXPECT_NEAR(s.verticalAngle, sr.verticalAngle, 1.0e-02);
|
||||
|
||||
Vector3 r = Vector3(sr); // sr.ToVector3();
|
||||
Vector3 r = Vector3(sr);
|
||||
EXPECT_NEAR(r.x, v.x, 1.0e-02) << "toVector3.x 1 0 0";
|
||||
EXPECT_NEAR(r.y, v.y, 1.0e-02) << "toVector3.y 1 0 0";
|
||||
EXPECT_NEAR(r.z, v.z, 1.0e-02) << "toVector3.z 1 0 0";
|
||||
@ -80,7 +91,7 @@ TEST(Spherical, Incident2) {
|
||||
EXPECT_NEAR(s.horizontalAngle, sr.horizontalAngle, 1.0e-05);
|
||||
EXPECT_NEAR(s.verticalAngle, sr.verticalAngle, 1.0e-05);
|
||||
|
||||
Vector3 r = Vector3(sr); // sr.ToVector3();
|
||||
Vector3 r = Vector3(sr);
|
||||
EXPECT_NEAR(r.x, v.x, 1.0e-06);
|
||||
EXPECT_NEAR(r.y, v.y, 1.0e-06);
|
||||
EXPECT_NEAR(r.z, v.z, 1.0e-06);
|
||||
@ -93,14 +104,14 @@ TEST(Spherical, Incident2) {
|
||||
EXPECT_NEAR(s.horizontalAngle, sr.horizontalAngle, 1.0e-05);
|
||||
EXPECT_NEAR(s.verticalAngle, sr.verticalAngle, 1.0e-05);
|
||||
|
||||
r = Vector3(sr); // sr.ToVector3();
|
||||
r = Vector3(sr);
|
||||
EXPECT_NEAR(r.x, v.x, 1.0e-06);
|
||||
EXPECT_NEAR(r.y, v.y, 1.0e-06);
|
||||
EXPECT_NEAR(r.z, v.z, 1.0e-06);
|
||||
|
||||
v = Vector3(1.0f, 1.0f, 1.0f);
|
||||
s = Spherical(v);
|
||||
r = Vector3(s); // s.ToVector3();
|
||||
r = Vector3(s);
|
||||
|
||||
EXPECT_NEAR(s.distance, 1.73205080F, 1.0e-02);
|
||||
EXPECT_NEAR(s.horizontalAngle, 45.0F, 1.0e-02);
|
||||
@ -116,4 +127,5 @@ TEST(Spherical, Incident2) {
|
||||
// EXPECT_NEAR(r.y, 7.07, 1.0e-06);
|
||||
// EXPECT_NEAR(r.z, 5, 1.0e-06);
|
||||
}
|
||||
|
||||
#endif
|
@ -7,6 +7,33 @@
|
||||
|
||||
#define FLOAT_INFINITY std::numeric_limits<float>::infinity()
|
||||
|
||||
TEST(Vector2, FromPolar) {
|
||||
Vector2 v;
|
||||
Polar p;
|
||||
Vector2 r;
|
||||
|
||||
v = Vector2(0, 1);
|
||||
p = Polar(v);
|
||||
r = Vector2(p);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 0.0F) << "FromPolar(0 1)";
|
||||
EXPECT_FLOAT_EQ(r.y, 1.0F) << "FromPolar(0 1)";
|
||||
|
||||
v = Vector2(1, 0);
|
||||
p = Polar(v);
|
||||
r = Vector2(p);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 1.0F) << "FromPolar(1 0)";
|
||||
EXPECT_NEAR(r.y, 0.0F, 1.0e-07) << "FromPolar(1 0)";
|
||||
|
||||
v = Vector2(0, 0);
|
||||
p = Polar(v);
|
||||
r = Vector2(p);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 0.0F) << "FromPolar(0 0)";
|
||||
EXPECT_FLOAT_EQ(r.y, 0.0F) << "FromPolar(0 0)";
|
||||
}
|
||||
|
||||
TEST(Vector2, Magnitude) {
|
||||
Vector2 v = Vector2(1, 2);
|
||||
float m = 0;
|
||||
|
@ -7,6 +7,32 @@
|
||||
|
||||
#define FLOAT_INFINITY std::numeric_limits<float>::infinity()
|
||||
|
||||
TEST(Vector3, FromSpherical) {
|
||||
Vector3 v = Vector3(0, 0, 1);
|
||||
Spherical s = Spherical(v);
|
||||
Vector3 r = Vector3(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 0.0F) << "toVector3.x 0 0 1";
|
||||
EXPECT_NEAR(r.y, 0.0F, 1.0e-06) << "toVector3.y 0 0 1";
|
||||
EXPECT_FLOAT_EQ(r.z, 1.0F) << "toVector3.z 0 0 1";
|
||||
|
||||
v = Vector3(0, 1, 0);
|
||||
s = Spherical(v);
|
||||
r = Vector3(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 0.0F) << "toVector3.x 0 1 0";
|
||||
EXPECT_FLOAT_EQ(r.y, 1.0F) << "toVector3.y 0 1 0";
|
||||
EXPECT_NEAR(r.z, 0.0F, 1.0e-06) << "toVector3.z 0 1 0";
|
||||
|
||||
v = Vector3(1, 0, 0);
|
||||
s = Spherical(v);
|
||||
r = Vector3(s);
|
||||
|
||||
EXPECT_FLOAT_EQ(r.x, 1.0F) << "toVector3.x 1 0 0";
|
||||
EXPECT_NEAR(r.y, 0.0F, 1.0e-06) << "toVector3.y 1 0 0";
|
||||
EXPECT_NEAR(r.z, 0.0F, 1.0e-06) << "toVector3.z 1 0 0";
|
||||
}
|
||||
|
||||
TEST(Vector3, Magnitude) {
|
||||
Vector3 v = Vector3(1, 2, 3);
|
||||
float m = 0;
|
||||
@ -550,4 +576,5 @@ TEST(Vector3, Lerp) {
|
||||
r = Vector3::Lerp(v1, v2, 2);
|
||||
EXPECT_FLOAT_EQ(Vector3::Distance(r, Vector3(-2.0, -1.0f, 0.0f)), 0);
|
||||
}
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user