GCC Code Coverage Report


Directory: ./
File: lib/my/my_convert_base_unsigned.c
Date: 2024-06-05 00:29:21
Exec Total Coverage
Lines: 43 43 100.0%
Functions: 6 6 100.0%
Branches: 20 20 100.0%

Line Branch Exec Source
1 /*
2 ** EPITECH PROJECT, 2023
3 ** my_convert_base
4 ** File description:
5 ** Returns the result of the conversion of number (nbr)
6 ** in a specific base (base_from) to another base (base_to)
7 */
8
9 #include <stdlib.h>
10 #include "my.h"
11
12 391 static int is_valid(char c, char const *base)
13 {
14
2/2
✓ Branch 1 taken 1750 times.
✓ Branch 2 taken 1 times.
1751 for (int i = 0; i < my_strlen(base); i++) {
15
2/2
✓ Branch 0 taken 390 times.
✓ Branch 1 taken 1360 times.
1750 if (c == base[i])
16 390 return 1;
17 }
18 1 return 0;
19 }
20
21 391 static int calculate_base(char const *str, char const *base,
22 int *index, int *error)
23 {
24
2/2
✓ Branch 1 taken 390 times.
✓ Branch 2 taken 1 times.
391 if (is_valid(str[index[0]], base) == 1) {
25
2/2
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 351 times.
390 if (str[index[0]] == base[index[1]]) {
26 39 return index[1] * my_compute_power_rec(my_strlen(base),
27 39 my_strlen(str) - index[0] - 1);
28 }
29 } else {
30 1 *error = 1;
31 }
32 352 return 0;
33 }
34
35 13 static unsigned int my_getnbr_base_unsigned(char const *str, char const *base)
36 {
37 13 unsigned int result = 0;
38 13 int error = 0;
39 int index[2];
40
41
2/2
✓ Branch 1 taken 42 times.
✓ Branch 2 taken 13 times.
55 for (int i = my_strlen(str) - 1; i >= 0; i--) {
42
4/4
✓ Branch 1 taken 394 times.
✓ Branch 2 taken 39 times.
✓ Branch 3 taken 391 times.
✓ Branch 4 taken 3 times.
433 for (int j = 0; j < my_strlen(base) && error == 0; j++) {
43 391 index[0] = i;
44 391 index[1] = j;
45 391 result = result + calculate_base(str, base, index, &error);
46 }
47 }
48 13 return result;
49 }
50
51 13 static char *put_str_nb(unsigned int nb, char const *base, int base_len)
52 {
53 13 int len_nb = 1;
54 13 unsigned int temp_nb = nb;
55 char *nb_str;
56 13 unsigned int figure_temp = nb;
57
58
2/2
✓ Branch 0 taken 93 times.
✓ Branch 1 taken 13 times.
106 while ((temp_nb / base_len) != 0) {
59 93 len_nb = len_nb + 1;
60 93 temp_nb = temp_nb / base_len;
61 }
62 13 nb_str = malloc(sizeof(char) * len_nb);
63
2/2
✓ Branch 0 taken 106 times.
✓ Branch 1 taken 13 times.
119 for (int i = 0; i < len_nb; i++) {
64 106 nb_str[len_nb - i - 1] = base[figure_temp % base_len];
65 106 figure_temp = (figure_temp - (figure_temp % base_len)) / base_len;
66 }
67 13 nb_str[len_nb] = '\0';
68 13 return my_strdup(nb_str);
69 }
70
71 13 static char *my_setnbr_base(unsigned int nbr, char const *base)
72 {
73 13 int base_len = 0;
74
75
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 13 times.
39 while (base[base_len] != '\0')
76 26 base_len = base_len + 1;
77 13 return put_str_nb(nbr, base, base_len);
78 }
79
80 13 char *my_convert_base_unsigned(char const *nbr,
81 char const *base_from, char const *base_to)
82 {
83 13 unsigned int number = my_getnbr_base_unsigned(nbr, base_from);
84 13 char *result = my_setnbr_base(number, base_to);
85
86 13 return result;
87 }
88