static RecursiveGeneratorTests()
        {
            var gf3 = new PrimeOrderField(3);

            VariatePositionsAndValuesTestsData
                = new[]
                {
                new object[]
                {
                    gf3, 3, 2, null,
                    new[]
                    {
                        new[] { gf3.CreateElement(1), gf3.CreateElement(1), gf3.Zero() },
                        new[] { gf3.CreateElement(1), gf3.CreateElement(2), gf3.Zero() },
                        new[] { gf3.CreateElement(2), gf3.CreateElement(1), gf3.Zero() },
                        new[] { gf3.CreateElement(2), gf3.CreateElement(2), gf3.Zero() },

                        new[] { gf3.CreateElement(1), gf3.Zero(), gf3.CreateElement(1) },
                        new[] { gf3.CreateElement(1), gf3.Zero(), gf3.CreateElement(2) },
                        new[] { gf3.CreateElement(2), gf3.Zero(), gf3.CreateElement(1) },
                        new[] { gf3.CreateElement(2), gf3.Zero(), gf3.CreateElement(2) },

                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(2) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(2) }
                    }
                },
                new object[]
                {
                    gf3, 3, 2, new[] { gf3.CreateElement(1), gf3.Zero(), gf3.CreateElement(2) },
                    new[]
                    {
                        new[] { gf3.CreateElement(1), gf3.Zero(), gf3.CreateElement(2) },
                        new[] { gf3.CreateElement(2), gf3.Zero(), gf3.CreateElement(1) },
                        new[] { gf3.CreateElement(2), gf3.Zero(), gf3.CreateElement(2) },

                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(2) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(2) }
                    }
                }
                };
            VariateValuesTestsData
                = new[]
                {
                new object[]
                {
                    new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(1) },
                    new[]
                    {
                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(2) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(2) }
                    }
                }
                };
        }
Exemple #2
0
        static G11GolayCodeTests()
        {
            var gf3 = new PrimeOrderField(3);

            FieldElement[] InformationWordBuilder(IEnumerable <int> array) => array.Select(x => gf3.CreateElement(x)).ToArray();

            DecodeTestsData
                = new TheoryData <GolayCodeTestCase>
                {
                new GolayCodeTestCase {
                    InformationWord = InformationWordBuilder(new[] { 1, 2, 0, 0, 1, 2 })
                },
                new GolayCodeTestCase {
                    InformationWord = InformationWordBuilder(new[] { 0, 1, 2, 1, 2, 2 })
                },
                new GolayCodeTestCase {
                    InformationWord = InformationWordBuilder(new[] { 0, 0, 0, 2, 1, 1 })
                },
                new GolayCodeTestCase {
                    InformationWord = InformationWordBuilder(new[] { 0, 0, 0, 0, 0, 0 })
                },
                new GolayCodeTestCase {
                    InformationWord = InformationWordBuilder(new[] { 2, 2, 2, 2, 2, 2 })
                },
                };
        }
        static PolynomialUnderPrimeOrderFieldTest()
        {
            Gf2 = new PrimeOrderField(2);
            Gf3 = new PrimeOrderField(3);


            DevideTestsData = new[]
            {
                new object[] { Gf2, new[] { 1 }, new[] { 1, 1, 0, 1 }, new[] { 0 } },
                new object[] { Gf2, new[] { 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 0 } },
                new object[] { Gf2, new[] { 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 0, 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 1, 0, 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 1, 1, 0, 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 0, 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 1, 1, 1, 0, 1 } },
                new object[] { Gf3, new[] { 0, 0, 0, 1 }, new[] { 1, 1 }, new[] { 1, 2, 1 } }
            };
            ModuloTestsData = new[]
            {
                new object[] { Gf2, new[] { 1 }, new[] { 1, 1, 0, 1 }, new[] { 1 } },
                new object[] { Gf2, new[] { 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 0, 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 1, 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 0, 1, 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 1, 1, 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 1, 0, 1 } },
                new object[] { Gf2, new[] { 0, 0, 0, 0, 0, 0, 0, 1 }, new[] { 1, 1, 0, 1 }, new[] { 1 } },
                new object[] { Gf3, new[] { 0, 0, 0, 1 }, new[] { 1, 1 }, new[] { 2 } }
            };
        }
        static GsBasedDecoderTests()
        {
            var gf7 = new PrimeOrderField(7);
            var generationPolynomial1 = new Polynomial(gf7, 4, 2, 6, 4, 3, 4)
                                        + new Polynomial(gf7, 1, 2, 1, 5, 2, 1).RightShift(2);

            var gf8 = new PrimePowerOrderField(8, new Polynomial(new PrimeOrderField(2), 1, 1, 0, 1));
            var generationPolynomial2 = new Polynomial(gf8, 0, 0, 2, 5, 6, 0, 1);

            var gf9 = new PrimePowerOrderField(9, new Polynomial(new PrimeOrderField(3), 1, 0, 1));
            var generationPolynomial3 = new Polynomial(gf9, 1, 2, 7, 2, 2, 2, 1, 5, 7);

            var gf11 = new PrimeOrderField(11);
            var generationPolynomial4 = new Polynomial(gf11, 0, 0, 7, 3, 4, 1, 8, 1, 8, 2, 7, 5);
            var generationPolynomial5 = new Polynomial(gf11, 0, 0, 2, 0, 10, 9, 3, 9, 3, 10, 2, 2);

            var gf13 = new PrimeOrderField(13);
            var generationPolynomial6 = new Polynomial(gf13, 0, 0, 0, 8, 1, 12, 2, 11, 5, 6, 4, 2, 3, 12, 2, 4);

            var gf16 = new PrimePowerOrderField(16, new Polynomial(new PrimeOrderField(2), 1, 0, 0, 1, 1));
            var generationPolynomial7 = new Polynomial(gf16, 3, 3, 13, 2, 4, 5, 2, 9, 11, 11, 14, 3, 9, 11, 10);

            var gf27 = new PrimePowerOrderField(27, new Polynomial(new PrimeOrderField(3), 2, 2, 0, 1));
            var generationPolynomial8 = new Polynomial(gf27, 0, 0, 20, 18, 14, 15, 2, 5, 2, 19, 17, 4, 23, 1, 8, 6, 5, 4, 20, 26, 6, 5, 16,
                                                       23, 26, 15, 6, 25, 18, 22, 8, 4, 17, 20, 19, 18, 8, 6, 23, 12, 20, 22, 8, 7, 0, 7, 6, 3, 11);

            var gf32 = new PrimePowerOrderField(32, new Polynomial(new PrimeOrderField(2), 1, 0, 0, 1, 0, 1));
            var generationPolynomial9 = new Polynomial(gf32, 6, 27, 1, 17, 13, 28, 18, 23, 15, 12, 3, 8, 5, 28, 1, 5, 29, 17, 18, 10, 12,
                                                       18, 27, 22, 28, 22, 8, 2, 26, 18, 3);
            var generationPolynomial10 = new Polynomial(gf32, 7, 24, 2, 0, 5, 29, 2, 18, 3, 1, 15, 22, 1, 16, 29, 17, 6, 16, 17, 25, 21, 26,
                                                        10, 30, 18, 6, 24, 4, 31, 14, 15);

            var encoder = new Encoder();

            DecoderTestsData = new[]
            {
                PrepareTestData(encoder, 6, 3, 3, generationPolynomial1, new Polynomial(gf7, 4, 0, 2), 1),
                PrepareTestData(encoder, 6, 3, 3, generationPolynomial1, new Polynomial(gf7, 1, 2, 3), 1),
                PrepareTestData(encoder, 6, 3, 3, generationPolynomial1, new Polynomial(gf7, 6, 4, 1), 1),
                PrepareTestData(encoder, 6, 3, 3, generationPolynomial1, new Polynomial(gf7, 0, 2), 1),
                PrepareTestData(encoder, 6, 3, 3, generationPolynomial1, new Polynomial(gf7, 0, 0, 3), 1),
                PrepareTestData(encoder, 7, 3, 4, generationPolynomial2, new Polynomial(gf8, 0, 0, 3), 2),
                PrepareTestData(encoder, 7, 3, 4, generationPolynomial2, new Polynomial(gf8, 1), 2),
                PrepareTestData(encoder, 8, 4, 4, generationPolynomial3, new Polynomial(gf9, 0, 0, 3), 2),
                PrepareTestData(encoder, 8, 4, 4, generationPolynomial3, new Polynomial(gf9, 1, 2, 3, 4), 2),
                PrepareTestData(encoder, 8, 4, 4, generationPolynomial3, new Polynomial(gf9, 1, 2), 2),
                PrepareTestData(encoder, 8, 4, 4, generationPolynomial3, new Polynomial(gf9, 0, 0, 0, 6), 2),
                PrepareTestData(encoder, 10, 5, 6, generationPolynomial4, new Polynomial(gf11, 1, 2, 3, 4, 5), 3),
                PrepareTestData(encoder, 10, 5, 5, generationPolynomial5, new Polynomial(gf11, 1, 2, 3, 4, 5), 2),
                PrepareTestData(encoder, 12, 6, 6, generationPolynomial6, new Polynomial(gf13, 1, 2, 3, 4, 5, 6), 3),
                PrepareTestData(encoder, 12, 6, 6, generationPolynomial6, new Polynomial(gf13, 0, 2, 0, 2, 11), 3),
                PrepareTestData(encoder, 15, 7, 8, generationPolynomial7, new Polynomial(gf16, 1, 2, 14, 2, 11), 4),
                PrepareTestData(encoder, 15, 7, 8, generationPolynomial7, new Polynomial(gf16, 0, 0, 0, 1, 12, 12, 1), 4),
                PrepareTestData(encoder, 26, 13, 12, generationPolynomial8, new Polynomial(gf27, 0, 2, 0, 2, 11), 6),
                PrepareTestData(encoder, 31, 15, 16, generationPolynomial9, new Polynomial(gf32, 19, 2, 7, 2, 12, 23, 26), 8),
                PrepareTestData(encoder, 31, 15, 16, generationPolynomial9, new Polynomial(gf32, 0, 2, 7, 2, 2, 0, 26), 8),
                PrepareTestData(encoder, 31, 15, 16, generationPolynomial9, new Polynomial(gf32, 16, 30, 23), 8),
                PrepareTestData(encoder, 31, 15, 15, generationPolynomial10, new Polynomial(gf32, 19, 2, 7, 2, 12, 30, 11), 8)
            };
        }
Exemple #5
0
        private static void AnalyzeSamplesForN30K15D13Code()
        {
            var field = new PrimeOrderField(31);
            var informationPolynomial = new Polynomial(field);
            var encoder = new Encoder();
            var samples = new[]
            {
                new AnalyzingSample(informationPolynomial, encoder.Encode(30, informationPolynomial, informationPolynomial))
                {
                    ErrorPositions     = new[] { 2, 6, 8, 15, 16, 22, 24 },
                    CurrentNoiseValue  = new[] { 1, 1, 12, 12, 5, 18, 20 },
                    CorrectValuesCount = 23
                },
                new AnalyzingSample(informationPolynomial, encoder.Encode(30, informationPolynomial, informationPolynomial))
                {
                    ErrorPositions     = new[] { 0, 1, 2, 3, 4, 5, 6 },
                    CurrentNoiseValue  = new[] { 1, 3, 1, 8, 2, 20, 8 },
                    CorrectValuesCount = 23
                }
            };

            try
            {
                AnalyzeSamples(30, 15, 13,
                               new Polynomial(field, 22, 0, 2, 1, 27, 8, 4, 18, 6, 9, 8, 17, 11),
                               samples);
            }
            catch (Exception exception)
            {
                _logger.LogError(0, exception, "Exception occurred during analysis");
                throw;
            }
        }
Exemple #6
0
        private static void AnalyzeSamplesForN100K50D49Code()
        {
            var field = new PrimeOrderField(101);
            var informationPolynomial = new Polynomial(field);
            var encoder = new Encoder();
            var samples = new[]
            {
                new AnalyzingSample(informationPolynomial, encoder.Encode(100, informationPolynomial, informationPolynomial))
                {
                    ErrorPositions     = new[] { 2, 6, 8, 15, 16, 22, 23, 28, 35, 37, 47, 50, 51, 52, 67, 70, 71, 72, 77, 78, 79, 81, 83, 84, 86, 88, 91, 92 },
                    CurrentNoiseValue  = new[] { 1, 1, 6, 4, 4, 14, 7, 3, 8, 23, 76, 1, 5, 8, 2, 6, 2, 14, 45, 64, 13, 54, 34, 64, 34, 2, 64, 23 },
                    CorrectValuesCount = 72
                },
                new AnalyzingSample(informationPolynomial, encoder.Encode(100, informationPolynomial, informationPolynomial))
                {
                    ErrorPositions     = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 },
                    CurrentNoiseValue  = new[] { 1, 1, 6, 4, 4, 14, 7, 3, 8, 23, 76, 1, 5, 8, 2, 6, 2, 14, 45, 64, 13, 54, 34, 64, 34, 2, 64, 23 },
                    CorrectValuesCount = 72
                }
            };

            try
            {
                AnalyzeSamples(100, 50, 49,
                               new Polynomial(field, 78, 2, 67, 50, 2, 45, 45, 20, 77, 7, 42, 56, 0, 67, 60, 50),
                               samples);
            }
            catch (Exception exception)
            {
                _logger.LogError(0, exception, "Exception occurred during analysis");
                throw;
            }
        }
        static KotterAlgorithmBasedBuilderTests()
        {
            var gf5  = new PrimeOrderField(5);
            var gf8  = new PrimePowerOrderField(8, new Polynomial(new PrimeOrderField(2), 1, 1, 0, 1));
            var gf27 = new PrimePowerOrderField(27, new Polynomial(new PrimeOrderField(3), 2, 2, 0, 1));

            var degreeWeight = new Tuple <int, int>(1, 2);

            SuccessConstructionTestsData
                = new TheoryData <InterpolationPolynomialBuilderTestCase>
                {
                new InterpolationPolynomialBuilderTestCase
                {
                    DegreeWeight      = degreeWeight,
                    MaxWeightedDegree = 3,
                    Roots             = new[]
                    {
                        Tuple.Create(gf5.One(), gf5.CreateElement(3)),
                        Tuple.Create(gf5.CreateElement(2), gf5.CreateElement(4))
                    }
                },
                new InterpolationPolynomialBuilderTestCase
                {
                    DegreeWeight      = degreeWeight,
                    MaxWeightedDegree = 3,
                    Roots             = new[]
                    {
                        Tuple.Create(gf8.CreateElement(3), gf8.CreateElement(7)),
                        Tuple.Create(gf8.CreateElement(5), gf8.CreateElement(4))
                    }
                },
                new InterpolationPolynomialBuilderTestCase
                {
                    DegreeWeight      = degreeWeight,
                    MaxWeightedDegree = 3,
                    Roots             = new[]
                    {
                        Tuple.Create(gf27.CreateElement(15), gf27.CreateElement(26)),
                        Tuple.Create(gf27.CreateElement(10), gf27.CreateElement(9))
                    }
                }
                };

            FailConstructionTestsData
                = new TheoryData <InterpolationPolynomialBuilderTestCase>
                {
                new InterpolationPolynomialBuilderTestCase
                {
                    DegreeWeight      = degreeWeight,
                    MaxWeightedDegree = 2,
                    Roots             = new[]
                    {
                        Tuple.Create(gf27.One(), gf27.CreateElement(16)),
                        Tuple.Create(gf27.CreateElement(13), gf27.CreateElement(26)),
                        Tuple.Create(gf27.CreateElement(10), gf27.CreateElement(15)),
                        Tuple.Create(gf27.CreateElement(8), gf27.CreateElement(5))
                    }
                }
                };
        }
Exemple #8
0
        /// <summary>
        /// Method for finding irreducible polynomial degree <paramref name="degree"/> with coefficients from field with order <paramref name="fieldOrder"/>
        /// </summary>
        /// <param name="fieldOrder">Field order from which irreducible polynomials coefficients come</param>
        /// <param name="degree">Irreducible polynomial degree</param>
        /// <returns>Irreducible polynomial with specified properties</returns>
        public Polynomial Find(int fieldOrder, int degree)
        {
            if (degree < 2)
            {
                throw new ArgumentException(nameof(degree));
            }

            var field = new PrimeOrderField(fieldOrder);

            var possibleDivisors = new List <Polynomial>();

            for (var i = 1; i *i <= degree; i++)
            {
                var templatePolynomial = GenerateTemplatePolynomial(field, i);
                Generate(templatePolynomial, 0,
                         x =>
                {
                    possibleDivisors.Add(new Polynomial(x));
                    return(false);
                });
            }

            var result = GenerateTemplatePolynomial(field, degree);

            Generate(result, 0, x => possibleDivisors.All(d => (x % d).IsZero == false));

            return(result);
        }
Exemple #9
0
        static LiftingSchemeBasedBuilderTests()
        {
            var gf8  = new PrimePowerOrderField(8, new Polynomial(new PrimeOrderField(2), 1, 1, 0, 1));
            var gf9  = new PrimePowerOrderField(9, new Polynomial(new PrimeOrderField(3), 1, 0, 1));
            var gf11 = new PrimeOrderField(11);
            var gf13 = new PrimeOrderField(13);
            var gf16 = new PrimePowerOrderField(16, new Polynomial(new PrimeOrderField(2), 1, 0, 0, 1, 1));
            var gf27 = new PrimePowerOrderField(27, new Polynomial(new PrimeOrderField(3), 2, 2, 0, 1));
            var gf32 = new PrimePowerOrderField(32, new Polynomial(new PrimeOrderField(2), 1, 0, 0, 1, 0, 1));

            BuildTestsData =
                new TheoryData <GeneratingPolynomialsBuilderTestCase>
            {
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 7, D = 3, SourceFilter = new Polynomial(gf8, 3, 2, 7, 6, 4, 2)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 7, D = 4, SourceFilter = new Polynomial(gf8, 3, 2, 7, 6, 4, 2)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 8, D = 4, SourceFilter = new Polynomial(gf9, 1, 2, 3, 2, 2, 3, 2, 1)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 10, D = 6, SourceFilter = new Polynomial(gf11, 0, 0, 0, 0, 0, 10, 5, 4, 3, 4)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 10, D = 5, SourceFilter = new Polynomial(gf11, 0, 0, 0, 0, 0, 10, 5, 4, 3, 4)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 12, D = 6, SourceFilter = new Polynomial(gf13, 0, 0, 0, 0, 0, 10, 5, 4, 3, 4, 11, 9)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 15, D = 7, SourceFilter = new Polynomial(gf16, 3, 2, 7, 6, 4, 2, 11, 7, 5)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 15, D = 8, SourceFilter = new Polynomial(gf16, 3, 2, 7, 6, 4, 2, 11, 7, 5)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 26, D = 12, SourceFilter = new Polynomial(gf27, 0, 0, 0, 1, 2, 3, 4, 1, 6, 7, 8, 9, 1, 10, 1, 12, 1, 14, 1, 17, 1, 19, 20, 1, 1, 1, 22)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 31, D = 16, SourceFilter = new Polynomial(gf32, 23, 13, 27, 1, 15, 13, 1, 16, 1, 21, 28, 30, 12, 19, 17, 4, 1, 19, 14, 0, 3, 5, 6)
                },
                new GeneratingPolynomialsBuilderTestCase
                {
                    N = 31, D = 15, SourceFilter = new Polynomial(gf32, 23, 13, 27, 1, 15, 13, 1, 16, 1, 21, 28, 30, 12, 19, 17, 4, 1, 19, 14, 0, 3, 5, 6)
                }
            };
        }
        static LiftingSchemeBasedBuilderTests()
        {
            var gf8  = new PrimePowerOrderField(8, new Polynomial(new PrimeOrderField(2), 1, 1, 0, 1));
            var gf9  = new PrimePowerOrderField(9, new Polynomial(new PrimeOrderField(3), 1, 0, 1));
            var gf11 = new PrimeOrderField(11);
            var gf13 = new PrimeOrderField(13);
            var gf16 = new PrimePowerOrderField(16, new Polynomial(new PrimeOrderField(2), 1, 0, 0, 1, 1));
            var gf27 = new PrimePowerOrderField(27, new Polynomial(new PrimeOrderField(3), 2, 2, 0, 1));
            var gf32 = new PrimePowerOrderField(32, new Polynomial(new PrimeOrderField(2), 1, 0, 0, 1, 0, 1));

            BuildTestsData =
                new[]
            {
                new object[]
                {
                    7, 3, new Polynomial(gf8, 3, 2, 7, 6, 4, 2)
                },
                new object[]
                {
                    7, 4, new Polynomial(gf8, 3, 2, 7, 6, 4, 2)
                },
                new object[]
                {
                    8, 4, new Polynomial(gf9, 1, 2, 3, 2, 2, 3, 2, 1)
                },
                new object[]
                {
                    10, 6, new Polynomial(gf11, 0, 0, 0, 0, 0, 10, 5, 4, 3, 4)
                },
                new object[]
                {
                    10, 5, new Polynomial(gf11, 0, 0, 0, 0, 0, 10, 5, 4, 3, 4)
                },
                new object[]
                {
                    12, 6, new Polynomial(gf13, 0, 0, 0, 0, 0, 10, 5, 4, 3, 4, 11, 9)
                },
                new object[]
                {
                    15, 7, new Polynomial(gf16, 3, 2, 7, 6, 4, 2, 11, 7, 5)
                },
                new object[]
                {
                    15, 8, new Polynomial(gf16, 3, 2, 7, 6, 4, 2, 11, 7, 5)
                },
                new object[]
                {
                    26, 12, new Polynomial(gf27, 0, 0, 0, 1, 2, 3, 4, 1, 6, 7, 8, 9, 1, 10, 1, 12, 1, 14, 1, 17, 1, 19, 20, 1, 1, 1, 22)
                },
                new object[]
                {
                    31, 16, new Polynomial(gf32, 23, 13, 27, 1, 15, 13, 1, 16, 1, 21, 28, 30, 12, 19, 17, 4, 1, 19, 14, 0, 3, 5, 6)
                },
                new object[]
                {
                    31, 15, new Polynomial(gf32, 23, 13, 27, 1, 15, 13, 1, 16, 1, 21, 28, 30, 12, 19, 17, 4, 1, 19, 14, 0, 3, 5, 6)
                }
            };
        }
        static KotterAlgorithmBasedBuilderTests()
        {
            var gf5  = new PrimeOrderField(5);
            var gf8  = new PrimePowerOrderField(8, new Polynomial(new PrimeOrderField(2), 1, 1, 0, 1));
            var gf27 = new PrimePowerOrderField(27, new Polynomial(new PrimeOrderField(3), 2, 2, 0, 1));

            var degreeWeight = new Tuple <int, int>(1, 2);

            SuccessConstructionTestsData = new[]
            {
                new object[]
                {
                    degreeWeight, 3,
                    new[]
                    {
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf5, 1), new FieldElement(gf5, 3)),
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf5, 2), new FieldElement(gf5, 4))
                    }
                },
                new object[]
                {
                    degreeWeight, 3,
                    new[]
                    {
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf8, 3), new FieldElement(gf8, 7)),
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf8, 5), new FieldElement(gf8, 4))
                    }
                },
                new object[]
                {
                    degreeWeight, 3,
                    new[]
                    {
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf27, 15), new FieldElement(gf27, 26)),
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf27, 10), new FieldElement(gf27, 9))
                    }
                }
            };

            FailConstructionTestsData = new[]
            {
                new object[]
                {
                    degreeWeight, 2,
                    new[]
                    {
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf27, 1), new FieldElement(gf27, 16)),
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf27, 13), new FieldElement(gf27, 26)),
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf27, 10), new FieldElement(gf27, 15)),
                        new Tuple <FieldElement, FieldElement>(new FieldElement(gf27, 8), new FieldElement(gf27, 5))
                    }
                }
            };
        }
        public void ShouldDevide(PrimeOrderField field, int[] dividendCoefficients, int[] divisorCoefficients, int[] quotientCoefficients)
        {
            // Given
            var a = new Polynomial(field, dividendCoefficients);
            var b = new Polynomial(field, divisorCoefficients);

            // When
            var c = a / b;

            // Then
            Assert.Equal(new Polynomial(field, quotientCoefficients), c);
        }
        public void ShouldCalculateModulo(PrimeOrderField field, int[] dividendCoefficients, int[] divisorCoefficients, int[] remainderCoefficients)
        {
            // Given
            var a = new Polynomial(field, dividendCoefficients);
            var b = new Polynomial(field, divisorCoefficients);

            // When
            var c = a % b;

            // Then
            Assert.Equal(new Polynomial(field, remainderCoefficients), c);
        }
Exemple #14
0
        /// <summary>
        /// Method for finding irreducible polynomial degree <paramref name="degree"/> with coefficients from field with order <paramref name="fieldOrder"/>
        /// </summary>
        /// <param name="fieldOrder">Field order from which irreducible polynomials coefficients come</param>
        /// <param name="degree">Irreducible polynomial degree</param>
        /// <returns>Irreducible polynomial with specified properties</returns>
        public GFPolynoms.Polynomial Find(int fieldOrder, int degree)
        {
            if (degree < 2)
            {
                throw new ArgumentException(NameOfExtension.nameof(() => degree));
            }

            var field  = new PrimeOrderField(fieldOrder);
            var result = GenerateTemplateGFPolynomial(field, degree);

            return(result);
        }
Exemple #15
0
        public void ShouldGetPolynomialSpectrum()
        {
            // Given
            var gf5        = new PrimeOrderField(5);
            var polynomial = new Polynomial(gf5, 1, 1, 1);

            // When
            var actualSpectrum = polynomial.GetSpectrum();

            // Then
            var expectedSpectrum = new[] { 3, 2, 1, 3 }.Select(x => gf5.CreateElement(x)).ToArray();

            Assert.Equal(expectedSpectrum, actualSpectrum);
        }
Exemple #16
0
        static RsBasedDecoderTests()
        {
            var gf7 = new PrimeOrderField(7);
            var generationPolynomial1 = new Polynomial(gf7, 4, 2, 6, 4, 3, 4)
                                        + new Polynomial(gf7, 1, 2, 1, 5, 2, 1).RightShift(2);

            var gf8 = new PrimePowerOrderField(8, new Polynomial(new PrimeOrderField(2), 1, 1, 0, 1));
            var generationPolynomial2 = new Polynomial(gf8, 6, 4, 2, 7, 4, 7, 4);

            var gf9 = new PrimePowerOrderField(9, new Polynomial(new PrimeOrderField(3), 1, 0, 1));
            var generationPolynomial3 = new Polynomial(gf9, 1, 2, 7, 2, 2, 2, 1, 5, 7);

            var gf11 = new PrimeOrderField(11);
            var generationPolynomial4 = new Polynomial(gf11, 0, 0, 7, 3, 4, 1, 8, 1, 8, 2, 7, 5);
            var generationPolynomial5 = new Polynomial(gf11, 0, 0, 2, 0, 10, 9, 3, 9, 3, 10, 2, 2);

            var gf13 = new PrimeOrderField(13);
            var generationPolynomial6 = new Polynomial(gf13, 0, 0, 0, 8, 1, 12, 2, 11, 5, 6, 4, 2, 3, 12, 2, 4);

            var gf27 = new PrimePowerOrderField(27, new Polynomial(new PrimeOrderField(3), 2, 2, 0, 1));
            var generationPolynomial7 = new Polynomial(gf27, 0, 0, 20, 18, 14, 15, 2, 5, 2, 19, 17, 4, 23, 1, 8, 6, 5, 4, 20, 26, 6, 5, 16,
                                                       23, 26, 15, 6, 25, 18, 22, 8, 4, 17, 20, 19, 18, 8, 6, 23, 12, 20, 22, 8, 7, 0, 7, 6, 3, 11);

            var encoder = new Encoder();

            DecoderTestsData
                = new TheoryData <DecoderTestCase>
                {
                PrepareDataWithErrors(6, 3, 3, generationPolynomial1, encoder, new Polynomial(gf7, 4, 0, 2), 1),
                PrepareDataWithErrors(6, 3, 3, generationPolynomial1, encoder, new Polynomial(gf7, 1, 2, 3), 1),
                PrepareDataWithErrors(6, 3, 3, generationPolynomial1, encoder, new Polynomial(gf7, 6, 4, 1), 1),
                PrepareDataWithErrors(6, 3, 3, generationPolynomial1, encoder, new Polynomial(gf7, 0, 2), 1),
                PrepareDataWithErrors(6, 3, 3, generationPolynomial1, encoder, new Polynomial(gf7, 0, 0, 3), 1),
                PrepareDataWithErrors(7, 3, 3, generationPolynomial2, encoder, new Polynomial(gf8, 0, 0, 3), 1),
                PrepareDataWithErrors(7, 3, 3, generationPolynomial2, encoder, new Polynomial(gf8, 1), 1),
                PrepareDataWithErrors(7, 3, 3, generationPolynomial2, encoder, new Polynomial(gf8, 0, 0, 1), 1),
                PrepareDataWithErrors(8, 4, 4, generationPolynomial3, encoder, new Polynomial(gf9, 0, 0, 3), 1),
                PrepareDataWithErrors(8, 4, 4, generationPolynomial3, encoder, new Polynomial(gf9, 1, 2, 3, 4), 1),
                PrepareDataWithErrors(8, 4, 4, generationPolynomial3, encoder, new Polynomial(gf9, 1, 2), 1),
                PrepareDataWithErrors(8, 4, 4, generationPolynomial3, encoder, new Polynomial(gf9, 0, 0, 0, 6), 1),
                PrepareDataWithErrors(10, 5, 6, generationPolynomial4, encoder, new Polynomial(gf11, 1, 2, 3, 4, 5), 2),
                PrepareDataWithErrors(10, 5, 5, generationPolynomial5, encoder, new Polynomial(gf11, 1, 2, 3, 4, 5), 2),
                PrepareDataWithErrors(12, 6, 6, generationPolynomial6, encoder, new Polynomial(gf13, 1, 2, 3, 4, 5, 6), 2),
                PrepareDataWithErrors(12, 6, 6, generationPolynomial6, encoder, new Polynomial(gf13, 0, 2, 0, 2, 11), 2),
                PrepareDataWithErrors(26, 13, 12, generationPolynomial7, encoder, new Polynomial(gf27, 0, 2, 0, 2, 11), 5),
                PrepareDataWithoutErrors(26, 13, 12, generationPolynomial7, encoder, new Polynomial(gf27, 0, 2, 0, 2, 11), 5)
                };
        }
        static G23GolayCodeTests()
        {
            var gf2 = new PrimeOrderField(2);

            FieldElement[] InformationWordBuilder(IEnumerable <int> array) => array.Select(x => gf2.CreateElement(x)).ToArray();

            DecodeTestsData
                = new[]
                {
                new object[] { InformationWordBuilder(new[] { 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0 }) },
                new object[] { InformationWordBuilder(new[] { 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 }) },
                new object[] { InformationWordBuilder(new[] { 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0 }) },
                new object[] { InformationWordBuilder(new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }) },
                new object[] { InformationWordBuilder(new[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }) }
                };
        }
        static GcdBasedBuilderTests()
        {
            var gf2  = new PrimeOrderField(2);
            var gf7  = new PrimeOrderField(7);
            var gf11 = new PrimeOrderField(11);
            var gf17 = new PrimeOrderField(17);

            BuildTestsData
                = new TheoryData <ComplementaryPolynomialBuildingTestCase>
                {
                new ComplementaryPolynomialBuildingTestCase
                {
                    SourceFilter    = new Polynomial(gf2, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1),
                    MaxFilterLength = 24,
                    Expected        = new Polynomial(gf2, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
                },
                new ComplementaryPolynomialBuildingTestCase
                {
                    SourceFilter    = new Polynomial(gf7, 3, 2, 5, 0, 4),
                    MaxFilterLength = 6,
                    Expected        = new Polynomial(gf7, 3)
                },
                new ComplementaryPolynomialBuildingTestCase
                {
                    SourceFilter    = new Polynomial(gf7, 4, 2, 6, 4, 3, 4),
                    MaxFilterLength = 6,
                    Expected        = new Polynomial(gf7, 0, 2, 2, 5)
                },
                new ComplementaryPolynomialBuildingTestCase
                {
                    SourceFilter    = new Polynomial(gf11, 0, 0, 0, 0, 0, 10, 5, 4, 3, 4),
                    MaxFilterLength = 10,
                    Expected        = new Polynomial(gf11, 0, 0, 0, 0, 0, 0, 1, 1, 10, 6)
                },
                new ComplementaryPolynomialBuildingTestCase
                {
                    SourceFilter    = new Polynomial(gf17, 10, 16, 5, 0, 0, 0, 0, 16),
                    MaxFilterLength = 16,
                    Expected        = new Polynomial(gf17, 12, 4, 0, 15, 0, 1)
                }
                };
        }
        static GcdBasedBuilderTests()
        {
            var gf2  = new PrimeOrderField(2);
            var gf7  = new PrimeOrderField(7);
            var gf11 = new PrimeOrderField(11);
            var gf17 = new PrimeOrderField(17);

            BuildTestsData = new[]
            {
                new object[]
                {
                    new Polynomial(gf2, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1), 24,
                    new Polynomial(gf2, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
                },
                new object[]
                {
                    new Polynomial(gf7, 3, 2, 5, 0, 4), 6,
                    new Polynomial(gf7, 3)
                },
                new object[]
                {
                    new Polynomial(gf7, 4, 2, 6, 4, 3, 4), 6,
                    new Polynomial(gf7, 0, 2, 2, 5)
                },
                new object[]
                {
                    new Polynomial(gf11, 0, 0, 0, 0, 0, 10, 5, 4, 3, 4), 10,
                    new Polynomial(gf11, 0, 0, 0, 0, 0, 0, 1, 1, 10, 6)
                },
                new object[]
                {
                    new Polynomial(gf17, 10, 16, 5, 0, 0, 0, 0, 16), 16,
                    new Polynomial(gf17, 12, 4, 0, 15, 0, 1)
                }
            };
        }
Exemple #20
0
        static RrFactorizatorTests()
        {
            var gf19 = new PrimeOrderField(19);
            var gf8  = new PrimePowerOrderField(8, new Polynomial(new PrimeOrderField(2), 1, 1, 0, 1));

            FactorizationTestsData = new[]
            {
                new object[]
                {
                    new BiVariablePolynomial(gf19)
                    {
                        [new Tuple <int, int>(0, 0)] = new FieldElement(gf19, 4),
                        [new Tuple <int, int>(1, 0)] = new FieldElement(gf19, 12),
                        [new Tuple <int, int>(2, 0)] = new FieldElement(gf19, 5),
                        [new Tuple <int, int>(3, 0)] = new FieldElement(gf19, 11),
                        [new Tuple <int, int>(4, 0)] = new FieldElement(gf19, 8),
                        [new Tuple <int, int>(5, 0)] = new FieldElement(gf19, 13),
                        [new Tuple <int, int>(0, 1)] = new FieldElement(gf19, 14),
                        [new Tuple <int, int>(1, 1)] = new FieldElement(gf19, 14),
                        [new Tuple <int, int>(2, 1)] = new FieldElement(gf19, 9),
                        [new Tuple <int, int>(3, 1)] = new FieldElement(gf19, 16),
                        [new Tuple <int, int>(4, 1)] = new FieldElement(gf19, 8),
                        [new Tuple <int, int>(0, 2)] = new FieldElement(gf19, 14),
                        [new Tuple <int, int>(1, 2)] = new FieldElement(gf19, 13),
                        [new Tuple <int, int>(2, 2)] = new FieldElement(gf19, 1),
                        [new Tuple <int, int>(0, 3)] = new FieldElement(gf19, 2),
                        [new Tuple <int, int>(1, 3)] = new FieldElement(gf19, 11),
                        [new Tuple <int, int>(2, 3)] = new FieldElement(gf19, 1),
                        [new Tuple <int, int>(0, 4)] = new FieldElement(gf19, 17)
                    },
                    1,
                    new[]
                    {
                        new Polynomial(gf19, 18, 14),
                        new Polynomial(gf19, 14, 16),
                        new Polynomial(gf19, 8, 8)
                    }
                },
                new object[]
                {
                    new BiVariablePolynomial(gf8)
                    {
                        [new Tuple <int, int>(1, 1)] = gf8.One(),
                        [new Tuple <int, int>(0, 2)] = gf8.One()
                    },
                    1,
                    new []
                    {
                        new Polynomial(gf8),
                        new Polynomial(gf8, 0, 1)
                    }
                },
                new object[]
                {
                    new BiVariablePolynomial(gf8)
                    {
                        [new Tuple <int, int>(2, 1)] = gf8.One(),
                        [new Tuple <int, int>(0, 2)] = gf8.One()
                    },
                    2,
                    new []
                    {
                        new Polynomial(gf8),
                        new Polynomial(gf8, 0, 0, 1)
                    }
                }
            };
        }
        static RecursiveGcdFinderTests()
        {
            var gf3 = new PrimeOrderField(3);

            GcdTestData
                = new TheoryData <GcdFinderTestCase>
                {
                new GcdFinderTestCase
                {
                    A        = new Polynomial(gf3, 0, 1, 1),
                    B        = new Polynomial(gf3, 1, 2, 1),
                    Expected = new Polynomial(gf3, 2, 2)
                },
                new GcdFinderTestCase
                {
                    A        = new Polynomial(gf3, 0, 1, 2),
                    B        = new Polynomial(gf3, 1, 2, 1),
                    Expected = new Polynomial(gf3, 1)
                },
                new GcdFinderTestCase
                {
                    A        = new Polynomial(gf3, 1, 1),
                    B        = new Polynomial(gf3, 0, 0, 1, 1),
                    Expected = new Polynomial(gf3, 1, 1)
                }
                };

            GcdWithQuotientsTestData
                = new TheoryData <GcdExtendedFinderTestCase>
                {
                new GcdExtendedFinderTestCase
                {
                    A        = new Polynomial(gf3, 0, 1, 1),
                    B        = new Polynomial(gf3, 1, 2, 1),
                    Expected = new Polynomial(gf3, 2, 2),
                    ExpectedQuotients
                        = new[]
                        {
                        new Polynomial(gf3, 1),
                        new Polynomial(gf3, 2, 2)
                        }
                },
                new GcdExtendedFinderTestCase
                {
                    A        = new Polynomial(gf3, 0, 1, 2),
                    B        = new Polynomial(gf3, 1, 2, 1),
                    Expected = new Polynomial(gf3, 1),
                    ExpectedQuotients
                        = new[]
                        {
                        new Polynomial(gf3, 2),
                        new Polynomial(gf3, 1, 2, 1)
                        }
                },
                new GcdExtendedFinderTestCase
                {
                    A        = new Polynomial(gf3, 1, 1),
                    B        = new Polynomial(gf3, 0, 0, 1, 1),
                    Expected = new Polynomial(gf3, 1, 1),
                    ExpectedQuotients
                        = new[]
                        {
                        new Polynomial(gf3),
                        new Polynomial(gf3, 0, 0, 1)
                        }
                }
                };
        }
        static RecursiveGcdFinderTests()
        {
            var gf3 = new PrimeOrderField(3);

            GcdTestData = new[]
            {
                new object[]
                {
                    new Polynomial(gf3, 0, 1, 1),
                    new Polynomial(gf3, 1, 2, 1),
                    new Polynomial(gf3, 2, 2)
                },
                new object[]
                {
                    new Polynomial(gf3, 0, 1, 2),
                    new Polynomial(gf3, 1, 2, 1),
                    new Polynomial(gf3, 1)
                },
                new object[]
                {
                    new Polynomial(gf3, 1, 1),
                    new Polynomial(gf3, 0, 0, 1, 1),
                    new Polynomial(gf3, 1, 1)
                }
            };

            GcdWithQuotientsTestData = new[]
            {
                new object[]
                {
                    new Polynomial(gf3, 0, 1, 1),
                    new Polynomial(gf3, 1, 2, 1),
                    new Polynomial(gf3, 2, 2),
                    new[]
                    {
                        new Polynomial(gf3, 1),
                        new Polynomial(gf3, 2, 2)
                    }
                },
                new object[]
                {
                    new Polynomial(gf3, 0, 1, 2),
                    new Polynomial(gf3, 1, 2, 1),
                    new Polynomial(gf3, 1),
                    new[]
                    {
                        new Polynomial(gf3, 2),
                        new Polynomial(gf3, 1, 2, 1)
                    }
                },
                new object[]
                {
                    new Polynomial(gf3, 1, 1),
                    new Polynomial(gf3, 0, 0, 1, 1),
                    new Polynomial(gf3, 1, 1),
                    new[]
                    {
                        new Polynomial(gf3),
                        new Polynomial(gf3, 0, 0, 1)
                    }
                }
            };
        }
        static RrFactorizatorTests()
        {
            var gf19 = new PrimeOrderField(19);
            var gf8  = new PrimePowerOrderField(8, new Polynomial(new PrimeOrderField(2), 1, 1, 0, 1));

            FactorizationTestsData
                = new TheoryData <InterpolationPolynomialFactorizatorTestCase>
                {
                new InterpolationPolynomialFactorizatorTestCase
                {
                    Polynomial = new BiVariablePolynomial(gf19)
                    {
                        [Tuple.Create(0, 0)] = gf19.CreateElement(4),
                        [Tuple.Create(1, 0)] = gf19.CreateElement(12),
                        [Tuple.Create(2, 0)] = gf19.CreateElement(5),
                        [Tuple.Create(3, 0)] = gf19.CreateElement(11),
                        [Tuple.Create(4, 0)] = gf19.CreateElement(8),
                        [Tuple.Create(5, 0)] = gf19.CreateElement(13),
                        [Tuple.Create(0, 1)] = gf19.CreateElement(14),
                        [Tuple.Create(1, 1)] = gf19.CreateElement(14),
                        [Tuple.Create(2, 1)] = gf19.CreateElement(9),
                        [Tuple.Create(3, 1)] = gf19.CreateElement(16),
                        [Tuple.Create(4, 1)] = gf19.CreateElement(8),
                        [Tuple.Create(0, 2)] = gf19.CreateElement(14),
                        [Tuple.Create(1, 2)] = gf19.CreateElement(13),
                        [Tuple.Create(2, 2)] = gf19.CreateElement(1),
                        [Tuple.Create(0, 3)] = gf19.CreateElement(2),
                        [Tuple.Create(1, 3)] = gf19.CreateElement(11),
                        [Tuple.Create(2, 3)] = gf19.CreateElement(1),
                        [Tuple.Create(0, 4)] = gf19.CreateElement(17)
                    },
                    MaxFactorDegree = 1,
                    Expected        = new[]
                    {
                        new Polynomial(gf19, 18, 14),
                        new Polynomial(gf19, 14, 16),
                        new Polynomial(gf19, 8, 8)
                    }
                },
                new InterpolationPolynomialFactorizatorTestCase
                {
                    Polynomial = new BiVariablePolynomial(gf8)
                    {
                        [Tuple.Create(1, 1)] = gf8.One(),
                        [Tuple.Create(0, 2)] = gf8.One()
                    },
                    MaxFactorDegree = 1,
                    Expected        = new[]
                    {
                        new Polynomial(gf8),
                        new Polynomial(gf8, 0, 1)
                    }
                },
                new InterpolationPolynomialFactorizatorTestCase
                {
                    Polynomial = new BiVariablePolynomial(gf8)
                    {
                        [Tuple.Create(2, 1)] = gf8.One(),
                        [Tuple.Create(0, 2)] = gf8.One()
                    },
                    MaxFactorDegree = 2,
                    Expected        = new[]
                    {
                        new Polynomial(gf8),
                        new Polynomial(gf8, 0, 0, 1)
                    }
                }
                };
        }
        static RecursiveGeneratorTests()
        {
            var gf3 = new PrimeOrderField(3);

            VariatePositionsAndValuesTestsData
                = new TheoryData <NoisePositionsAndValuesVariationTestCase>
                {
                new NoisePositionsAndValuesVariationTestCase
                {
                    Field          = gf3,
                    CodewordLength = 3,
                    ErrorsCount    = 2,
                    Expected
                        = new[]
                        {
                        new[] { gf3.CreateElement(1), gf3.CreateElement(1), gf3.Zero() },
                        new[] { gf3.CreateElement(1), gf3.CreateElement(2), gf3.Zero() },
                        new[] { gf3.CreateElement(2), gf3.CreateElement(1), gf3.Zero() },
                        new[] { gf3.CreateElement(2), gf3.CreateElement(2), gf3.Zero() },

                        new[] { gf3.CreateElement(1), gf3.Zero(), gf3.CreateElement(1) },
                        new[] { gf3.CreateElement(1), gf3.Zero(), gf3.CreateElement(2) },
                        new[] { gf3.CreateElement(2), gf3.Zero(), gf3.CreateElement(1) },
                        new[] { gf3.CreateElement(2), gf3.Zero(), gf3.CreateElement(2) },

                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(2) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(2) }
                        }
                },
                new NoisePositionsAndValuesVariationTestCase
                {
                    Field             = gf3,
                    CodewordLength    = 3,
                    ErrorsCount       = 2,
                    InitialNoiseValue = new[] { gf3.CreateElement(1), gf3.Zero(), gf3.CreateElement(2) },
                    Expected
                        = new[]
                        {
                        new[] { gf3.CreateElement(1), gf3.Zero(), gf3.CreateElement(2) },
                        new[] { gf3.CreateElement(2), gf3.Zero(), gf3.CreateElement(1) },
                        new[] { gf3.CreateElement(2), gf3.Zero(), gf3.CreateElement(2) },

                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(2) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(2) }
                        }
                }
                };
            VariateValuesTestsData
                = new TheoryData <NoiseValuesVariationTestCase>
                {
                new NoiseValuesVariationTestCase
                {
                    InitialNoiseValue = new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(1) },
                    Expected
                        = new[]
                        {
                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(1), gf3.CreateElement(2) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(1) },
                        new[] { gf3.Zero(), gf3.CreateElement(2), gf3.CreateElement(2) }
                        }
                }
                };
        }
Exemple #25
0
        static PolynomialUnderPrimeOrderFieldTest()
        {
            Gf2 = new PrimeOrderField(2);
            Gf3 = new PrimeOrderField(3);

            DevideTestsData
                = new TheoryData <BinaryOperationTestCase>
                {
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 0 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 0 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 0, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1, 0, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1, 1, 0, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 0, 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1, 1, 1, 0, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf3,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1 },
                    ExpectedResultCoefficients = new[] { 1, 2, 1 }
                }
                };

            ModuloTestsData
                = new TheoryData <BinaryOperationTestCase>
                {
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 0, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 0, 1, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1, 1, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1, 0, 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf2,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 0, 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1, 0, 1 },
                    ExpectedResultCoefficients = new[] { 1 }
                },
                new BinaryOperationTestCase
                {
                    Field = Gf3,
                    FirstOperandCoefficients   = new[] { 0, 0, 0, 1 },
                    SecondOperandCoefficients  = new[] { 1, 1 },
                    ExpectedResultCoefficients = new[] { 2 }
                }
                };
        }
Exemple #26
0
 public PrimeOrderFieldTests()
 {
     _gf5 = new PrimeOrderField(5);
 }