aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2011-01-26 10:01:18 -0500
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2011-01-26 10:01:18 -0500
commit313eea8f10b79eca013d5fc983f2e7f9fea1eb5b (patch)
tree2271744486a3eeb5e054db8f39b5d8bfe77f8dcb
parentf88ca0ac79ad67124d1c61d258d243e9f66de22f (diff)
fix the remainder of bug #159
-rw-r--r--Eigen/src/Core/TriangularMatrix.h4
-rw-r--r--test/eigen2/eigen2_triangular.cpp6
-rw-r--r--test/triangular.cpp7
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() );
}