diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-07-26 09:40:19 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-07-26 09:40:19 +0200 |
commit | 757971e7eaca0a5ee635d531b865e741dd8a2ed5 (patch) | |
tree | 5b1da909a98e5e475688587348275f2f8284df47 | |
parent | c9425492c8e050cc19002faaa5d0017d19c2ac76 (diff) |
bug #1258: fix compilation of Map<SparseMatrix>::coeffRef
-rw-r--r-- | Eigen/src/SparseCore/SparseMap.h | 2 | ||||
-rw-r--r-- | test/sparse_basic.cpp | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/Eigen/src/SparseCore/SparseMap.h b/Eigen/src/SparseCore/SparseMap.h index d76f3b68f..f99be3379 100644 --- a/Eigen/src/SparseCore/SparseMap.h +++ b/Eigen/src/SparseCore/SparseMap.h @@ -186,7 +186,7 @@ class SparseMapBase<Derived,WriteAccessors> Index end = Base::isCompressed() ? Base::m_outerIndex[outer+1] : start + Base::m_innerNonZeros[outer]; eigen_assert(end>=start && "you probably called coeffRef on a non finalized matrix"); eigen_assert(end>start && "coeffRef cannot be called on a zero coefficient"); - Index* r = std::lower_bound(&Base::m_innerIndices[start],&Base::m_innerIndices[end],inner); + StorageIndex* r = std::lower_bound(&Base::m_innerIndices[start],&Base::m_innerIndices[end],inner); const Index id = r - &Base::m_innerIndices[0]; eigen_assert((*r==inner) && (id<end) && "coeffRef cannot be called on a zero coefficient"); return const_cast<Scalar*>(Base::m_values)[id]; diff --git a/test/sparse_basic.cpp b/test/sparse_basic.cpp index 77523bab5..10309b3a9 100644 --- a/test/sparse_basic.cpp +++ b/test/sparse_basic.cpp @@ -317,6 +317,17 @@ template<typename SparseMatrixType> void sparse_basic(const SparseMatrixType& re VERIFY_IS_APPROX(mapMat2+mapMat3, refMat2+refMat3); VERIFY_IS_APPROX(mapMat2+mapMat3, refMat2+refMat3); } + + Index i = internal::random<Index>(0,rows-1); + Index j = internal::random<Index>(0,cols-1); + m2.coeffRef(i,j) = 123; + if(internal::random<bool>()) + m2.makeCompressed(); + Map<SparseMatrixType> mapMat2(rows, cols, m2.nonZeros(), m2.outerIndexPtr(), m2.innerIndexPtr(), m2.valuePtr(), m2.innerNonZeroPtr()); + VERIFY_IS_EQUAL(m2.coeff(i,j),Scalar(123)); + VERIFY_IS_EQUAL(mapMat2.coeff(i,j),Scalar(123)); + mapMat2.coeffRef(i,j) = -123; + VERIFY_IS_EQUAL(m2.coeff(i,j),Scalar(-123)); } // test triangularView |