GCC Code Coverage Report


Directory: ./
File: tasks/kapanova_s_sparse_matrix_mult_ccs_seq/seq/src/ops_seq.cpp
Date: 2026-04-02 17:12:27
Exec Total Coverage
Lines: 41 42 97.6%
Functions: 5 5 100.0%
Branches: 38 62 61.3%

Line Branch Exec Source
1 #include "kapanova_s_sparse_matrix_mult_ccs_seq/seq/include/ops_seq.hpp"
2
3 #include <algorithm>
4 #include <cstddef>
5 #include <vector>
6
7 #include "kapanova_s_sparse_matrix_mult_ccs_seq/common/include/common.hpp"
8
9 namespace kapanova_s_sparse_matrix_mult_ccs_seq {
10
11
1/2
✓ Branch 2 taken 40 times.
✗ Branch 3 not taken.
40 KapanovaSSparseMatrixMultCCSSeq::KapanovaSSparseMatrixMultCCSSeq(const InType &in) {
12 SetTypeOfTask(GetStaticTypeOfTask());
13 GetInput() = in;
14 40 }
15
16 40 bool KapanovaSSparseMatrixMultCCSSeq::ValidationImpl() {
17 const auto &a = std::get<0>(GetInput());
18 const auto &b = std::get<1>(GetInput());
19
20
1/2
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
40 if (a.cols != b.rows) {
21 return false;
22 }
23
3/6
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 40 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
40 if (a.rows == 0 || a.cols == 0 || b.rows == 0 || b.cols == 0) {
24 return false;
25 }
26
1/2
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
40 if (a.col_ptrs.size() != a.cols + 1) {
27 return false;
28 }
29
1/2
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
40 if (b.col_ptrs.size() != b.cols + 1) {
30 return false;
31 }
32
2/4
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 40 times.
✗ Branch 3 not taken.
40 if (a.col_ptrs[0] != 0 || b.col_ptrs[0] != 0) {
33 return false;
34 }
35
1/2
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
40 if (a.col_ptrs[a.cols] != a.nnz) {
36 return false;
37 }
38
1/2
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
40 if (b.col_ptrs[b.cols] != b.nnz) {
39 return false;
40 }
41
2/4
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 40 times.
✗ Branch 3 not taken.
40 if (a.values.size() != a.nnz || a.row_indices.size() != a.nnz) {
42 return false;
43 }
44
2/4
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 40 times.
40 if (b.values.size() != b.nnz || b.row_indices.size() != b.nnz) {
45 return false;
46 }
47
48 return true;
49 }
50
51 40 bool KapanovaSSparseMatrixMultCCSSeq::PreProcessingImpl() {
52 40 return true;
53 }
54
55
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 40 times.
40 bool KapanovaSSparseMatrixMultCCSSeq::RunImpl() {
56 const auto &a = std::get<0>(GetInput());
57 const auto &b = std::get<1>(GetInput());
58 OutType &c = GetOutput();
59
60 c.values.clear();
61 c.row_indices.clear();
62 40 c.rows = a.rows;
63 40 c.cols = b.cols;
64 40 c.col_ptrs.assign(c.cols + 1, 0);
65
66 40 std::vector<double> accum(a.rows, 0.0);
67
1/4
✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
40 std::vector<bool> nz_elem_rows(a.rows, false);
68 40 std::vector<size_t> nnz_rows;
69
70
2/2
✓ Branch 0 taken 96 times.
✓ Branch 1 taken 40 times.
136 for (size_t j = 0; j < b.cols; ++j) {
71 96 c.col_ptrs[j] = c.values.size();
72
73
2/2
✓ Branch 0 taken 144 times.
✓ Branch 1 taken 96 times.
240 for (size_t k = b.col_ptrs[j]; k < b.col_ptrs[j + 1]; ++k) {
74 144 size_t ind = b.row_indices[k];
75 144 double b_val = b.values[k];
76
77
2/2
✓ Branch 0 taken 176 times.
✓ Branch 1 taken 144 times.
320 for (size_t zc = a.col_ptrs[ind]; zc < a.col_ptrs[ind + 1]; ++zc) {
78 176 size_t i = a.row_indices[zc];
79
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 176 times.
176 double a_val = a.values[zc];
80
81
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 176 times.
176 accum[i] += a_val * b_val;
82
2/2
✓ Branch 0 taken 128 times.
✓ Branch 1 taken 48 times.
176 if (!nz_elem_rows[i]) {
83 nz_elem_rows[i] = true;
84 nnz_rows.push_back(i);
85 }
86 }
87 }
88
89 std::ranges::sort(nnz_rows);
90
91
3/4
✓ Branch 0 taken 128 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 128 times.
✓ Branch 3 taken 96 times.
224 for (size_t i : nnz_rows) {
92
1/2
✓ Branch 0 taken 128 times.
✗ Branch 1 not taken.
128 if (accum[i] != 0.0) {
93
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 96 times.
128 c.row_indices.push_back(i);
94
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 96 times.
128 c.values.push_back(accum[i]);
95 }
96
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128 times.
128 accum[i] = 0.0;
97 nz_elem_rows[i] = false;
98 }
99 nnz_rows.clear();
100 }
101
102 40 c.nnz = c.values.size();
103
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 8 times.
40 c.col_ptrs[c.cols] = c.nnz;
104
105 40 return true;
106 }
107
108 40 bool KapanovaSSparseMatrixMultCCSSeq::PostProcessingImpl() {
109 40 return true;
110 }
111
112 } // namespace kapanova_s_sparse_matrix_mult_ccs_seq
113