
git-subtree-dir: LinearAlgebra git-subtree-mainline: ee9e9e001e4c5030a6c2093a7f3892adbf322d9e git-subtree-split: bfa11239940c85b1486f63bd80fc82c578c62863
167 lines
4.3 KiB
C++
167 lines
4.3 KiB
C++
#if GTEST
|
|
#include <gtest/gtest.h>
|
|
|
|
#include <math.h>
|
|
#include <limits>
|
|
|
|
#include "Angle.h"
|
|
|
|
#define FLOAT_INFINITY std::numeric_limits<float>::infinity()
|
|
|
|
TEST(Angle, Normalize) {
|
|
float r = 0;
|
|
|
|
r = Angle::Normalize(90);
|
|
EXPECT_FLOAT_EQ(r, 90) << "Normalize 90";
|
|
|
|
r = Angle::Normalize(-90);
|
|
EXPECT_FLOAT_EQ(r, -90) << "Normalize -90";
|
|
|
|
r = Angle::Normalize(270);
|
|
EXPECT_FLOAT_EQ(r, -90) << "Normalize 270";
|
|
|
|
r = Angle::Normalize(270+360);
|
|
EXPECT_FLOAT_EQ(r, -90) << "Normalize 270+360";
|
|
|
|
r = Angle::Normalize(-270);
|
|
EXPECT_FLOAT_EQ(r, 90) << "Normalize -270";
|
|
|
|
r = Angle::Normalize(-270 - 360);
|
|
EXPECT_FLOAT_EQ(r, 90) << "Normalize -270-360";
|
|
|
|
r = Angle::Normalize(0);
|
|
EXPECT_FLOAT_EQ(r, 0) << "Normalize 0";
|
|
|
|
if (std::numeric_limits<float>::is_iec559) {
|
|
r = Angle::Normalize(FLOAT_INFINITY);
|
|
EXPECT_FLOAT_EQ(r, FLOAT_INFINITY) << "Normalize INFINITY";
|
|
|
|
r = Angle::Normalize(-FLOAT_INFINITY);
|
|
EXPECT_FLOAT_EQ(r, -FLOAT_INFINITY) << "Normalize INFINITY";
|
|
}
|
|
}
|
|
|
|
TEST(Angle, Clamp) {
|
|
float r = 0;
|
|
|
|
r = Angle::Clamp(1, 0, 2);
|
|
EXPECT_FLOAT_EQ(r, 1) << "Clamp 1 0 2";
|
|
|
|
r = Angle::Clamp(-1, 0, 2);
|
|
EXPECT_FLOAT_EQ(r, 0) << "Clamp -1 0 2";
|
|
|
|
r = Angle::Clamp(3, 0, 2);
|
|
EXPECT_FLOAT_EQ(r, 2) << "Clamp 3 0 2";
|
|
|
|
r = Angle::Clamp(1, 0, 0);
|
|
EXPECT_FLOAT_EQ(r, 0) << "Clamp 1 0 0";
|
|
|
|
r = Angle::Clamp(0, 0, 0);
|
|
EXPECT_FLOAT_EQ(r, 0) << "Clamp 0 0 0";
|
|
|
|
r = Angle::Clamp(0, 1, -1);
|
|
EXPECT_FLOAT_EQ(r, 1) << "Clamp 0 1 -1";
|
|
|
|
if (std::numeric_limits<float>::is_iec559) {
|
|
r = Angle::Clamp(1, 0, FLOAT_INFINITY);
|
|
EXPECT_FLOAT_EQ(r, 1) << "Clamp 1 0 INFINITY";
|
|
|
|
r = Angle::Clamp(1, -FLOAT_INFINITY, 1);
|
|
EXPECT_FLOAT_EQ(r, 1) << "Clamp 1 -INFINITY 1";
|
|
}
|
|
}
|
|
|
|
TEST(Angle, Difference) {
|
|
float r = 0;
|
|
|
|
r = Angle::Difference(0, 90);
|
|
EXPECT_FLOAT_EQ(r, 90) << "Difference 0 90";
|
|
|
|
r = Angle::Difference(0, -90);
|
|
EXPECT_FLOAT_EQ(r, -90) << "Difference 0 -90";
|
|
|
|
r = Angle::Difference(0, 270);
|
|
EXPECT_FLOAT_EQ(r, -90) << "Difference 0 270";
|
|
|
|
r = Angle::Difference(0, -270);
|
|
EXPECT_FLOAT_EQ(r, 90) << "Difference 0 -270";
|
|
|
|
r = Angle::Difference(90, 0);
|
|
EXPECT_FLOAT_EQ(r, -90) << "Difference 90 0";
|
|
|
|
r = Angle::Difference(-90, 0);
|
|
EXPECT_FLOAT_EQ(r, 90) << "Difference -90 0";
|
|
|
|
r = Angle::Difference(0, 0);
|
|
EXPECT_FLOAT_EQ(r, 0) << "Difference 0 0";
|
|
|
|
r = Angle::Difference(90, 90);
|
|
EXPECT_FLOAT_EQ(r, 0) << "Difference 90 90";
|
|
|
|
if (std::numeric_limits<float>::is_iec559) {
|
|
r = Angle::Difference(0, INFINITY);
|
|
EXPECT_FLOAT_EQ(r, INFINITY) << "Difference 0 INFINITY";
|
|
|
|
r = Angle::Difference(0, -INFINITY);
|
|
EXPECT_FLOAT_EQ(r, -INFINITY) << "Difference 0 -INFINITY";
|
|
|
|
r = Angle::Difference(-INFINITY, INFINITY);
|
|
EXPECT_FLOAT_EQ(r, INFINITY) << "Difference -INFINITY INFINITY";
|
|
}
|
|
}
|
|
|
|
TEST(Angle, MoveTowards) {
|
|
float r = 0;
|
|
|
|
r = Angle::MoveTowards(0, 90, 30);
|
|
EXPECT_FLOAT_EQ(r, 30) << "MoveTowards 0 90 30";
|
|
|
|
r = Angle::MoveTowards(0, 90, 90);
|
|
EXPECT_FLOAT_EQ(r, 90) << "MoveTowards 0 90 90";
|
|
|
|
r = Angle::MoveTowards(0, 90, 180);
|
|
EXPECT_FLOAT_EQ(r, 90) << "MoveTowards 0 90 180";
|
|
|
|
r = Angle::MoveTowards(0, 90, 270);
|
|
EXPECT_FLOAT_EQ(r, 90) << "MoveTowards 0 90 270";
|
|
|
|
r = Angle::MoveTowards(0, 90, -30);
|
|
EXPECT_FLOAT_EQ(r, -30) << "MoveTowards 0 90 -30";
|
|
|
|
r = Angle::MoveTowards(0, -90, -30);
|
|
EXPECT_FLOAT_EQ(r, 30) << "MoveTowards 0 -90 -30";
|
|
|
|
r = Angle::MoveTowards(0, -90, -90);
|
|
EXPECT_FLOAT_EQ(r, 90) << "MoveTowards 0 -90 -90";
|
|
|
|
r = Angle::MoveTowards(0, -90, -180);
|
|
EXPECT_FLOAT_EQ(r, 180) << "MoveTowards 0 -90 -180";
|
|
|
|
r = Angle::MoveTowards(0, -90, -270);
|
|
EXPECT_FLOAT_EQ(r, 270) << "MoveTowards 0 -90 -270";
|
|
|
|
r = Angle::MoveTowards(0, 90, 0);
|
|
EXPECT_FLOAT_EQ(r, 0) << "MoveTowards 0 90 0";
|
|
|
|
r = Angle::MoveTowards(0, 0, 0);
|
|
EXPECT_FLOAT_EQ(r, 0) << "MoveTowards 0 0 0";
|
|
|
|
r = Angle::MoveTowards(0, 0, 30);
|
|
EXPECT_FLOAT_EQ(r, 0) << "MoveTowards 0 0 30";
|
|
|
|
if (std::numeric_limits<float>::is_iec559) {
|
|
r = Angle::MoveTowards(0, 90, FLOAT_INFINITY);
|
|
EXPECT_FLOAT_EQ(r, 90) << "MoveTowards 0 90 FLOAT_INFINITY";
|
|
|
|
r = Angle::MoveTowards(0, FLOAT_INFINITY, 30);
|
|
EXPECT_FLOAT_EQ(r, 30) << "MoveTowards 0 FLOAT_INFINITY 30";
|
|
|
|
r = Angle::MoveTowards(0, -90, -FLOAT_INFINITY);
|
|
EXPECT_FLOAT_EQ(r, FLOAT_INFINITY) << "MoveTowards 0 -90 -FLOAT_INFINITY";
|
|
|
|
r = Angle::MoveTowards(0, -FLOAT_INFINITY, -30);
|
|
EXPECT_FLOAT_EQ(r, 30) << "MoveTowards 0 -FLOAT_INFINITY -30";
|
|
}
|
|
}
|
|
|
|
#endif |