diff --git a/Eigen/src/SparseCore/SparseBlock.h b/Eigen/src/SparseCore/SparseBlock.h index 38c7f1ff6..75b5e37a3 100644 --- a/Eigen/src/SparseCore/SparseBlock.h +++ b/Eigen/src/SparseCore/SparseBlock.h @@ -52,14 +52,24 @@ public: inline BlockImpl(const XprType& xpr, int i) : m_matrix(xpr), m_outerStart(i), m_outerSize(OuterSize) - {} + {std::cout << __LINE__ << "\n";} inline BlockImpl(const XprType& xpr, int startRow, int startCol, int blockRows, int blockCols) : m_matrix(xpr), m_outerStart(IsRowMajor ? startRow : startCol), m_outerSize(IsRowMajor ? blockRows : blockCols) - {} + {std::cout << __LINE__ << "\n";} EIGEN_STRONG_INLINE Index rows() const { return IsRowMajor ? m_outerSize.value() : m_matrix.rows(); } EIGEN_STRONG_INLINE Index cols() const { return IsRowMajor ? m_matrix.cols() : m_outerSize.value(); } + + Index nonZeros() const + { + Index nnz = 0; + Index end = m_outerStart + m_outerSize.value(); + for(int j=m_outerStart; j inline BlockType& operator=(const SparseMatrixBase& other) @@ -307,13 +317,13 @@ public: m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0), m_blockRows(xpr.rows()), m_blockCols(xpr.cols()) - {} + {std::cout << __LINE__ << "\n";} /** Dynamic-size constructor */ inline BlockImpl(const XprType& xpr, int startRow, int startCol, int blockRows, int blockCols) : m_matrix(xpr), m_startRow(startRow), m_startCol(startCol), m_blockRows(blockRows), m_blockCols(blockCols) - {} + {std::cout << __LINE__ << "\n";} inline int rows() const { return m_blockRows.value(); } inline int cols() const { return m_blockCols.value(); } diff --git a/test/sparse_basic.cpp b/test/sparse_basic.cpp index 498ecfe29..d5ff9f80b 100644 --- a/test/sparse_basic.cpp +++ b/test/sparse_basic.cpp @@ -198,6 +198,8 @@ template void sparse_basic(const SparseMatrixType& re if(j>0) VERIFY(j==numext::real(m3.innerVector(j).lastCoeff())); } + + VERIFY(m3.innerVector(j0).nonZeros() == m3.transpose().innerVector(j0).nonZeros()); //m2.innerVector(j0) = 2*m2.innerVector(j1); //refMat2.col(j0) = 2*refMat2.col(j1); @@ -227,6 +229,8 @@ template void sparse_basic(const SparseMatrixType& re VERIFY_IS_APPROX(m2, refMat2); + VERIFY(m2.innerVectors(j0,n0).nonZeros() == m2.transpose().innerVectors(j0,n0).nonZeros()); + m2.innerVectors(j0,n0) = m2.innerVectors(j0,n0) + m2.innerVectors(j1,n0); if(SparseMatrixType::IsRowMajor) refMat2.middleRows(j0,n0) = (refMat2.middleRows(j0,n0) + refMat2.middleRows(j1,n0)).eval(); @@ -234,7 +238,6 @@ template void sparse_basic(const SparseMatrixType& re refMat2.middleCols(j0,n0) = (refMat2.middleCols(j0,n0) + refMat2.middleCols(j1,n0)).eval(); VERIFY_IS_APPROX(m2, refMat2); - } // test basic computations