aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/sparse_basic.cpp
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-10-13 11:30:41 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-10-13 11:30:41 +0200
commitb4c79ee1d3d7b44e58f2bea48cd597aa0fa7e007 (patch)
treee7f58f4fb55fffba3234b1cdf8856aeaabd5bac5 /test/sparse_basic.cpp
parentb9d81c915009e08a2397a2fc2d36a15d16b3b32f (diff)
Update custom setFromTripplets API to allow passing a functor object, and add a collapseDuplicates method to cleanup the API. Also add respective unit test
Diffstat (limited to 'test/sparse_basic.cpp')
-rw-r--r--test/sparse_basic.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/test/sparse_basic.cpp b/test/sparse_basic.cpp
index 95bbfab0e..993f7840c 100644
--- a/test/sparse_basic.cpp
+++ b/test/sparse_basic.cpp
@@ -258,19 +258,33 @@ template<typename SparseMatrixType> void sparse_basic(const SparseMatrixType& re
std::vector<TripletType> triplets;
Index ntriplets = rows*cols;
triplets.reserve(ntriplets);
- DenseMatrix refMat(rows,cols);
- refMat.setZero();
+ DenseMatrix refMat_sum = DenseMatrix::Zero(rows,cols);
+ DenseMatrix refMat_prod = DenseMatrix::Zero(rows,cols);
+ DenseMatrix refMat_last = DenseMatrix::Zero(rows,cols);
+
for(Index i=0;i<ntriplets;++i)
{
StorageIndex r = internal::random<StorageIndex>(0,StorageIndex(rows-1));
StorageIndex c = internal::random<StorageIndex>(0,StorageIndex(cols-1));
Scalar v = internal::random<Scalar>();
triplets.push_back(TripletType(r,c,v));
- refMat(r,c) += v;
+ refMat_sum(r,c) += v;
+ if(std::abs(refMat_prod(r,c))==0)
+ refMat_prod(r,c) = v;
+ else
+ refMat_prod(r,c) *= v;
+ refMat_last(r,c) = v;
}
SparseMatrixType m(rows,cols);
m.setFromTriplets(triplets.begin(), triplets.end());
- VERIFY_IS_APPROX(m, refMat);
+ VERIFY_IS_APPROX(m, refMat_sum);
+
+ m.setFromTriplets(triplets.begin(), triplets.end(), std::multiplies<Scalar>());
+ VERIFY_IS_APPROX(m, refMat_prod);
+#if (defined(__cplusplus) && __cplusplus >= 201103L)
+ m.setFromTriplets(triplets.begin(), triplets.end(), [] (Scalar,Scalar b) { return b; });
+ VERIFY_IS_APPROX(m, refMat_last);
+#endif
}
// test Map