using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Azimuth;
using Annulus.Splines;

namespace Annulus.UnitTests.Splines
{
    public class CubicSplineTests : UnitTestSharp.TestFixture
    {
        public void ScalarTest()
        {
            var spline = new CubicSpline<Scalar>(2, 1, 2, -5);

            CheckEqual(19, spline.EvaluateAt(2));
        }

        public void VectorTest()
        {
            var spline = new CubicSpline<Vector>(new Vector(1, -2), new Vector(-2, 2), new Vector(-1, -1), new Vector(10, 20));

            CheckEqual(new Vector(8, 10), spline.EvaluateAt(2));
        }

        public void AABB_ScalarTest()
        {
            var spline = new CubicSpline<Scalar>(2, 1, 2, -5);
            var range = new Interval(-1, 2);
            var expected = new AABB<Scalar>( -8,19);
            var observed = spline.GetAABB(range);
            CheckEqual(observed, expected);
        }

        public void AABB_VectorTest()
        {
            var spline = new CubicSpline<Vector>(new Vector(2,3), new Vector(1,4), new Vector(2,-3), new Vector(-5, 6));
            var range = new Interval(-1, 2);
            var expected = new AABB<Vector>(new Vector(-8,5.539342744), new Vector(19,40));
            var observed = spline.GetAABB(range);
            CheckEqual(observed, expected);
        }
    }
}