|
|
@@ -0,0 +1,82 @@
|
|
|
+//
|
|
|
+// angle_test.cxx
|
|
|
+// math-test
|
|
|
+//
|
|
|
+// Created by Sam Jaffe on 6/1/19.
|
|
|
+// Copyright © 2019 Sam Jaffe. All rights reserved.
|
|
|
+//
|
|
|
+
|
|
|
+#include "game/math/angle.hpp"
|
|
|
+#include <gmock/gmock.h>
|
|
|
+
|
|
|
+using testing::DoubleNear;
|
|
|
+using testing::Eq;
|
|
|
+
|
|
|
+// Degree -> Radian
|
|
|
+TEST(RadianTest, ZeroDegreeIsZeroRadian) {
|
|
|
+ math::degree degrees{0};
|
|
|
+ EXPECT_THAT(math::radian{degrees}.value, Eq(0.0));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(RadianTest, OneRadianIsAbout57Degrees) {
|
|
|
+ math::degree degrees{57.2957795131};
|
|
|
+ EXPECT_THAT(math::radian{degrees}.value, DoubleNear(1, 1E-10));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(RadianTest, OneEightyDegreeIsPiRadians) {
|
|
|
+ math::degree degrees{180};
|
|
|
+ EXPECT_THAT(math::radian{degrees}.value, DoubleNear(M_PI, 1E-12));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(RadianTest, NinetyDegreeIsHalfPiRadians) {
|
|
|
+ math::degree degrees{90};
|
|
|
+ EXPECT_THAT(math::radian{degrees}.value, DoubleNear(M_PI_2, 1E-12));
|
|
|
+}
|
|
|
+
|
|
|
+// Radian -> Degree
|
|
|
+TEST(DegreeTest, ZeroDegreeIsZeroRadian) {
|
|
|
+ math::radian radians{0};
|
|
|
+ EXPECT_THAT(math::degree{radians}.value, Eq(0.0));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DegreeTest, OneRadianIsAbout57Degrees) {
|
|
|
+ math::radian radians{1.0};
|
|
|
+ // 1E-10 because that's how many digits I wrote down
|
|
|
+ EXPECT_THAT(math::degree{radians}.value, DoubleNear(57.2957795131, 1E-10));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DegreeTest, OneEightyDegreeIsPiRadians) {
|
|
|
+ math::radian radians{M_PI};
|
|
|
+ EXPECT_THAT(math::degree{radians}.value, DoubleNear(180.0, 1E-12));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DegreeTest, NinetyDegreeIsHalfPiRadians) {
|
|
|
+ math::radian radians{M_PI_2};
|
|
|
+ EXPECT_THAT(math::degree{radians}.value, DoubleNear(90, 1E-12));
|
|
|
+}
|
|
|
+
|
|
|
+// Trigonometry
|
|
|
+struct TrigonometryTest : testing::TestWithParam<double> {};
|
|
|
+
|
|
|
+TEST_P(TrigonometryTest, SinRadianIsSinDouble) {
|
|
|
+ double const angle = GetParam();
|
|
|
+ math::radian rad{angle};
|
|
|
+ EXPECT_THAT(sin(rad), sin(angle));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_P(TrigonometryTest, CosRadianIsCosDouble) {
|
|
|
+ double const angle = GetParam();
|
|
|
+ math::radian rad{angle};
|
|
|
+ EXPECT_THAT(cos(rad), cos(angle));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_P(TrigonometryTest, TanRadianIsTanDouble) {
|
|
|
+ double const angle = GetParam();
|
|
|
+ math::radian rad{angle};
|
|
|
+ EXPECT_THAT(tan(rad), tan(angle));
|
|
|
+}
|
|
|
+
|
|
|
+using testing::Values;
|
|
|
+INSTANTIATE_TEST_CASE_P(MapsToRawValue, TrigonometryTest,
|
|
|
+ Values(0.0, M_PI_4, M_PI_2, 3 * M_PI_4, M_PI,
|
|
|
+ 5 * M_PI_4, 3 * M_PI_2, 7 * M_PI_4, 2 * M_PI));
|