using Azimuth; using Blacklight.Core.Drawables; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnitTestSharp; namespace Blacklight.Core.UnitTests.Drawables { public class EllipseTests : TestFixture { public void DefaultPosition_IsOrigin() { var matrix = Ellipse.ModelToWorld(new Vector(10, 20)); CheckEqual(new Vector(0, 0), matrix.TransformPoint(Vector.Zero)); } public void ZeroAngle_PinsFullMatrix() { var matrix = Ellipse.ModelToWorld(new Vector(10, 20), position: new Vector(100, 200)); CheckEqual(new Vector(100, 200), matrix.TransformPoint(Vector.Zero)); CheckEqual(new Vector(105, 200), matrix.TransformPoint(new Vector(1, 0))); CheckEqual(new Vector(95, 200), matrix.TransformPoint(new Vector(-1, 0))); CheckEqual(new Vector(100, 210), matrix.TransformPoint(new Vector(0, 1))); CheckEqual(new Vector(100, 190), matrix.TransformPoint(new Vector(0, -1))); } public void NinetyDegreeRotation_PinsFullMatrix() { var matrix = Ellipse.ModelToWorld(new Vector(10, 20), position: new Vector(100, 200), angle: Math.PI / 2); CheckEqual(new Vector(100, 200), matrix.TransformPoint(Vector.Zero)); CheckEqual(new Vector(100, 205), matrix.TransformPoint(new Vector(1, 0))); CheckEqual(new Vector(90, 200), matrix.TransformPoint(new Vector(0, 1))); } public void PositiveAngle_IsCounterClockwise() { var matrix = Ellipse.ModelToWorld(new Vector(10, 10), position: new Vector(0, 0), angle: Math.PI / 2); CheckEqual(new Vector(0, 5), matrix.TransformPoint(new Vector(1, 0))); CheckEqual(new Vector(-5, 0), matrix.TransformPoint(new Vector(0, 1))); } public void NegativeWidth_FlipsXAxis() { var matrix = Ellipse.ModelToWorld(new Vector(-10, 20), position: new Vector(100, 200)); CheckEqual(new Vector(100, 200), matrix.TransformPoint(Vector.Zero)); CheckEqual(new Vector(95, 200), matrix.TransformPoint(new Vector(1, 0))); CheckEqual(new Vector(105, 200), matrix.TransformPoint(new Vector(-1, 0))); } public void FortyFiveDegreeRotation_NonSquare_PinsOffAxisTerms() { Scalar angle = Math.PI / 4; Scalar cos = Math.Cos(angle); Scalar sin = Math.Sin(angle); var matrix = Ellipse.ModelToWorld(new Vector(12, 8), position: new Vector(0, 0), angle: angle); CheckEqual(new Vector(6 * cos, 6 * sin), matrix.TransformPoint(new Vector(1, 0))); CheckEqual(new Vector(-4 * sin, 4 * cos), matrix.TransformPoint(new Vector(0, 1))); } public void AllNonDefaultValues() { Scalar angle = Math.PI / 4; Scalar cos = Math.Cos(angle); Scalar sin = Math.Sin(angle); var matrix = Ellipse.ModelToWorld(new Vector(12, 8), position: new Vector(100, 200), angle: angle); CheckEqual(new Vector(100, 200), matrix.TransformPoint(Vector.Zero)); CheckEqual(new Vector(100 + 6 * cos, 200 + 6 * sin), matrix.TransformPoint(new Vector(1, 0))); CheckEqual(new Vector(100 - 4 * sin, 200 + 4 * cos), matrix.TransformPoint(new Vector(0, 1))); } } }