|
|
@@ -18,6 +18,10 @@
|
|
|
using namespace math::dim2;
|
|
|
using namespace testing;
|
|
|
|
|
|
+namespace math {
|
|
|
+ bool intersects(dim2::triangle const &, dim2::triangle const &);
|
|
|
+}
|
|
|
+
|
|
|
template <typename T, typename G>
|
|
|
decltype(auto) generate(T min, T max, T step, G && generator) {
|
|
|
std::vector<decltype(generator(min))> out;
|
|
|
@@ -243,6 +247,23 @@ TEST(CircleTest, NonIntersecting) {
|
|
|
EXPECT_FALSE(math::intersects(c1, sq));
|
|
|
}
|
|
|
|
|
|
+TEST(TriangleTest, TriangleIntersectsSelf) {
|
|
|
+ triangle tri{{{0, 0}}, {{0, 1}}, {{1, 0}}};
|
|
|
+ EXPECT_TRUE(math::intersects(tri, tri));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(TriangleTest, DoesNotIntersectOffset) {
|
|
|
+ triangle lhs{{{0, 0}}, {{0, 1}}, {{1, 0}}};
|
|
|
+ triangle rhs{{{-1, -1}}, {{-1, 0}}, {{0, -1}}};
|
|
|
+ EXPECT_FALSE(math::intersects(lhs, rhs));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(TriangleTest, DoesNotIntersectOffset2) {
|
|
|
+ triangle lhs{{{0, 0}}, {{0, 1}}, {{1, 0}}};
|
|
|
+ triangle rhs{{{1, 1}}, {{1, 2}}, {{2, 1}}};
|
|
|
+ EXPECT_FALSE(math::intersects(lhs, rhs));
|
|
|
+}
|
|
|
+
|
|
|
TEST(RotateTest, RotatingSquareAroundOrigin) {
|
|
|
math::degree degrees{90.0};
|
|
|
// A square with a side-length of 2 and a center at the origin
|