public void LdlDecompLinearSystemAlgorithm_RunTest()
        {
            var domain           = new IntegerDomain();
            var fractionField    = new FractionField <int>(domain);
            var decompositionAlg = new TriangDiagSymmMatrixDecomposition <Fraction <int> >(
                fractionField);
            var symmDecompSolver = new SymmetricLdlDecompLinearSystemAlgorithm <Fraction <int> >(
                decompositionAlg);
            var target = new LdlDecompLinearSystemAlgorithm <Fraction <int> >(
                symmDecompSolver,
                fractionField);
            var matrix = this.GetGeneralMatrix(domain);
            var vector = this.GetIndVectorForGenMatrix(domain);
            var actual = target.Run(matrix, vector);

            var lines          = matrix.GetLength(0);
            var columns        = matrix.GetLength(1);
            var nullVector     = new ZeroVector <Fraction <int> >(lines, fractionField);
            var expectedVector = new ArrayMathVector <Fraction <int> >(lines);

            for (var i = 0; i < lines; ++i)
            {
                expectedVector[i] = vector[i, 0];
            }

            actual = target.Run(matrix, vector);
            this.AssertVector(expectedVector, matrix, actual.Vector, fractionField);

            for (var i = 0; i < actual.VectorSpaceBasis.Count; ++i)
            {
                var vec = actual.VectorSpaceBasis[i];
                this.AssertVector(nullVector, matrix, vec, fractionField);
            }
        }
        public void SymmetricLdlDecompLinearSystemAlgorithm_RunTest()
        {
            var domain           = new IntegerDomain();
            var fractionField    = new FractionField <int>(domain);
            var decompositionAlg = new TriangDiagSymmMatrixDecomposition <Fraction <int> >(
                fractionField);
            var target = new SymmetricLdlDecompLinearSystemAlgorithm <Fraction <int> >(
                decompositionAlg);
            var matrix = this.GetSingularMatrix(domain);
            var vector = this.GetZeroFilledVector(domain);
            var actual = target.Run(matrix, vector);

            // Teste à característica da matriz
            Assert.AreEqual(2, actual.VectorSpaceBasis.Count);

            // Teste ao vector independente
            var size       = matrix.GetLength(0);
            var nullVector = new ZeroVector <Fraction <int> >(size, fractionField);

            this.AssertVector(nullVector, matrix, actual.Vector, fractionField);

            // Teste aos vectores da base
            for (var i = 0; i < actual.VectorSpaceBasis.Count; ++i)
            {
                var vec = actual.VectorSpaceBasis[i];
                this.AssertVector(nullVector, matrix, vec, fractionField);
            }

            // Teste à matriz com vector independente
            vector = this.GetIndtVectorForSingularMatrix(domain);
            var expectedVector = new ArrayMathVector <Fraction <int> >(size);

            for (var i = 0; i < size; ++i)
            {
                expectedVector[i] = vector[i, 0];
            }

            actual = target.Run(matrix, vector);
            this.AssertVector(expectedVector, matrix, actual.Vector, fractionField);

            for (var i = 0; i < actual.VectorSpaceBasis.Count; ++i)
            {
                var vec = actual.VectorSpaceBasis[i];
                this.AssertVector(nullVector, matrix, vec, fractionField);
            }
        }