// // 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 using testing::DoubleNear; using testing::Eq; TEST(RadianTest, Negation) { math::radian radians{M_PI}; EXPECT_THAT((-radians).value, -M_PI); EXPECT_THAT((-(-radians)).value, radians.value); } TEST(DegreeTest, Negation) { math::degree degrees{180.0}; EXPECT_THAT((-degrees).value, -180.0); EXPECT_THAT((-(-degrees)).value, degrees.value); } // 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 {}; 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_SUITE_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));