fix ldlt unit test

This commit is contained in:
Gael Guennebaud 2010-06-09 13:18:10 +02:00
parent 8cc02169fd
commit 201bd253ad

View File

@ -129,34 +129,34 @@ template<typename MatrixType> void cholesky(const MatrixType& m)
} }
{ {
LDLT<SquareMatrixType,Lower> ldltlo(symm); LDLT<SquareMatrixType,Lower> ldltlo(symmLo);
VERIFY_IS_APPROX(symm, ldltlo.reconstructedMatrix()); VERIFY_IS_APPROX(symm, ldltlo.reconstructedMatrix());
vecX = ldltlo.solve(vecB); vecX = ldltlo.solve(vecB);
VERIFY_IS_APPROX(symm * vecX, vecB); VERIFY_IS_APPROX(symm * vecX, vecB);
matX = ldltlo.solve(matB); matX = ldltlo.solve(matB);
VERIFY_IS_APPROX(symm * matX, matB); VERIFY_IS_APPROX(symm * matX, matB);
LDLT<SquareMatrixType,Upper> ldltup(symm); LDLT<SquareMatrixType,Upper> ldltup(symmUp);
VERIFY_IS_APPROX(symm, ldltup.reconstructedMatrix()); VERIFY_IS_APPROX(symm, ldltup.reconstructedMatrix());
vecX = ldltup.solve(vecB); vecX = ldltup.solve(vecB);
VERIFY_IS_APPROX(symm * vecX, vecB); VERIFY_IS_APPROX(symm * vecX, vecB);
matX = ldltup.solve(matB); matX = ldltup.solve(matB);
VERIFY_IS_APPROX(symm * matX, matB); VERIFY_IS_APPROX(symm * matX, matB);
if(MatrixType::RowsAtCompileTime==Dynamic) // if(MatrixType::RowsAtCompileTime==Dynamic)
{ // {
// note : each inplace permutation requires a small temporary vector (mask) // // note : each inplace permutation requires a small temporary vector (mask)
//
// check inplace solve // // check inplace solve
matX = matB; // matX = matB;
VERIFY_EVALUATION_COUNT(matX = ldltlo.solve(matX), 0); // VERIFY_EVALUATION_COUNT(matX = ldltlo.solve(matX), 0);
VERIFY_IS_APPROX(matX, ldltlo.solve(matB).eval()); // VERIFY_IS_APPROX(matX, ldltlo.solve(matB).eval());
//
//
matX = matB; // matX = matB;
VERIFY_EVALUATION_COUNT(matX = ldltup.solve(matX), 0); // VERIFY_EVALUATION_COUNT(matX = ldltup.solve(matX), 0);
VERIFY_IS_APPROX(matX, ldltup.solve(matB).eval()); // VERIFY_IS_APPROX(matX, ldltup.solve(matB).eval());
} // }
} }
} }