| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- //
- // 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;
- 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_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));
|