Fix sparse iterator and tests.

This commit is contained in:
Antonio Sánchez 2023-04-25 19:05:49 +00:00 committed by Rasmus Munk Larsen
parent 70410310a4
commit 3918768be1
3 changed files with 11 additions and 2 deletions

View File

@ -360,6 +360,7 @@ public:
StorageVal(const StorageIndex& innerIndex, const Scalar& value) : m_innerIndex(innerIndex), m_value(value) {}
StorageVal(const StorageVal& other) : m_innerIndex(other.m_innerIndex), m_value(other.m_value) {}
StorageVal(StorageVal&& other) = default;
inline const StorageIndex& key() const { return m_innerIndex; }
inline StorageIndex& key() { return m_innerIndex; }
@ -382,6 +383,9 @@ class StorageRef
{
public:
using value_type = StorageVal<Scalar, StorageIndex>;
// StorageRef Needs to be move-able for sort on macos.
StorageRef(StorageRef&& other) = default;
inline StorageRef& operator=(const StorageRef& other) {
key() = other.key();
@ -436,6 +440,7 @@ public:
CompressedStorageIterator(difference_type index, StorageIndex* innerIndexPtr, Scalar* valuePtr) : m_index(index), m_data(innerIndexPtr, valuePtr) {}
CompressedStorageIterator(difference_type index, reference data) : m_index(index), m_data(data) {}
CompressedStorageIterator(const CompressedStorageIterator& other) : m_index(other.m_index), m_data(other.m_data) {}
CompressedStorageIterator(CompressedStorageIterator&& other) = default;
inline CompressedStorageIterator& operator=(const CompressedStorageIterator& other) {
m_index = other.m_index;
m_data = other.m_data;

View File

@ -171,8 +171,10 @@ template<typename SparseMatrixType> void sparse_basic(const SparseMatrixType& re
// generate random inner indices with no repeats
Vector<Index, Dynamic> innerIndices(inner);
innerIndices.setLinSpaced(inner, 0, inner - 1);
std::random_device rd;
std::mt19937 g(rd());
for (Index j = 0; j < outer; j++) {
std::random_shuffle(innerIndices.begin(), innerIndices.end());
std::shuffle(innerIndices.begin(), innerIndices.end(), g);
Index nzj = internal::random<Index>(2, inner / 2);
for (Index k = 0; k < nzj; k++) {
Index i = innerIndices[k];

View File

@ -151,7 +151,9 @@ template<typename Scalar,typename StorageIndex> void sparse_vector(int rows, int
DenseVector refVec1 = DenseVector::Zero(rows);
DenseIndexVector innerIndices(rows);
innerIndices.setLinSpaced(0, rows - 1);
std::random_shuffle(innerIndices.begin(), innerIndices.end());
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(innerIndices.begin(), innerIndices.end(), g);
Index nz = internal::random<Index>(2, rows / 2);
for (Index k = 0; k < nz; k++)
{