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) }
                    }
                }
                };
        }
        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) }
                        }
                }
                };
        }