GCC Code Coverage Report


Directory: ./
File: tasks/guseva_crs/common/include/multiplier.hpp
Date: 2026-05-11 08:26:31
Exec Total Coverage
Lines: 25 26 96.2%
Functions: 1 1 100.0%
Branches: 11 14 78.6%

Line Branch Exec Source
1 #pragma once
2
3 #include <cstddef>
4
5 #include "common.hpp"
6 namespace guseva_crs {
7
8 class Multiplier {
9 public:
10 Multiplier() = default;
11 virtual ~Multiplier() = default;
12
13 156 [[nodiscard]] virtual CRS Transpose(const CRS &a) const {
14 156 CRS transposed;
15 156 transposed.nz = a.nz;
16 156 transposed.ncols = a.nrows;
17 156 transposed.nrows = a.ncols;
18
1/2
✓ Branch 1 taken 156 times.
✗ Branch 2 not taken.
156 transposed.row_ptrs.resize(transposed.nrows + 1, 0);
19
1/2
✓ Branch 1 taken 156 times.
✗ Branch 2 not taken.
156 transposed.values.resize(a.nz, 0);
20
1/2
✓ Branch 1 taken 156 times.
✗ Branch 2 not taken.
156 transposed.cols.resize(a.nz, 0);
21
2/2
✓ Branch 0 taken 6058 times.
✓ Branch 1 taken 156 times.
6214 for (std::size_t i = 0; i < a.nz; i++) {
22 6058 transposed.row_ptrs[a.cols[i] + 1]++;
23 }
24 std::size_t row = 0;
25
2/2
✓ Branch 0 taken 2522 times.
✓ Branch 1 taken 156 times.
2678 for (std::size_t i = 1; i <= transposed.nrows; i++) {
26 2522 auto tmp = transposed.row_ptrs[i];
27 2522 transposed.row_ptrs[i] = row;
28 2522 row += tmp;
29 }
30
2/2
✓ Branch 0 taken 2522 times.
✓ Branch 1 taken 156 times.
2678 for (std::size_t i = 0; i < a.nrows; i++) {
31 2522 auto j1 = a.row_ptrs[i];
32 2522 auto j2 = a.row_ptrs[i + 1];
33 auto col = i;
34
2/2
✓ Branch 0 taken 6058 times.
✓ Branch 1 taken 2522 times.
8580 for (auto j = j1; j < j2; j++) {
35 6058 auto value = a.values[j];
36 6058 auto row_ind = a.cols[j];
37 6058 auto ind = transposed.row_ptrs[row_ind + 1];
38 6058 transposed.values[ind] = value;
39 6058 transposed.cols[ind] = col;
40 6058 transposed.row_ptrs[row_ind + 1]++;
41 }
42 }
43 156 return transposed;
44 };
45
46 [[nodiscard]] virtual CRS Multiply(const CRS &a, const CRS &b) const = 0;
47 };
48
49 } // namespace guseva_crs
50