diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-10-13 11:30:41 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-10-13 11:30:41 +0200 |
commit | b4c79ee1d3d7b44e58f2bea48cd597aa0fa7e007 (patch) | |
tree | e7f58f4fb55fffba3234b1cdf8856aeaabd5bac5 /test/sparse_basic.cpp | |
parent | b9d81c915009e08a2397a2fc2d36a15d16b3b32f (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.cpp | 22 |
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 |