using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth; using Annulus.DiscreteCollisionDetection; using UnitTestSharp; namespace Annulus.UnitTests.DiscreteCollisionDetection { public class LinePointTests : UnitTestSharp.TestFixture { public class FractionAlongLineTests : UnitTestSharp.TestFixture { public void Basic() { Vector pt = new Vector(0, 0); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; Scalar t = LinePoint.FractionAlongLine(line, pt); CheckEqual(0.5, t); } public void Perpindicular() { Vector pt = new Vector(0, 7); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; Scalar t = LinePoint.FractionAlongLine(line, pt); CheckEqual(0.5, t); } public void Infinity_Perp() { Vector pt = new Vector(0, Scalar.PositiveInfinity); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; Scalar t = LinePoint.FractionAlongLine(line, pt); Check(Scalar.IsNaN(t)); } public void Infinity_Parallel() { Vector pt = new Vector(Scalar.PositiveInfinity, 0); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; Scalar t = LinePoint.FractionAlongLine(line, pt); CheckEqual(Scalar.PositiveInfinity, t); } public void Line_Infinity() { Vector pt = new Vector(0, 0); var line = new Line { From = new Vector(Scalar.NegativeInfinity, 0), To = new Vector(Scalar.PositiveInfinity, 0), }; Scalar t = LinePoint.FractionAlongLine(line, pt); Check(Scalar.IsNaN(t)); } } public class DistanceSquaredTests : TestFixture { public void Basic() { Vector point = new Vector(0, 1); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; CheckEqual(1, LinePoint.DistanceSquared(line, point)); } public void LongDistance() { Vector point = new Vector(0, 3); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; CheckEqual(9, LinePoint.DistanceSquared(line, point)); } public void OnLine() { Vector point = new Vector(0, 0); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; CheckEqual(0, LinePoint.DistanceSquared(line, point)); } public void DegenerateLine() { Vector point = new Vector(1, 0); var line = new Line { From = new Vector(-1, 0), To = new Vector(-1, 0), }; CheckEqual(4, LinePoint.DistanceSquared(line, point)); } public void AllPointsCoincident() { Vector point = new Vector(-1, 0); var line = new Line { From = new Vector(-1, 0), To = new Vector(-1, 0), }; CheckEqual(0, LinePoint.DistanceSquared(line, point)); } } } }