| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //
- // 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 <testing/xcode_gtest_helper.h>
- 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<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_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));
|