aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/sparse.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2013-03-06 11:58:22 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2013-03-06 11:58:22 +0100
commit98ce4455ddad01ef028b65f96e232d4b750647f0 (patch)
tree248f3d88d1e65f8fe2cdbb18215f05982764560b /test/sparse.h
parent69bd334d2be5890cd7a8b5f4d7e62f5db1b02b18 (diff)
fix sparse vector assignment from a sparse matrix
Diffstat (limited to 'test/sparse.h')
-rw-r--r--test/sparse.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/sparse.h b/test/sparse.h
index 4db0004aa..b6f6e6fce 100644
--- a/test/sparse.h
+++ b/test/sparse.h
@@ -178,5 +178,30 @@ initSparse(double density,
}
}
+template<typename Scalar> void
+initSparse(double density,
+ Matrix<Scalar,1,Dynamic>& refVec,
+ SparseVector<Scalar,RowMajor>& sparseVec,
+ std::vector<int>* zeroCoords = 0,
+ std::vector<int>* nonzeroCoords = 0)
+{
+ sparseVec.reserve(int(refVec.size()*density));
+ sparseVec.setZero();
+ for(int i=0; i<refVec.size(); i++)
+ {
+ Scalar v = (internal::random<double>(0,1) < density) ? internal::random<Scalar>() : Scalar(0);
+ if (v!=Scalar(0))
+ {
+ sparseVec.insertBack(i) = v;
+ if (nonzeroCoords)
+ nonzeroCoords->push_back(i);
+ }
+ else if (zeroCoords)
+ zeroCoords->push_back(i);
+ refVec[i] = v;
+ }
+}
+
+
#include <unsupported/Eigen/SparseExtra>
#endif // EIGEN_TESTSPARSE_H