using System; using Godot; using GodotComponentTest.utils; using GoDotTest; using Xunit; namespace GodotComponentTest.tests; public class Plane2DTests : TestClass { public Plane2DTests(Node testScene) : base(testScene) { } [Test] public void Plane2DDistSimple() { Plane2D plane2D = new(new Vector2(0, 1), new Vector2(0, -1)); Assert.True(Mathf.Abs(plane2D.DistanceToPoint(new Vector2(0, 0)) - 1) < float.Epsilon); Assert.True(Mathf.Abs(plane2D.DistanceToPoint(new Vector2(0, 1))) < float.Epsilon); Assert.True(Mathf.Abs(plane2D.DistanceToPoint(new Vector2(0, 2)) + 1) < float.Epsilon); } [Test] public void Plane2DDistAngled() { Plane2D plane2D = new(new Vector2(0, 1), new Vector2(1, -1).Normalized()); Assert.True(Mathf.Abs(plane2D.DistanceToPoint(new Vector2(0, 1))) < float.Epsilon); Assert.True(Mathf.Abs(plane2D.DistanceToPoint(new Vector2(0, 0)) - MathF.Sqrt(2) / 2) < float.Epsilon); Assert.True(Mathf.Abs(plane2D.DistanceToPoint(new Vector2(-1, 0))) < float.Epsilon); } [Test] public void Plane2DDistLineSegment() { Plane2D plane2D = new(new Vector2(0, 1), new Vector2(1, -1).Normalized()); Assert.True( Mathf.Abs(plane2D.DistanceToLineSegment(new Vector2(0, 0), new Vector2(-1, 0)) - 1) < float.Epsilon); Assert.True(Mathf.Abs(plane2D.DistanceToLineSegment(new Vector2(0, 0), new Vector2(0, 1)) - 1) < float.Epsilon); Assert.True(Mathf.Abs(plane2D.DistanceToLineSegment(new Vector2(0, 0), new Vector2(1, -1).Normalized()) + MathF.Sqrt(2) / 2) < Plane2D.DistancePrecision); Assert.True(Mathf.Abs(plane2D.DistanceToLineSegment(new Vector2(0, 0), new Vector2(-1, 1).Normalized()) - MathF.Sqrt(2) / 2) < Plane2D.DistancePrecision); } [Test] public void Plane2DTestIsParallel() { Plane2D plane2D = new(new Vector2(0, 1), new Vector2(1, -1).Normalized()); Assert.True(plane2D.IsParallelToDir(new Vector2(1, 1.00001f).Normalized())); Assert.True(plane2D.IsParallelToDir(new Vector2(1, 0.99999f).Normalized())); } [Test] public void Plane2DDistLineSegmentParallel() { Plane2D plane2D = new(new Vector2(0, 1), new Vector2(1, -1).Normalized()); Assert.Equal(float.PositiveInfinity, plane2D.DistanceToLineSegment(new Vector2(0, 0), new Vector2(1, 1.00001f).Normalized())); Assert.Equal(float.NegativeInfinity, plane2D.DistanceToLineSegment(new Vector2(0, 0), new Vector2(1, 0.99999f).Normalized())); } }