mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-01-30 17:40:05 +08:00
bug #1516: add assertion for out-of-range diagonal index in MatrixBase::diagonal(i)
This commit is contained in:
parent
407e3e2621
commit
8d0ffe3655
@ -70,7 +70,10 @@ template<typename MatrixType, int _DiagIndex> class Diagonal
|
|||||||
EIGEN_DENSE_PUBLIC_INTERFACE(Diagonal)
|
EIGEN_DENSE_PUBLIC_INTERFACE(Diagonal)
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
explicit inline Diagonal(MatrixType& matrix, Index a_index = DiagIndex) : m_matrix(matrix), m_index(a_index) {}
|
explicit inline Diagonal(MatrixType& matrix, Index a_index = DiagIndex) : m_matrix(matrix), m_index(a_index)
|
||||||
|
{
|
||||||
|
eigen_assert( a_index <= m_matrix.cols() && -a_index <= m_matrix.rows() );
|
||||||
|
}
|
||||||
|
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Diagonal)
|
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Diagonal)
|
||||||
|
|
||||||
|
@ -66,6 +66,9 @@ template<typename MatrixType> void diagonal(const MatrixType& m)
|
|||||||
m2.diagonal(N2).coeffRef(0) = Scalar(2)*s1;
|
m2.diagonal(N2).coeffRef(0) = Scalar(2)*s1;
|
||||||
VERIFY_IS_APPROX(m2.diagonal(N2).coeff(0), Scalar(2)*s1);
|
VERIFY_IS_APPROX(m2.diagonal(N2).coeff(0), Scalar(2)*s1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VERIFY( m1.diagonal( cols).size()==0 );
|
||||||
|
VERIFY( m1.diagonal(-rows).size()==0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename MatrixType> void diagonal_assert(const MatrixType& m) {
|
template<typename MatrixType> void diagonal_assert(const MatrixType& m) {
|
||||||
@ -81,6 +84,9 @@ template<typename MatrixType> void diagonal_assert(const MatrixType& m) {
|
|||||||
VERIFY_RAISES_ASSERT( m1.array() *= m1.diagonal().array() );
|
VERIFY_RAISES_ASSERT( m1.array() *= m1.diagonal().array() );
|
||||||
VERIFY_RAISES_ASSERT( m1.array() /= m1.diagonal().array() );
|
VERIFY_RAISES_ASSERT( m1.array() /= m1.diagonal().array() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VERIFY_RAISES_ASSERT( m1.diagonal(cols+1) );
|
||||||
|
VERIFY_RAISES_ASSERT( m1.diagonal(-(rows+1)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_diagonal()
|
void test_diagonal()
|
||||||
@ -95,7 +101,6 @@ void test_diagonal()
|
|||||||
CALL_SUBTEST_2( diagonal(MatrixXcd(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
|
CALL_SUBTEST_2( diagonal(MatrixXcd(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
|
||||||
CALL_SUBTEST_1( diagonal(MatrixXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
|
CALL_SUBTEST_1( diagonal(MatrixXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
|
||||||
CALL_SUBTEST_1( diagonal(Matrix<float,Dynamic,4>(3, 4)) );
|
CALL_SUBTEST_1( diagonal(Matrix<float,Dynamic,4>(3, 4)) );
|
||||||
|
CALL_SUBTEST_1( diagonal_assert(MatrixXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
|
||||||
}
|
}
|
||||||
|
|
||||||
CALL_SUBTEST_1( diagonal_assert(MatrixXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user