using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Azimuth;
using UnitTestSharp;
using Annulus.DeprecatedShapes;
using Lodestone.DiscreteCollisionDetection;

namespace Lodestone.UnitTests.DiscreteCollisionDetection
{
	/*public class ShapeToShape : TestFixture
	{
		ISimpleConvexShape quad = new Polygon(new Vector[] {
            new Vector(-1,  1),
            new Vector( 1,  1),
            new Vector( 1, -1),
            new Vector(-1, -1),
        } );

        ISimpleConvexShape diamond = new Polygon(new Vector[] {
            new Vector( 1,  0),
            new Vector( 0,  1),
            new Vector(-1,  0),
            new Vector( 0, -1),
        });

		DualVector ptA;
		DualVector ptB;

		public void ClosestPoints_VertexEdge()
		{
			Matrix transformA = new Matrix(0, new Vector(0, 0));
			Matrix transformB = new Matrix(-Math.PI / 4, new Vector(-20, 0));
            Matrix inverseA;
            Matrix inverseB;

            transformA.Inverse(out inverseA);
            transformB.Inverse(out inverseB);

			Lodestone.DiscreteCollisionDetection.ShapeToShape.ClosestPointsOnShapesToEachOther(
				quad, transformA, inverseA, out ptA,
				quad, transformB, inverseB, out ptB
				);

			CheckEqual(new Vector(-1, 0), ptA.LocalSpace);
			CheckEqual(new Vector(1, 1), ptB.LocalSpace);
		}
		
		public void ClosestPoints_VertexVertex()
		{
			Matrix transformA = new Matrix(-Math.PI / 4, new Vector(-20, 0));
			Matrix transformB = new Matrix(Math.PI / 4, new Vector(20, 0));

            Matrix inverseA;
            Matrix inverseB;

            transformA.Inverse(out inverseA);
            transformB.Inverse(out inverseB);

			Lodestone.DiscreteCollisionDetection.ShapeToShape.ClosestPointsOnShapesToEachOther(
				quad, transformA, inverseA, out ptA,
				quad, transformB, inverseB, out ptB
				);

			CheckEqual(new Vector(1, 1), ptA.LocalSpace);
			CheckEqual(new Vector(-1, 1), ptB.LocalSpace);
		}

		public void ClosestPoints_EdgeEdge()
		{
			Matrix transformA = new Matrix(0, new Vector(0, 0));
			Matrix transformB = new Matrix(0, new Vector(2.5, 1));

            Matrix inverseA;
            Matrix inverseB;

            transformA.Inverse(out inverseA);
            transformB.Inverse(out inverseB);

			Lodestone.DiscreteCollisionDetection.ShapeToShape.ClosestPointsOnShapesToEachOther(
				diamond, transformA, inverseA, out ptA,
				diamond, transformB, inverseB, out ptB
				);

			CheckEqual(1.125, (ptB.WorldSpace - ptA.WorldSpace).LengthSquared());
		}

		public void ClosestPoints_VertexEdge_Touching()
		{
			Matrix transformA = new Matrix(0, new Vector(0, 0));
			Matrix transformB = new Matrix(-Math.PI / 4, new Vector(-1 - Math.Sqrt(2), 0));

            Matrix inverseA;
            Matrix inverseB;

            transformA.Inverse(out inverseA);
            transformB.Inverse(out inverseB);

			Lodestone.DiscreteCollisionDetection.ShapeToShape.ClosestPointsOnShapesToEachOther(
                quad, transformA, inverseA, out ptA,
                quad, transformB, inverseB, out ptB
				);

			CheckEqual(new Vector(-1, 0), ptA.LocalSpace);
			CheckEqual(new Vector(1, 1), ptB.LocalSpace);
		}

		public void ClosestPoints_VertexVertex_Touching()
		{
			Matrix transformA = new Matrix(-Math.PI / 4, new Vector(0, 0));
			Matrix transformB = new Matrix(Math.PI / 4, new Vector(2 * Math.Sqrt(2), 0));

            Matrix inverseA;
            Matrix inverseB;

            transformA.Inverse(out inverseA);
            transformB.Inverse(out inverseB);

			Lodestone.DiscreteCollisionDetection.ShapeToShape.ClosestPointsOnShapesToEachOther(
                quad, transformA, inverseA, out ptA,
                quad, transformB, inverseB, out ptB
				);

			CheckEqual(new Vector(1, 1), ptA.LocalSpace);
			CheckEqual(new Vector(-1, 1), ptB.LocalSpace);
		}

		public void ClosestPoints_EdgeEdge_Touching()
		{
			Matrix transformA = new Matrix(0, new Vector(0, 0));
			Matrix transformB = new Matrix(0, new Vector(1, 1));
            Matrix inverseA;
            Matrix inverseB;

            transformA.Inverse(out inverseA);
            transformB.Inverse(out inverseB);

			Lodestone.DiscreteCollisionDetection.ShapeToShape.ClosestPointsOnShapesToEachOther(
				diamond, transformA, inverseA, out ptA,
				diamond, transformB, inverseB, out ptB
				);

			CheckEqual(0, (ptB.WorldSpace - ptA.WorldSpace).LengthSquared());
		}
	}*/
}