예제 #1
0
        public void testMult()
        {
            IntegerPolynomial i1 = new IntegerPolynomial(new int[] { 1368, 2047, 672, 871, 1662, 1352, 1099, 1608 });
            IntegerPolynomial i2 = new IntegerPolynomial(new int[] { 1729, 1924, 806, 179, 1530, 1381, 1695, 60 });
            LongPolynomial2   a  = new LongPolynomial2(i1);
            LongPolynomial2   b  = new LongPolynomial2(i2);
            IntegerPolynomial c1 = i1.Multiply(i2, 2048);
            IntegerPolynomial c2 = a.Multiply(b).ToIntegerPolynomial();

            Assert.True(c1.coeffs.SequenceEqual(c2.coeffs));

            SecureRandom rng = new SecureRandom();

            for (int i = 0; i < 10; i++)
            {
                int N = 2 + rng.NextInt(2000);
                i1 = PolynomialGenerator.GenerateRandom(N, 2048);
                i2 = PolynomialGenerator.GenerateRandom(N, 2048);
                a  = new LongPolynomial2(i1);
                b  = new LongPolynomial2(i2);
                c1 = i1.Multiply(i2);
                c1.ModPositive(2048);
                c2 = a.Multiply(b).ToIntegerPolynomial();
                Assert.True(c1.coeffs.SequenceEqual(c2.coeffs));
            }
        }
예제 #2
0
        private void MultTest()
        {
            IntegerPolynomial i1 = new IntegerPolynomial(new int[] { 1368, 2047, 672, 871, 1662, 1352, 1099, 1608 });
            IntegerPolynomial i2 = new IntegerPolynomial(new int[] { 1729, 1924, 806, 179, 1530, 1381, 1695, 60 });
            LongPolynomial2   a  = new LongPolynomial2(i1);
            LongPolynomial2   b  = new LongPolynomial2(i2);
            IntegerPolynomial c1 = i1.Multiply(i2, 2048);
            IntegerPolynomial c2 = a.Multiply(b).ToIntegerPolynomial();

            if (!Compare.AreEqual(c1.Coeffs, c2.Coeffs))
            {
                throw new Exception("LongPolynomial2 multiply test failed!");
            }

            // test 10 random polynomials
            Random rng = new Random();

            for (int i = 0; i < 10; i++)
            {
                int N = 2 + rng.Next(2000);
                i1 = (IntegerPolynomial)PolynomialGeneratorForTesting.GenerateRandom(N, 2048);
                i2 = (IntegerPolynomial)PolynomialGeneratorForTesting.GenerateRandom(N, 2048);
                a  = new LongPolynomial2(i1);
                b  = new LongPolynomial2(i2);
                c1 = i1.Multiply(i2);
                c1.ModPositive(2048);
                c2 = a.Multiply(b).ToIntegerPolynomial();

                if (!Compare.AreEqual(c1.Coeffs, c2.Coeffs))
                {
                    throw new Exception("LongPolynomial2 multiply test failed!");
                }
            }
        }