MoonTools.Bonk/Test/GJK2DTest.cs

203 lines
6.8 KiB
C#
Raw Normal View History

2019-09-06 08:11:58 +00:00
using NUnit.Framework;
using MoonTools.Core.Bonk;
using MoonTools.Core.Structs;
using Microsoft.Xna.Framework;
2019-10-25 10:46:47 +00:00
using FluentAssertions;
2019-09-06 08:11:58 +00:00
namespace Tests
{
public class GJK2DTest
{
[Test]
public void LineLineOverlapping()
{
var lineA = new Line(new Position2D(-1, -1), new Position2D(1, 1));
var lineB = new Line(new Position2D(-1, 1), new Position2D(1, -1));
2019-10-25 10:46:47 +00:00
GJK2D.TestCollision(lineA, Transform2D.DefaultTransform, lineB, Transform2D.DefaultTransform).Should().BeTrue();
2019-09-06 08:11:58 +00:00
}
[Test]
public void LineLineNotOverlapping()
{
var lineA = new Line(new Position2D(0, 1), new Position2D(1, 0));
var lineB = new Line(new Position2D(-1, -1), new Position2D(-2, -2));
2019-10-25 10:46:47 +00:00
GJK2D.TestCollision(lineA, Transform2D.DefaultTransform, lineB, Transform2D.DefaultTransform).Should().BeFalse();
2019-09-06 08:11:58 +00:00
}
[Test]
public void CircleCircleOverlapping()
{
var circleA = new Circle(2);
var transformA = new Transform2D(new Vector2(-1, -1));
var circleB = new Circle(2);
var transformB = new Transform2D(new Vector2(1, 1));
2019-10-25 10:46:47 +00:00
Assert.IsTrue(GJK2D.TestCollision(circleA, transformA, circleB, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void CircleCircleNotOverlapping()
{
var circleA = new Circle(2);
var transformA = new Transform2D(new Vector2(-5, -5));
var circleB = new Circle(2);
var transformB = new Transform2D(new Vector2(5, 5));
2019-10-25 10:46:47 +00:00
Assert.IsFalse(GJK2D.TestCollision(circleA, transformA, circleB, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void PolygonPolygonOverlapping()
{
var shapeA = new Polygon(
new Position2D(-1, 1), new Position2D(1, 1),
new Position2D(-1, -1), new Position2D(1, -1)
);
var transformA = Transform2D.DefaultTransform;
var shapeB = new Polygon(
new Position2D(-1, 1), new Position2D(1, 1),
new Position2D(-1, -1), new Position2D(1, -1)
);
var transformB = new Transform2D(new Vector2(0.5f, 0.5f));
2019-10-25 10:46:47 +00:00
Assert.IsTrue(GJK2D.TestCollision(shapeA, transformA, shapeB, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void PolygonPolygonNotOverlapping()
{
2019-09-15 20:39:45 +00:00
var shapeA = new Polygon(
2019-09-06 08:11:58 +00:00
new Position2D(-1, 1), new Position2D(1, 1),
new Position2D(-1, -1), new Position2D(1, -1)
);
var transformA = Transform2D.DefaultTransform;
var shapeB = new Polygon(
new Position2D(-1, 1), new Position2D(1, 1),
new Position2D(-1, -1), new Position2D(1, -1)
);
var transformB = new Transform2D(new Vector2(5, 0));
2019-10-25 10:46:47 +00:00
Assert.IsFalse(GJK2D.TestCollision(shapeA, transformA, shapeB, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void LinePolygonOverlapping()
{
var line = new Line(new Position2D(-1, -1), new Position2D(1, 1));
var transformA = Transform2D.DefaultTransform;
var polygon = new Polygon(
new Position2D(-1, -1), new Position2D(1, -1),
new Position2D(1, 1), new Position2D(-1, 1)
);
var transformB = Transform2D.DefaultTransform;
2019-10-25 10:46:47 +00:00
Assert.IsTrue(GJK2D.TestCollision(line, transformA, polygon, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void LinePolygonNotOverlapping()
{
var line = new Line(new Position2D(-5, 5), new Position2D(-5, 5));
var transformA = Transform2D.DefaultTransform;
2019-09-15 20:39:45 +00:00
var polygon = new Polygon(
2019-09-06 08:11:58 +00:00
new Position2D(-1, -1), new Position2D(1, -1),
new Position2D(1, 1), new Position2D(-1, 1)
);
var transformB = Transform2D.DefaultTransform;
2019-10-25 10:46:47 +00:00
Assert.IsFalse(GJK2D.TestCollision(line, transformA, polygon, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void LineCircleOverlapping()
{
var line = new Line(new Position2D(-1, -1), new Position2D(1, 1));
var transformA = Transform2D.DefaultTransform;
var circle = new Circle(1);
var transformB = Transform2D.DefaultTransform;
2019-10-25 10:46:47 +00:00
Assert.IsTrue(GJK2D.TestCollision(line, transformA, circle, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void LineCircleNotOverlapping()
{
var line = new Line(new Position2D(-5, -5), new Position2D(-4, -4));
var transformA = Transform2D.DefaultTransform;
var circle = new Circle(1);
var transformB = Transform2D.DefaultTransform;
2019-10-25 10:46:47 +00:00
Assert.IsFalse(GJK2D.TestCollision(line, transformA, circle, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void CirclePolygonOverlapping()
{
var circle = new Circle(1);
var transformA = new Transform2D(new Vector2(0.25f, 0));
var square = new Polygon(
new Position2D(-1, -1), new Position2D(1, -1),
new Position2D(1, 1), new Position2D(-1, 1)
);
var transformB = Transform2D.DefaultTransform;
2019-10-25 10:46:47 +00:00
Assert.IsTrue(GJK2D.TestCollision(circle, transformA, square, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void CirclePolygonNotOverlapping()
{
var circle = new Circle(1);
var circleTransform = new Transform2D(new Vector2(5, 0));
2019-09-15 20:39:45 +00:00
var square = new Polygon(
2019-09-06 08:11:58 +00:00
new Position2D(-1, -1), new Position2D(1, -1),
new Position2D(1, 1), new Position2D(-1, 1)
);
var squareTransform = Transform2D.DefaultTransform;
2019-10-25 10:46:47 +00:00
Assert.IsFalse(GJK2D.TestCollision(circle, circleTransform, square, squareTransform));
2019-09-06 08:11:58 +00:00
}
[Test]
public void RotatedRectanglesOverlapping()
{
var rectangleA = new MoonTools.Core.Bonk.Rectangle(-1, -1, 2, 2);
var transformA = new Transform2D(new Vector2(-1, 0), -90f);
var rectangleB = new MoonTools.Core.Bonk.Rectangle(-1, -1, 1, 1);
var transformB = new Transform2D(new Vector2(1, 0));
2019-10-25 10:46:47 +00:00
Assert.IsTrue(GJK2D.TestCollision(rectangleA, transformA, rectangleB, transformB));
2019-09-06 08:11:58 +00:00
}
[Test]
public void RectanglesTouching()
{
var rectangleA = new MoonTools.Core.Bonk.Rectangle(-1, -1, 1, 1);
var transformA = new Transform2D(new Position2D(-1, 0));
var rectangleB = new MoonTools.Core.Bonk.Rectangle(-1, -1, 1, 1);
var transformB = new Transform2D(new Vector2(1, 0));
2019-10-25 10:46:47 +00:00
Assert.IsTrue(GJK2D.TestCollision(rectangleA, transformA, rectangleB, transformB));
2019-09-06 08:11:58 +00:00
}
}
}