common_test.cxx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //
  2. // common_test.cxx
  3. // math-test
  4. //
  5. // Created by Sam Jaffe on 5/5/19.
  6. // Copyright © 2019 Sam Jaffe. All rights reserved.
  7. //
  8. #include <cmath>
  9. #include <gmock/gmock.h>
  10. #include "game/math/angle.hpp"
  11. #include "game/math/common.hpp"
  12. #include "game/math/shape.hpp"
  13. #include "test_printers.h"
  14. using namespace math::dim2;
  15. struct UnitCircleTest : testing::TestWithParam<point> {};
  16. TEST_P(UnitCircleTest, PointExistsInCircle) {
  17. circle unit{{{0, 0}}, 1};
  18. EXPECT_TRUE(math::contains(unit, GetParam()));
  19. }
  20. TEST_P(UnitCircleTest, PointExistsOutsideCircle) {
  21. circle subunit{{{0, 0}}, 0.9999};
  22. EXPECT_FALSE(math::contains(subunit, GetParam()));
  23. }
  24. struct unit_circle_angle {
  25. using value_type = point;
  26. unit_circle_angle(int degrees) : degs({static_cast<double>(degrees)}) {}
  27. point operator*() const {
  28. return point(make_vector(math::sin(degs), math::cos(degs)));
  29. }
  30. unit_circle_angle & operator++() { ++degs.value; return *this; }
  31. math::degree degs;
  32. };
  33. std::vector<point> unit_circle_pts() {
  34. std::vector<point> rval;
  35. for (math::degree d{0.0}; d.value <= 360; d.value += 5.0) {
  36. rval.emplace_back(point(make_vector(math::sin(d), math::cos(d))));
  37. }
  38. return rval;
  39. }
  40. INSTANTIATE_TEST_CASE_P(LiesOnEdge, UnitCircleTest,
  41. testing::ValuesIn(unit_circle_pts()));