static StandardCodesFactoryTests()
        {
            var gaussSolver = new GaussSolver();

            CodesFactory
                = new StandardCodesFactory(
                      new LiftingSchemeBasedBuilder(new GcdBasedBuilder(new RecursiveGcdFinder()), gaussSolver),
                      new RsBasedDecoder(new BerlekampWelchDecoder(gaussSolver), gaussSolver),
                      new GsBasedDecoder(
                          new GsDecoder(new KotterAlgorithmBasedBuilder(new PascalsTriangleBasedCalcualtor()), new RrFactorizator()),
                          gaussSolver
                          )
                      );
        }
        static LinearCodeDistanceAnalyzerTests()
        {
            var gaussSolver = new GaussSolver();
            var codesFactory
                = new StandardCodesFactory(
                      new LiftingSchemeBasedBuilder(new GcdBasedBuilder(new RecursiveGcdFinder()), gaussSolver),
                      new RsBasedDecoder(new BerlekampWelchDecoder(gaussSolver), gaussSolver),
                      new GsBasedDecoder(
                          new GsDecoder(new KotterAlgorithmBasedBuilder(new PascalsTriangleBasedCalcualtor()), new RrFactorizator()),
                          gaussSolver
                          )
                      );
            var wN7K3D4       = codesFactory.CreateN7K3D4();
            var wN8K4D4First  = new WaveletCode(8, 4, 4, new Polynomial(new PrimePowerOrderField(9), 2, 0, 1, 2, 1, 1));
            var wN8K4D4Second = new WaveletCode(8, 4, 4, new Polynomial(new PrimePowerOrderField(9), 2, 2, 1, 2, 0, 1));

            CodeDistanceAnalyzysTestCases
                = new TheoryData <CodeDistanceAnalyzerTestCase>
                {
                new CodeDistanceAnalyzerTestCase
                {
                    Field = wN7K3D4.Field,
                    InformationWordLength = wN7K3D4.InformationWordLength,
                    EncodingProcedure     = x => wN7K3D4.Encode(x.Select(value => wN7K3D4.Field.CreateElement(value)).ToArray()),
                    ExpectedCodeDistance  = wN7K3D4.CodeDistance
                },
                new CodeDistanceAnalyzerTestCase
                {
                    Field = wN8K4D4First.Field,
                    InformationWordLength = wN8K4D4First.InformationWordLength,
                    EncodingProcedure     = x => wN8K4D4First.Encode(x.Select(value => wN8K4D4First.Field.CreateElement(value)).ToArray()),
                    ExpectedCodeDistance  = wN8K4D4First.CodeDistance
                },
                new CodeDistanceAnalyzerTestCase
                {
                    Field = wN8K4D4Second.Field,
                    InformationWordLength = wN8K4D4Second.InformationWordLength,
                    EncodingProcedure     = x => wN8K4D4Second.Encode(x.Select(value => wN8K4D4Second.Field.CreateElement(value)).ToArray()),
                    ExpectedCodeDistance  = wN8K4D4Second.CodeDistance
                }
                };
        }