mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-03-07 18:27:40 +08:00
bug #696: enable zero-sized block at compile-time by relaxing the respective assertion
This commit is contained in:
parent
e8ccc06fe5
commit
d8d37349c3
@ -129,8 +129,8 @@ template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel> class
|
||||
: Impl(xpr, startRow, startCol)
|
||||
{
|
||||
EIGEN_STATIC_ASSERT(RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic,THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE)
|
||||
eigen_assert(startRow >= 0 && BlockRows >= 1 && startRow + BlockRows <= xpr.rows()
|
||||
&& startCol >= 0 && BlockCols >= 1 && startCol + BlockCols <= xpr.cols());
|
||||
eigen_assert(startRow >= 0 && BlockRows >= 0 && startRow + BlockRows <= xpr.rows()
|
||||
&& startCol >= 0 && BlockCols >= 0 && startCol + BlockCols <= xpr.cols());
|
||||
}
|
||||
|
||||
/** Dynamic-size constructor
|
||||
|
@ -25,6 +25,7 @@ template<typename MatrixType> void zeroReduction(const MatrixType& m) {
|
||||
template<typename MatrixType> void zeroSizedMatrix()
|
||||
{
|
||||
MatrixType t1;
|
||||
typedef typename MatrixType::Scalar Scalar;
|
||||
|
||||
if (MatrixType::SizeAtCompileTime == Dynamic || MatrixType::SizeAtCompileTime == 0)
|
||||
{
|
||||
@ -45,6 +46,23 @@ template<typename MatrixType> void zeroSizedMatrix()
|
||||
VERIFY(t1==t2);
|
||||
}
|
||||
}
|
||||
|
||||
if(MatrixType::MaxColsAtCompileTime!=0 && MatrixType::MaxRowsAtCompileTime!=0)
|
||||
{
|
||||
Index rows = MatrixType::RowsAtCompileTime==Dynamic ? internal::random<Index>(1,10) : MatrixType::RowsAtCompileTime;
|
||||
Index cols = MatrixType::ColsAtCompileTime==Dynamic ? internal::random<Index>(1,10) : MatrixType::ColsAtCompileTime;
|
||||
MatrixType m(rows,cols);
|
||||
zeroReduction(m.template block<0,MatrixType::ColsAtCompileTime>(0,0,0,cols));
|
||||
zeroReduction(m.template block<MatrixType::RowsAtCompileTime,0>(0,0,rows,0));
|
||||
zeroReduction(m.template block<0,1>(0,0));
|
||||
zeroReduction(m.template block<1,0>(0,0));
|
||||
Matrix<Scalar,Dynamic,Dynamic> prod = m.template block<MatrixType::RowsAtCompileTime,0>(0,0,rows,0) * m.template block<0,MatrixType::ColsAtCompileTime>(0,0,0,cols);
|
||||
VERIFY(prod.rows()==rows && prod.cols()==cols);
|
||||
VERIFY(prod.isZero());
|
||||
prod = m.template block<1,0>(0,0) * m.template block<0,1>(0,0);
|
||||
VERIFY(prod.size()==1);
|
||||
VERIFY(prod.isZero());
|
||||
}
|
||||
}
|
||||
|
||||
template<typename VectorType> void zeroSizedVector()
|
||||
|
Loading…
Reference in New Issue
Block a user