public void EvalTest()
        {
            // Expected values calculated using Wolfram Alpha https://www.wolframalpha.com/
            var    f    = new Polynomial(new double[] { 1, 2, 3 });
            double fVal = f.EvaluateAt(1);

            Assert.AreEqual(6, fVal, 0.1);
            fVal = f.EvaluateAt(2);
            Assert.AreEqual(17, fVal, 0.1);
            fVal = f.EvaluateAt(3.415);
            Assert.AreEqual(42.8167, fVal, 0.1);
            fVal = f.EvaluateAt(-50.543);
            Assert.AreEqual(7563.7, fVal, 0.1);

            f    = new Polynomial(new double[] { 83.23, 99.0, -92.23, 12, 13, 190 });
            fVal = f.EvaluateAt(-9.345);
            Assert.AreEqual(-1.3460527721401352e7, fVal, 0.0001);
            fVal = f.EvaluateAt(0.0493);
            Assert.AreEqual(87.8881, fVal, 0.0001);
        }
        public void MultiplicationTest()
        {
            // (1 + x + x^2)(2 + 3x) = (2 + 5x + 5x^2 + 3x^3)
            var        f      = new Polynomial(new double[] { 1, 1, 1 });
            var        g      = new Polynomial(new double[] { 2, 3 });
            Polynomial result = f * g;

            Assert.AreEqual(3, result.Degree);
            Assert.AreEqual(2, result.Coefficients[0]);
            Assert.AreEqual(5, result.Coefficients[1]);
            Assert.AreEqual(5, result.Coefficients[2]);
            Assert.AreEqual(3, result.Coefficients[3]);

            // Degree 5: (2 + 4x^3 - 93x^5)
            f = new Polynomial(new double[] { 2, 0, 0, 4, 0, -93 });

            // Degree 17: (42x + 2.1x^17)
            var gCoefficients = new double[18];

            gCoefficients[1]  = 42;
            gCoefficients[17] = 2.1;
            g = new Polynomial(gCoefficients);

            // This should result in a degree 22 polynomial
            // Expecting: -195.3 x^22 + 8.4 x^20 + 4.2 x^17 - 3906 x^6 + 168 x^4 + 84 x
            result = f * g;
            Assert.AreEqual(22, result.Degree);
            Assert.AreEqual(-195.3, result.Coefficients[22]);
            Assert.AreEqual(0, result.Coefficients[21]);
            Assert.AreEqual(8.4, result.Coefficients[20]);
            Assert.AreEqual(4.2, result.Coefficients[17]);
            Assert.AreEqual(-3906, result.Coefficients[6]);
            Assert.AreEqual(168, result.Coefficients[4]);
            Assert.AreEqual(84, result.Coefficients[1]);
            Assert.AreEqual(0, result.Coefficients[0]);
            double val = result.EvaluateAt(0.5);

            Assert.AreEqual(-8.53126, val, 0.0001);
            Console.WriteLine(result);
        }