@@ -47,9 +47,9 @@ auto generate_coo(std::size_t m, std::size_t n, std::size_t nnz,
4747}
4848
4949template <typename T = float , typename I = index_t , typename O = I>
50- auto generate_csr (std::size_t m, std::size_t n, std::size_t nnz,
51- std::size_t seed = 0 ) {
52- auto && [values, rowind, colind, shape, _ ] =
50+ auto generate_csr_sorted (std::size_t m, std::size_t n, std::size_t nnz,
51+ std::size_t seed = 0 ) {
52+ auto && [values, rowind, colind, shape, nnz_ ] =
5353 generate_coo<T, I>(m, n, nnz, seed);
5454
5555 std::vector<O> rowptr (m + 1 );
@@ -61,6 +61,31 @@ auto generate_csr(std::size_t m, std::size_t n, std::size_t nnz,
6161 return std::tuple (values, rowptr, colind, shape, I (nnz));
6262}
6363
64+ template <typename T = float , typename I = index_t , typename O = I>
65+ auto generate_csr (std::size_t m, std::size_t n, std::size_t nnz,
66+ std::size_t seed = 0 ) {
67+ auto && [values, rowptr, colind, shape, nnz_] =
68+ generate_csr_sorted<T, I, O>(m, n, nnz, seed);
69+
70+ for (std::size_t row = 0 ; row < m; row++) {
71+ const auto row_begin = rowptr[row];
72+ const auto row_end = rowptr[row + 1 ];
73+ std::shuffle (colind.begin () + row_begin, colind.begin () + row_end,
74+ std::mt19937 (seed));
75+ }
76+
77+ return std::tuple (values, rowptr, colind, shape, I (nnz));
78+ }
79+
80+ template <typename T = float , typename I = index_t , typename O = I>
81+ auto generate_csc_sorted (std::size_t m, std::size_t n, std::size_t nnz,
82+ std::size_t seed = 0 ) {
83+ auto && [values, colptr, rowind, shape_, nnz_] =
84+ generate_csr_sorted<T, I, O>(n, m, nnz, seed);
85+ return std::tuple (std::move (values), std::move (colptr), std::move (rowind),
86+ spblas::index<I>(m, n), I (nnz));
87+ }
88+
6489template <typename T = float , typename I = index_t , typename O = I>
6590auto generate_csc (std::size_t m, std::size_t n, std::size_t nnz,
6691 std::size_t seed = 0 ) {
0 commit comments