diff options
author | Gael Guennebaud <g.gael@free.fr> | 2018-04-03 23:06:44 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2018-04-03 23:06:44 +0200 |
commit | a1292395d6feefa5d78ed9101c2c85648ba8eea9 (patch) | |
tree | f1be49c51f82cdfb825a4164f4f0f0ab719264c4 /test/permutationmatrices.cpp | |
parent | 8c7b5158a10af19bb98f2c2b5c57d44fd8899fe8 (diff) |
Fix compilation of product with inverse transpositions (e.g., mat * Transpositions().inverse())
Diffstat (limited to 'test/permutationmatrices.cpp')
-rw-r--r-- | test/permutationmatrices.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/test/permutationmatrices.cpp b/test/permutationmatrices.cpp index db1266579..0ed7a4b2b 100644 --- a/test/permutationmatrices.cpp +++ b/test/permutationmatrices.cpp @@ -19,9 +19,11 @@ template<typename MatrixType> void permutationmatrices(const MatrixType& m) enum { Rows = MatrixType::RowsAtCompileTime, Cols = MatrixType::ColsAtCompileTime, Options = MatrixType::Options }; typedef PermutationMatrix<Rows> LeftPermutationType; + typedef Transpositions<Rows> LeftTranspositionsType; typedef Matrix<int, Rows, 1> LeftPermutationVectorType; typedef Map<LeftPermutationType> MapLeftPerm; typedef PermutationMatrix<Cols> RightPermutationType; + typedef Transpositions<Cols> RightTranspositionsType; typedef Matrix<int, Cols, 1> RightPermutationVectorType; typedef Map<RightPermutationType> MapRightPerm; @@ -35,6 +37,8 @@ template<typename MatrixType> void permutationmatrices(const MatrixType& m) RightPermutationVectorType rv; randomPermutationVector(rv, cols); RightPermutationType rp(rv); + LeftTranspositionsType lt(lv); + RightTranspositionsType rt(rv); MatrixType m_permuted = MatrixType::Random(rows,cols); VERIFY_EVALUATION_COUNT(m_permuted = lp * m_original * rp, 1); // 1 temp for sub expression "lp * m_original" @@ -115,6 +119,14 @@ template<typename MatrixType> void permutationmatrices(const MatrixType& m) Matrix<Scalar, Cols, Cols> B = rp.transpose(); VERIFY_IS_APPROX(A, B.transpose()); } + + m_permuted = m_original; + lp = lt; + rp = rt; + VERIFY_EVALUATION_COUNT(m_permuted = lt * m_permuted * rt, 1); + VERIFY_IS_APPROX(m_permuted, lp*m_original*rp); + + VERIFY_IS_APPROX(lt.inverse()*m_permuted*rt.inverse(), m_original); } template<typename T> |