コード例 #1
0
        public void TestParseAndToString()
        {
            string[] toTest = new string[]
            {
                "a*b*c*d - w*x*y*z",
                "X - 1",
                "2*X^4 + 13*X^3 + 29*X^2 + 29*X + 13",
                "w^2*x*y + w*x + w*y + 1",
                "144*x*y + 12*x + 12*y + 1",
                "144*x*y + 12*y - 12*x - 1",
                "144*x*y - 12*x - 12*y - 1",
                "144*x*y - 12*x - 12*y",
                "144*x",
                "x",
                "1",
                "0"
            };

            int counter = 1;

            foreach (string testString in toTest)
            {
                ComplexMultivariatePolynomial testPolynomial = ComplexMultivariatePolynomial.Parse(testString);
                string expected          = testString;                //.Replace(" ", "");
                string actual            = testPolynomial.ToString(); //.Replace(" ", "");
                bool   isMatch           = (expected == actual);
                string passFailString    = isMatch ? "PASS" : "FAIL";
                string inputOutputString = isMatch ? $"Polynomial: \'{testPolynomial.ToString()}\"" : $"Expected: \"{expected}\"; Actual: \"{actual}\"";
                TestContext.WriteLine($"Test #{counter} => Pass/Fail: \"{passFailString}\" {inputOutputString}");
                Assert.AreEqual(expected, actual, $"Test #{counter}: ComplexMultivariatePolynomial.Parse(\"{testString}\").ToString();");

                counter++;
            }
        }
コード例 #2
0
        public void TestMonomialOrdering()
        {
            string toParse  = "3*X^2*Y^3 + 6*X* Y^4 + X^3*Y^2 + 4*X^5 - 6*X^2*Y + 3*X* Y*Z - 5*X^2 + 3*Y^3 + 24*X* Y - 4";
            string expected = "4*X^5 + 6*X*Y^4 + 3*X^2*Y^3 + X^3*Y^2 + 3*Y^3 - 6*X^2*Y + 3*X*Y*Z - 5*X^2 + 24*X*Y - 4";

            ComplexMultivariatePolynomial poly = ComplexMultivariatePolynomial.Parse(toParse);
            string actual = poly.ToString();

            TestContext.WriteLine($"Result: \"{actual}\".");
            Assert.AreEqual(expected, actual, $"Test of: Monomial Ordering");
        }
コード例 #3
0
        public void TestGetDerivative2()
        {
            string polyString = "4*X^2*Y^4 - 4*X*Y^2 + 1";
            string expected   = "8*X*Y^4 - 4*Y^2";

            ComplexMultivariatePolynomial poly       = ComplexMultivariatePolynomial.Parse(polyString);
            ComplexMultivariatePolynomial derivative = ComplexMultivariatePolynomial.GetDerivative(poly, 'X');

            string actual = derivative.ToString();

            TestContext.WriteLine($"Derivative: \"{derivative}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.GetDerivative({polyString});");
        }
コード例 #4
0
        public void TestPow()
        {
            string polyBaseString = "2*X*Y^2 - 1";
            int    exponent       = 2;

            string expected = "4*X^2*Y^4 - 4*X*Y^2 + 1";

            ComplexMultivariatePolynomial polyBase = ComplexMultivariatePolynomial.Parse(polyBaseString);
            ComplexMultivariatePolynomial power    = ComplexMultivariatePolynomial.Pow(polyBase, exponent);

            string actual = power.ToString();

            TestContext.WriteLine($"Pow: \"{power}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Pow({polyBaseString}, {exponent});");
        }
コード例 #5
0
        public void TestSubtract4()
        {
            string minuend    = "3*X^2*Y^3 + 2*X^3*Y^2 + 6*X*Y^2 + 4*X^3 - 6*X^2*Y + 3*X*Y - 2*X^2 + 12*X - 6";
            string subtrahend = "X^3*Y^2 + 3*X^2 - 3*Y^2 - 12*X - 2";

            string expected = "3*X^2*Y^3 + X^3*Y^2 + 4*X^3 + 6*X*Y^2 - 6*X^2*Y - 5*X^2 + 3*Y^2 + 3*X*Y + 24*X - 4";

            ComplexMultivariatePolynomial polyMinuend    = ComplexMultivariatePolynomial.Parse(minuend);
            ComplexMultivariatePolynomial polySubtrahend = ComplexMultivariatePolynomial.Parse(subtrahend);

            ComplexMultivariatePolynomial difference = ComplexMultivariatePolynomial.Subtract(polyMinuend, polySubtrahend);
            string actual = difference.ToString();

            TestContext.WriteLine($"Subtract: \"{difference}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Subtract: ({minuend}) - ({subtrahend})");
        }
コード例 #6
0
        public void TestSubtract3()
        {
            string minuend    = "2*X^3 + 2*X - 1";
            string subtrahend = "2*X^2 - 5*X - 6";

            string expected = "2*X^3 - 2*X^2 + 7*X + 5";

            ComplexMultivariatePolynomial polyMinuend    = ComplexMultivariatePolynomial.Parse(minuend);
            ComplexMultivariatePolynomial polySubtrahend = ComplexMultivariatePolynomial.Parse(subtrahend);

            ComplexMultivariatePolynomial difference = ComplexMultivariatePolynomial.Subtract(polyMinuend, polySubtrahend);
            string actual = difference.ToString();

            TestContext.WriteLine($"Subtract: \"{difference}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Subtract: ({minuend}) - ({subtrahend})");
        }
コード例 #7
0
        public void TestSubtract2()
        {
            string minuend    = "36*X*Y + 6*X + 6*Y + 1";
            string subtrahend = "36*X*Y + 1";

            string expected = "6*X + 6*Y";

            ComplexMultivariatePolynomial polyMinuend    = ComplexMultivariatePolynomial.Parse(minuend);
            ComplexMultivariatePolynomial polySubtrahend = ComplexMultivariatePolynomial.Parse(subtrahend);

            ComplexMultivariatePolynomial difference = ComplexMultivariatePolynomial.Subtract(polyMinuend, polySubtrahend);
            string actual = difference.ToString();

            TestContext.WriteLine($"Difference: \"{difference}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Subtract: ({minuend}) - ({subtrahend})");
        }
コード例 #8
0
        public void TestDivide2()
        {
            string dividend = "2*X*Y^2 + 3*X*Y + 4*Y^2 + 6*Y";
            string divisor  = "X + 2";

            string expected = "2*Y^2 + 3*Y";

            ComplexMultivariatePolynomial polyDivedend = ComplexMultivariatePolynomial.Parse(dividend);
            ComplexMultivariatePolynomial polyDivisor  = ComplexMultivariatePolynomial.Parse(divisor);

            ComplexMultivariatePolynomial quotient = ComplexMultivariatePolynomial.Divide(polyDivedend, polyDivisor);
            string actual = quotient.ToString();

            TestContext.WriteLine($"Quotient: \"{quotient}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Divide({dividend}, {divisor});");
        }
コード例 #9
0
        public void TestAdd()
        {
            string augend = "X^2 + 2*X - 1";
            string addend = "2*X^2 - 3*X + 6";

            string expected = "3*X^2 - X + 5";

            ComplexMultivariatePolynomial polyAugend = ComplexMultivariatePolynomial.Parse(augend);
            ComplexMultivariatePolynomial polyAddend = ComplexMultivariatePolynomial.Parse(addend);

            ComplexMultivariatePolynomial sum = ComplexMultivariatePolynomial.Add(polyAugend, polyAddend);
            string actual = sum.ToString();

            TestContext.WriteLine($"Sum: \"{sum}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Add({augend}, {addend});");
        }
コード例 #10
0
        public void TestMultiply()
        {
            string lhs      = "6*X + 1";
            string rhs      = "6*Y + 1";
            string expected = "36*X*Y + 6*X + 6*Y + 1";

            ComplexMultivariatePolynomial polylhs = ComplexMultivariatePolynomial.Parse(lhs);
            ComplexMultivariatePolynomial polyrhs = ComplexMultivariatePolynomial.Parse(rhs);

            ComplexMultivariatePolynomial polyProdcut = ComplexMultivariatePolynomial.Multiply(polylhs, polyrhs);

            string actual = polyProdcut.ToString();

            TestContext.WriteLine($"Product: \"{actual}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Multiply({lhs}, {rhs});");
        }
コード例 #11
0
        public void TestSubtract5()
        {
            string minuend    = "504*X*Y*Z^2 + 216*X*Y - 42*X*Z^2 - 18*X + 84*Y*Z^2 + 36*Y - 7*Z^2 - 3";
            string subtrahend = "X*Y*Z^2 + 42*X*Z^2 - 8*X - X^2 - 3";

            string expected = "503*X*Y*Z^2 + 84*Y*Z^2 - 84*X*Z^2 - 7*Z^2 + X^2 + 216*X*Y + 36*Y - 10*X";

            ComplexMultivariatePolynomial polyMinuend    = ComplexMultivariatePolynomial.Parse(minuend);
            ComplexMultivariatePolynomial polySubtrahend = ComplexMultivariatePolynomial.Parse(subtrahend);

            ComplexMultivariatePolynomial difference = ComplexMultivariatePolynomial.Subtract(polyMinuend, polySubtrahend);
            string actual = difference.ToString();

            TestContext.WriteLine($"Subtract: \"{difference}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Subtract: ({minuend}) - ({subtrahend})");
        }
コード例 #12
0
        public void TestGCD()
        {
            throw new NotImplementedException();

            string polyString1 = "11*X + 4";               //"X^4 + 8*X^3 + 21*X^2 + 22*X + 8";
            string polyString2 = "7*X + 2";                //"X^3 + 6*X^2 + 11*X + 6";
            string expected    = "6";                      //"X^2 + 3*X + 2";

            ComplexMultivariatePolynomial poly1 = ComplexMultivariatePolynomial.Parse(polyString1);
            ComplexMultivariatePolynomial poly2 = ComplexMultivariatePolynomial.Parse(polyString2);
            ComplexMultivariatePolynomial gcd   = ComplexMultivariatePolynomial.GCD(poly1, poly2);

            string actual = gcd.ToString();

            TestContext.WriteLine($"GCD: \"{gcd}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.GCD({polyString1}, {polyString2});");
        }
コード例 #13
0
        public void TestEvaluate()
        {
            Complex expected = new Complex(104053773133, 0);

            string polyString = "36*x*y - 6*x - 6*y + 1";
            ComplexMultivariatePolynomial poly           = ComplexMultivariatePolynomial.Parse(polyString);
            List <Tuple <char, Complex> > indeterminants = new List <Tuple <char, Complex> >()
            {
                new Tuple <char, Complex>('x', 45468),
                new Tuple <char, Complex>('y', 63570),
            };

            Complex actual = poly.Evaluate(indeterminants);

            TestContext.WriteLine($"Result: \"{actual}\".");
            Assert.AreEqual(expected, actual, $"Test of: ComplexMultivariatePolynomial.Evaluate({polyString}) where {string.Join(" and ", indeterminants.Select(tup => $"{tup.Item1} = {tup.Item2}"))}");
        }