public void RunTest2()
        {
            var integerDomain   = new IntegerDomain();
            var decimalField    = new DecimalField();
            var vectorFactory   = new ArrayVectorFactory <decimal>();
            var decimalComparer = Comparer <decimal> .Default;
            var nearest         = new DecimalNearestInteger();

            var scalarProd = new OrthoVectorScalarProduct <decimal>(
                decimalComparer,
                decimalField);

            var integerDecimalConverter = new IntegerDecimalConverter();

            var dim             = 4;
            var vectorSet       = new IMathVector <decimal> [dim];
            var lllReductionAlg = new LLLBasisReductionAlgorithm <IMathVector <decimal>, decimal, int>(
                new VectorSpace <decimal>(dim, vectorFactory, decimalField),
                scalarProd,
                nearest,
                Comparer <decimal> .Default);

            vectorSet[0] = new ArrayMathVector <decimal>(new decimal[] { 1, 1, 7, 2 });
            vectorSet[1] = new ArrayMathVector <decimal>(new decimal[] { 9, 8, 4, 6 });
            vectorSet[2] = new ArrayMathVector <decimal>(new decimal[] { 1, 8, 5, 7 });
            vectorSet[3] = new ArrayMathVector <decimal>(new decimal[] { 2, 3, 1, 1 });

            var reduced = lllReductionAlg.Run(vectorSet, 3M / 4);

            var expected = new IMathVector <decimal> [dim];

            expected[0] = new ArrayMathVector <decimal>(new decimal[] { 2, 3, 1, 1 });
            expected[1] = new ArrayMathVector <decimal>(new decimal[] { 3, -1, 1, 3 });
            expected[2] = new ArrayMathVector <decimal>(new decimal[] { -2, 2, 6, -1 });
            expected[3] = new ArrayMathVector <decimal>(new decimal[] { -4, 1, -4, 3 });

            this.AsserVectorLists(expected, reduced);
        }
        public void RunTest1()
        {
            var integerDomain   = new IntegerDomain();
            var decimalField    = new DecimalField();
            var vectorFactory   = new ArrayVectorFactory <decimal>();
            var decimalComparer = Comparer <decimal> .Default;
            var nearest         = new DecimalNearestInteger();

            var scalarProd = new OrthoVectorScalarProduct <decimal>(
                decimalComparer,
                decimalField);

            var integerDecimalConverter = new IntegerDecimalConverter();

            var lllReductionAlg = new LLLBasisReductionAlgorithm <IMathVector <decimal>, decimal, int>(
                new VectorSpace <decimal>(3, vectorFactory, decimalField),
                scalarProd,
                nearest,
                Comparer <decimal> .Default);

            var vectorSet = new IMathVector <decimal> [3];

            vectorSet[0] = new ArrayMathVector <decimal>(new decimal[] { 1, 1, 1 });
            vectorSet[1] = new ArrayMathVector <decimal>(new decimal[] { -1, 0, 2 });
            vectorSet[2] = new ArrayMathVector <decimal>(new decimal[] { 3, 5, 6 });

            var reduced = lllReductionAlg.Run(vectorSet, 3M / 4);

            // O resultado esperado.
            var expected = new IMathVector <decimal> [3];

            expected[0] = new ArrayMathVector <decimal>(new decimal[] { 0, 1, 0 });
            expected[1] = new ArrayMathVector <decimal>(new decimal[] { 1, 0, 1 });
            expected[2] = new ArrayMathVector <decimal>(new decimal[] { -1, 0, 2 });

            this.AsserVectorLists(expected, reduced);
        }