diff options
author | Benoit Jacob <jacob.benoit.1@gmail.com> | 2011-01-26 10:01:18 -0500 |
---|---|---|
committer | Benoit Jacob <jacob.benoit.1@gmail.com> | 2011-01-26 10:01:18 -0500 |
commit | 313eea8f10b79eca013d5fc983f2e7f9fea1eb5b (patch) | |
tree | 2271744486a3eeb5e054db8f39b5d8bfe77f8dcb | |
parent | f88ca0ac79ad67124d1c61d258d243e9f66de22f (diff) |
fix the remainder of bug #159
-rw-r--r-- | Eigen/src/Core/TriangularMatrix.h | 4 | ||||
-rw-r--r-- | test/eigen2/eigen2_triangular.cpp | 6 | ||||
-rw-r--r-- | test/triangular.cpp | 7 |
3 files changed, 15 insertions, 2 deletions
diff --git a/Eigen/src/Core/TriangularMatrix.h b/Eigen/src/Core/TriangularMatrix.h index 62586058b..40dd2e4bc 100644 --- a/Eigen/src/Core/TriangularMatrix.h +++ b/Eigen/src/Core/TriangularMatrix.h @@ -238,8 +238,8 @@ template<typename _MatrixType, unsigned int _Mode> class TriangularView return m_matrix.const_cast_derived().coeffRef(row, col); } - const MatrixType& nestedExpression() const { return m_matrix; } - MatrixType& nestedExpression() { return const_cast<MatrixType&>(m_matrix); } + const MatrixTypeNestedCleaned& nestedExpression() const { return m_matrix; } + MatrixTypeNestedCleaned& nestedExpression() { return *const_cast<MatrixTypeNestedCleaned*>(&m_matrix); } /** Assigns a triangular matrix to a triangular part of a dense matrix */ template<typename OtherDerived> diff --git a/test/eigen2/eigen2_triangular.cpp b/test/eigen2/eigen2_triangular.cpp index 43b42e3a5..30ef1b20b 100644 --- a/test/eigen2/eigen2_triangular.cpp +++ b/test/eigen2/eigen2_triangular.cpp @@ -150,6 +150,12 @@ void selfadjoint() ref3 << 1, 0, 0, 4; VERIFY(m3 == ref3); + + // example inspired from bug 159 + int array[] = {1, 2, 3, 4}; + Matrix2i::Map(array).part<SelfAdjoint>() = Matrix2i::Random().part<LowerTriangular>(); + + std::cout << "hello\n" << array << std::endl; } void test_eigen2_triangular() diff --git a/test/triangular.cpp b/test/triangular.cpp index 0c69749e0..69decb793 100644 --- a/test/triangular.cpp +++ b/test/triangular.cpp @@ -235,6 +235,11 @@ template<typename MatrixType> void triangular_rect(const MatrixType& m) VERIFY_IS_APPROX(m2,m3); } +void bug_159() +{ + Matrix3d m = Matrix3d::Random().triangularView<Lower>(); +} + void test_triangular() { for(int i = 0; i < g_repeat ; i++) @@ -255,4 +260,6 @@ void test_triangular() CALL_SUBTEST_5( triangular_rect(MatrixXcd(r, c)) ); CALL_SUBTEST_6( triangular_rect(Matrix<float,Dynamic,Dynamic,RowMajor>(r, c)) ); } + + CALL_SUBTEST_1( bug_159() ); } |