using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Azimuth; using Azimuth.DenseLinearAlgebra; using Azimuth.Approximation; namespace Azimuth.UnitTests.Approximation { public class MonomialBasisTests : UnitTestSharp.TestFixture { public class ShiftTests : UnitTestSharp.TestFixture { public void ZeroShift() { DenseVector coefficients = new Scalar[] { 6, 11, 6, 1, }; MonomialBasis.ShiftPolynomialDomain(ref coefficients, 0); DenseVector expected = new Scalar[] { 6, 11, 6, 1, }; CheckEqual(expected, coefficients); } public void Basic() { DenseVector coefficients = new Scalar[] { 6, 11, 6, 1, }; MonomialBasis.ShiftPolynomialDomain(ref coefficients, -1); DenseVector expected = new Scalar[] { 0, 2, 3, 1, }; CheckEqual(expected, coefficients); } } public class ScaleTests : UnitTestSharp.TestFixture { public void Basic() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, }; MonomialBasis.ScalePolynomialDomain(ref coefficients, 2.0); DenseVector expected = new Scalar[] { 1, 2, 4, 8, }; CheckEqual(expected, coefficients); } } public class EvaluateTests : UnitTestSharp.TestFixture { public void Reasonable() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, 1, }; var abscissa = 1.24; CheckEqual(14.6152778997760, MonomialBasis.Evaluate(coefficients, abscissa)); } public void Reasonable_Negative() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, 1, }; var abscissa = -1.24; CheckEqual(2.45877977497600, MonomialBasis.Evaluate(coefficients, abscissa)); } public void Reasonable_Sub() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, }; var abscissa = 1.24; CheckEqual(14.6152778997760, MonomialBasis.Evaluate(coefficients, abscissa, 7)); } public void NegativeRunLength() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, }; var abscissa = 1.24; CheckThrow(typeof(Exception)); MonomialBasis.Evaluate(coefficients, abscissa, -1); } public void RunLengthTooHigh() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, }; var abscissa = 1.24; CheckThrow(typeof(Exception)); MonomialBasis.Evaluate(coefficients, abscissa, 7); } public void ZeroRunLength() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, }; var abscissa = 1.24; CheckEqual(0, MonomialBasis.Evaluate(coefficients, abscissa, 0)); } } public class DerivativeTests : UnitTestSharp.TestFixture { public void Basic() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, }; DenseVector expected = new Scalar[] { 1, 2, 3, 4, 5, 0, }; MonomialBasis.Derivative(ref coefficients); CheckEqual(expected, coefficients); } public void SubLength() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, }; DenseVector expected = new Scalar[] { 1, 2, 3, 0, 1, 1, }; MonomialBasis.Derivative(ref coefficients, 4); CheckEqual(expected, coefficients); } public void RunLengthTooHigh() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, }; CheckThrow(typeof(IndexOutOfRangeException)); MonomialBasis.Derivative(ref coefficients, 7); } public void NegativeRunLength() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, }; CheckThrow(typeof(Exception)); MonomialBasis.Derivative(ref coefficients, -1); } public void ZeroRunLength() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, }; DenseVector expected = new Scalar[] { 1, 1, 1, 1, 1, 1, }; MonomialBasis.Derivative(ref coefficients, 0); CheckEqual(expected, coefficients); } public void OneRunLength() { DenseVector coefficients = new Scalar[] { 1, 1, 1, 1, 1, 1, }; DenseVector expected = new Scalar[] { 0, 1, 1, 1, 1, 1, }; MonomialBasis.Derivative(ref coefficients, 1); CheckEqual(expected, coefficients); } } } }