GCC Code Coverage Report


Directory: ./
File: tasks/kulik_a_mat_mul_double_ccs/seq/src/ops_seq.cpp
Date: 2026-04-02 17:12:27
Exec Total Coverage
Lines: 33 33 100.0%
Functions: 5 5 100.0%
Branches: 24 36 66.7%

Line Branch Exec Source
1 #include "kulik_a_mat_mul_double_ccs/seq/include/ops_seq.hpp"
2
3 #include <algorithm>
4 #include <cstddef>
5 #include <tuple>
6 #include <vector>
7
8 #include "kulik_a_mat_mul_double_ccs/common/include/common.hpp"
9
10 namespace kulik_a_mat_mul_double_ccs {
11
12
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
8 KulikAMatMulDoubleCcsSEQ::KulikAMatMulDoubleCcsSEQ(const InType &in) {
13 SetTypeOfTask(GetStaticTypeOfTask());
14 GetInput() = in;
15 8 }
16
17 8 bool KulikAMatMulDoubleCcsSEQ::ValidationImpl() {
18 const auto &a = std::get<0>(GetInput());
19 const auto &b = std::get<1>(GetInput());
20 8 return (a.m == b.n);
21 }
22
23 8 bool KulikAMatMulDoubleCcsSEQ::PreProcessingImpl() {
24 8 return true;
25 }
26
27
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 bool KulikAMatMulDoubleCcsSEQ::RunImpl() {
28 const auto &a = std::get<0>(GetInput());
29 const auto &b = std::get<1>(GetInput());
30 OutType &c = GetOutput();
31 c.value.clear();
32 c.row.clear();
33 8 c.n = a.n;
34 8 c.m = b.m;
35 8 c.col_ind.assign(c.m + 1, 0); //
36 8 std::vector<double> accum(a.n, 0.0); //
37
1/4
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
8 std::vector<bool> nz_elem_rows(a.n, false); //
38 8 std::vector<size_t> nnz_rows;
39
2/2
✓ Branch 0 taken 48 times.
✓ Branch 1 taken 8 times.
56 for (size_t j = 0; j < b.m; ++j) {
40 48 c.col_ind[j] = c.value.size();
41
2/2
✓ Branch 0 taken 72 times.
✓ Branch 1 taken 48 times.
120 for (size_t k = b.col_ind[j]; k < b.col_ind[j + 1]; ++k) {
42 72 size_t ind = b.row[k];
43 72 double b_val = b.value[k];
44
2/2
✓ Branch 0 taken 112 times.
✓ Branch 1 taken 72 times.
184 for (size_t zc = a.col_ind[ind]; zc < a.col_ind[ind + 1]; ++zc) {
45 112 size_t i = a.row[zc];
46
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 112 times.
112 double a_val = a.value[zc];
47
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 112 times.
112 accum[i] += a_val * b_val;
48
2/2
✓ Branch 0 taken 96 times.
✓ Branch 1 taken 16 times.
112 if (!nz_elem_rows[i]) {
49 nz_elem_rows[i] = true;
50 nnz_rows.push_back(i);
51 }
52 }
53 }
54 std::ranges::sort(nnz_rows);
55 ;
56
3/4
✓ Branch 0 taken 96 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 96 times.
✓ Branch 3 taken 48 times.
144 for (size_t i : nnz_rows) {
57
1/2
✓ Branch 0 taken 96 times.
✗ Branch 1 not taken.
96 if (accum[i] != 0.0) {
58
2/2
✓ Branch 0 taken 56 times.
✓ Branch 1 taken 40 times.
96 c.row.push_back(i);
59
2/2
✓ Branch 0 taken 56 times.
✓ Branch 1 taken 40 times.
96 c.value.push_back(accum[i]);
60 }
61
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 96 times.
96 accum[i] = 0.0;
62 nz_elem_rows[i] = false;
63 }
64 nnz_rows.clear();
65 }
66
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 c.nz = c.value.size();
67
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 c.col_ind[b.m] = c.nz;
68
69 8 return true;
70 }
71
72 8 bool KulikAMatMulDoubleCcsSEQ::PostProcessingImpl() {
73 8 return true;
74 }
75
76 } // namespace kulik_a_mat_mul_double_ccs
77