public void RemoveFromEndOutOfRangeUnder()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = new float2(1f, 0f);

            testSpline2D.AddControlPoint(b);

            Assert.AreEqual(2, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(2), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            Assert.AreEqual(0.5f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));

            // Remove a point less than 0
            testSpline2D.RemoveControlPoint(-3);

            Assert.AreEqual(2, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(2), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            Assert.AreEqual(0.5f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));
        }
        public void RemoveFromEnd3Points()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;
            float2 b = new float2(1f, 0f);
            float2 c = new float2(10f, 0f);

            testSpline2D.AddControlPoint(a);
            testSpline2D.AddControlPoint(b);
            testSpline2D.AddControlPoint(c);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(3, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(3), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            Assert.AreEqual(5f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));
            TestHelpers.CheckFloat2(c, testSpline2D.GetControlPoint(2, SplinePoint.Point));

            //Remove a point
            testSpline2D.RemoveControlPoint(2);

            Assert.AreEqual(2, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(2), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            Assert.AreEqual(0.5f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));
        }
        public void RemoveFromOutOfRange()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = c_xOne;

            testSpline2D.AddControlPoint(b);

            Assert.AreEqual(2, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(2), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(1, testSpline2D.Times.Count);
            Assert.AreEqual(1f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));

            //Remove a point
            testSpline2D.RemoveControlPoint(300);

            Assert.AreEqual(1, testSpline2D.ControlPointCount);
            Assert.AreEqual(1, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(1), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(1, testSpline2D.Times.Count);
            Assert.AreEqual(0f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
        }
        public void Add3Remove2()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = c_xOne;

            testSpline2D.AddControlPoint(b);
            float2 c = c_xTwo;

            testSpline2D.AddControlPoint(c);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(3, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            Assert.AreEqual(2f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));
            TestHelpers.CheckFloat2(c, testSpline2D.GetControlPoint(2, SplinePoint.Point));

            // Remove a point
            testSpline2D.RemoveControlPoint(2);

            Assert.AreEqual(2, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(2), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(1, testSpline2D.Times.Count);
            Assert.AreEqual(1f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));

            // Remove another point
            testSpline2D.RemoveControlPoint(1);

            Assert.AreEqual(1, testSpline2D.ControlPointCount);
            Assert.AreEqual(1, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(1), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(1, testSpline2D.Times.Count);
            Assert.AreEqual(0f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
        }
        public void Add1()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(a);

            Assert.AreEqual(1, testSpline2D.ControlPointCount);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(1), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(1, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            Assert.AreEqual(0f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
        }
        public void Add3()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = new float2(1f, 0f);

            testSpline2D.AddControlPoint(b);
            float2 c = new float2(2f, 0f);

            testSpline2D.AddControlPoint(c);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(testSpline2D.ExpectedControlPointCount(3), testSpline2D.ControlPoints.Count);
            Assert.AreEqual(3, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            Assert.AreEqual(1f, testSpline2D.Length());

            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));
            TestHelpers.CheckFloat2(c, testSpline2D.GetControlPoint(2, SplinePoint.Point));
        }