GCC Code Coverage Report


Directory: ./
File: s21_calc_complements.c
Date: 2025-08-15 23:01:21
Exec Total Coverage
Lines: 38 38 100.0%
Branches: 24 24 100.0%

Line Branch Exec Source
1 #include "s21_matrix.h"
2
3 void s21_calc_complements_n_greater_1(matrix_t *A, matrix_t *result);
4 double s21_calc_minor(matrix_t *A, int row, int col, matrix_t *temp);
5 void s21_calc_minor_matrix(matrix_t *A, int row, int col, matrix_t *temp);
6
7 24 int s21_calc_complements(matrix_t *A, matrix_t *result) {
8
4/4
✓ Branch 1 taken 22 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 20 times.
24 if (s21_check_matrix_is_invalid(A) || result == NULL) {
9 4 return ERROR;
10 }
11
12 20 int code = OK;
13
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 2 times.
20 if (A->columns == A->rows) {
14 18 s21_create_matrix(A->rows, A->columns, result);
15
16
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 16 times.
18 if (A->columns == 1) {
17 2 result->matrix[0][0] = A->matrix[0][0];
18 } else {
19 16 s21_calc_complements_n_greater_1(A, result);
20 }
21 } else {
22 2 code = CALC_ERROR;
23 }
24
25 20 return code;
26 }
27
28 16 void s21_calc_complements_n_greater_1(matrix_t *A, matrix_t *result) {
29 matrix_t temp;
30 16 s21_create_matrix(A->rows - 1, A->columns - 1, &temp);
31
32 16 int multiplier = 1;
33
2/2
✓ Branch 0 taken 48 times.
✓ Branch 1 taken 16 times.
64 for (int i = 0; i < result->rows; i++) {
34
2/2
✓ Branch 0 taken 152 times.
✓ Branch 1 taken 48 times.
200 for (int j = 0; j < result->rows; j++) {
35 152 result->matrix[i][j] = multiplier * s21_calc_minor(A, i, j, &temp);
36 152 multiplier *= -1;
37 }
38
39
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 24 times.
48 if (result->rows % 2 == 0) {
40 24 multiplier *= -1;
41 }
42 }
43
44 16 s21_remove_matrix(&temp);
45 16 }
46
47 152 double s21_calc_minor(matrix_t *A, int row, int col, matrix_t *temp) {
48 152 s21_calc_minor_matrix(A, row, col, temp);
49
50 double result;
51 152 s21_determinant(temp, &result);
52
53 152 return result;
54 }
55
56 152 void s21_calc_minor_matrix(matrix_t *A, int row, int col, matrix_t *temp) {
57 152 int temp_i = 0;
58 152 int temp_j = 0;
59
2/2
✓ Branch 0 taken 504 times.
✓ Branch 1 taken 152 times.
656 for (int i = 0; i < A->rows; i++) {
60 504 temp_j = 0;
61
4/4
✓ Branch 0 taken 1384 times.
✓ Branch 1 taken 352 times.
✓ Branch 2 taken 1232 times.
✓ Branch 3 taken 152 times.
1736 for (int j = 0; j < A->columns && i != row; j++) {
62
2/2
✓ Branch 0 taken 880 times.
✓ Branch 1 taken 352 times.
1232 if (j != col) {
63 880 temp->matrix[temp_i][temp_j] = A->matrix[i][j];
64 880 temp_j++;
65 }
66 }
67
68
2/2
✓ Branch 0 taken 352 times.
✓ Branch 1 taken 152 times.
504 if (i != row) {
69 352 temp_i++;
70 }
71 }
72 152 }
73