GCC Code Coverage Report


Directory: ./
File: tasks/leonova_a_star/seq/src/ops_seq.cpp
Date: 2026-01-10 02:40:41
Exec Total Coverage
Lines: 36 41 87.8%
Functions: 8 8 100.0%
Branches: 45 86 52.3%

Line Branch Exec Source
1 #include "leonova_a_star/seq/include/ops_seq.hpp"
2
3 #include <cstddef>
4 #include <new>
5 #include <tuple>
6 #include <vector>
7
8 #include "leonova_a_star/common/include/common.hpp"
9
10 namespace leonova_a_star {
11
12 namespace {
13
14 constexpr size_t kMaxMatrixSize = 10000;
15
16 bool CheckMatricesNotEmpty(const std::vector<std::vector<int>> &matrix_a,
17 const std::vector<std::vector<int>> &matrix_b) {
18
12/24
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 48 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 48 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 48 times.
✓ Branch 8 taken 96 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 96 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 96 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 96 times.
✓ Branch 16 taken 48 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 48 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 48 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 48 times.
✗ Branch 23 not taken.
192 return !matrix_a.empty() && !matrix_b.empty() && !matrix_a[0].empty() && !matrix_b[0].empty();
19 }
20
21 208 int ComputeDotProduct(const std::vector<std::vector<int>> &matrix_a, const std::vector<std::vector<int>> &matrix_b,
22 size_t row, size_t col, size_t length) {
23 int sum = 0;
24
2/2
✓ Branch 0 taken 528 times.
✓ Branch 1 taken 208 times.
736 for (size_t k = 0; k < length; ++k) {
25
4/8
✓ Branch 0 taken 528 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 528 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 528 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 528 times.
✗ Branch 7 not taken.
528 if (row < matrix_a.size() && k < matrix_a[row].size() && k < matrix_b.size() && col < matrix_b[k].size()) {
26 528 sum += matrix_a[row][k] * matrix_b[k][col];
27 }
28 }
29 208 return sum;
30 }
31
32 } // namespace
33
34
1/2
✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
48 LeonovaAStarSEQ::LeonovaAStarSEQ(const InType &in) {
35 SetTypeOfTask(GetStaticTypeOfTask());
36 GetInput() = in;
37
38 const auto &matrix_a = std::get<0>(GetInput());
39 const auto &matrix_b = std::get<1>(GetInput());
40
41 if (CheckMatricesNotEmpty(matrix_a, matrix_b)) {
42 size_t rows = matrix_a.size();
43 size_t cols = matrix_b[0].size();
44
45
1/2
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
48 if (rows <= kMaxMatrixSize && cols <= kMaxMatrixSize) {
46
1/2
✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
48 GetOutput().resize(rows);
47
2/2
✓ Branch 0 taken 96 times.
✓ Branch 1 taken 48 times.
144 for (auto &row : GetOutput()) {
48
1/2
✓ Branch 1 taken 96 times.
✗ Branch 2 not taken.
96 row.resize(cols, 0);
49 }
50 }
51 }
52 48 }
53
54 48 bool LeonovaAStarSEQ::PreProcessingImpl() {
55 48 return true;
56 }
57
58
1/2
✓ Branch 0 taken 96 times.
✗ Branch 1 not taken.
96 bool LeonovaAStarSEQ::ValidationImpl() {
59 const auto &matrix_a = std::get<0>(GetInput());
60 const auto &matrix_b = std::get<1>(GetInput());
61
62 if (!CheckMatricesNotEmpty(matrix_a, matrix_b)) {
63 return false;
64 }
65
66
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 96 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 96 times.
96 if (matrix_a.size() > kMaxMatrixSize || matrix_b.size() > kMaxMatrixSize) {
67 return false;
68 }
69
70 size_t rows_a = matrix_a.size();
71 size_t cols_a = matrix_a[0].size();
72
73
2/2
✓ Branch 0 taken 96 times.
✓ Branch 1 taken 96 times.
192 for (size_t index = 1; index < rows_a; ++index) {
74
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 96 times.
96 if (index >= matrix_a.size() || matrix_a[index].size() != cols_a) {
75 return false;
76 }
77 }
78
79 size_t rows_b = matrix_b.size();
80 size_t cols_b = matrix_b[0].size();
81
82
2/2
✓ Branch 0 taken 144 times.
✓ Branch 1 taken 96 times.
240 for (size_t index = 1; index < rows_b; ++index) {
83
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 144 times.
144 if (index >= matrix_b.size() || matrix_b[index].size() != cols_b) {
84 return false;
85 }
86 }
87
88 96 return cols_a == rows_b;
89 }
90
91
1/2
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
48 bool LeonovaAStarSEQ::ResizeOutputMatrix(size_t rows, size_t cols) {
92 try {
93
4/8
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 48 times.
48 if (GetOutput().size() != rows || (rows > 0 && !GetOutput().empty() && GetOutput()[0].size() != cols)) {
94 GetOutput().resize(rows);
95 for (auto &row : GetOutput()) {
96 row.resize(cols, 0);
97 }
98 }
99 return true;
100 } catch (const std::bad_alloc &) {
101 return false;
102 }
103 }
104
105 48 void LeonovaAStarSEQ::MultiplyMatrices(const std::vector<std::vector<int>> &matrix_a,
106 const std::vector<std::vector<int>> &matrix_b, size_t rows_a, size_t cols_a,
107 size_t cols_b) {
108
2/2
✓ Branch 0 taken 96 times.
✓ Branch 1 taken 48 times.
144 for (size_t index = 0; index < rows_a; ++index) {
109
2/2
✓ Branch 0 taken 208 times.
✓ Branch 1 taken 96 times.
304 for (size_t jndex = 0; jndex < cols_b; ++jndex) {
110 size_t length = cols_a;
111 208 GetOutput()[index][jndex] = ComputeDotProduct(matrix_a, matrix_b, index, jndex, length);
112 }
113 }
114 48 }
115
116 48 bool LeonovaAStarSEQ::RunImpl() {
117
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
48 if (!ValidationImpl()) {
118 return false;
119 }
120 const auto &matrix_a = std::get<0>(GetInput());
121 const auto &matrix_b = std::get<1>(GetInput());
122
123 if (!CheckMatricesNotEmpty(matrix_a, matrix_b)) {
124 return false;
125 }
126
127 size_t rows_a = matrix_a.size();
128 size_t cols_a = matrix_a[0].size();
129 size_t cols_b = matrix_b[0].size();
130
131
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
48 if (rows_a > kMaxMatrixSize || cols_b > kMaxMatrixSize) {
132 return false;
133 }
134
135
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
48 if (!ResizeOutputMatrix(rows_a, cols_b)) {
136 return false;
137 }
138
139 48 MultiplyMatrices(matrix_a, matrix_b, rows_a, cols_a, cols_b);
140 48 return true;
141 }
142
143 48 bool LeonovaAStarSEQ::PostProcessingImpl() {
144 48 return true;
145 }
146
147 } // namespace leonova_a_star
148