GCC Code Coverage Report


Directory: ./
File: lib/my/my_super_number.c
Date: 2024-05-07 14:54:03
Exec Total Coverage
Lines: 38 38 100.0%
Functions: 3 3 100.0%
Branches: 73 88 83.0%

Line Branch Exec Source
1 /*
2 ** EPITECH PROJECT, 2024
3 ** my_super_number
4 ** File description:
5 ** Returns an int number starting from a string number (number)
6 ** and change my_errno if an error occurs depending on the settings (settings)
7 */
8 /**
9 * @file my_super_number.c
10 * @brief The file containing the my_super_number function
11 * @author Nicolas TORO
12 */
13
14 #include "my.h"
15
16 int my_errno;
17
18 169 static char not_a_number(char c)
19 {
20
8/8
✓ Branch 0 taken 125 times.
✓ Branch 1 taken 44 times.
✓ Branch 2 taken 19 times.
✓ Branch 3 taken 106 times.
✓ Branch 4 taken 30 times.
✓ Branch 5 taken 33 times.
✓ Branch 6 taken 19 times.
✓ Branch 7 taken 11 times.
169 if ((c < '0' || c > '9') && c != '-' && c != '+')
21 19 return 1;
22 150 return 0;
23 }
24
25 78 static char check_end(char *number, number_settings_t *settings,
26 int i, int start)
27 {
28 78 my_errno = 0;
29
6/6
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 5 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 63 times.
✓ Branch 5 taken 3 times.
✓ Branch 6 taken 7 times.
78 if ((!settings->letter_before && not_a_number(number[i]) && start == -1)
30
6/6
✓ Branch 0 taken 48 times.
✓ Branch 1 taken 23 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 43 times.
✓ Branch 5 taken 3 times.
✓ Branch 6 taken 2 times.
71 || (!settings->letter_after && not_a_number(number[i]) && start != -1)
31
6/6
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 23 times.
✓ Branch 2 taken 39 times.
✓ Branch 3 taken 7 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 38 times.
69 || (!settings->letter_after && (number[i] == '-' || number[i] == '+')
32
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 1 times.
8 && start != -1)
33
6/6
✓ Branch 0 taken 60 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 23 times.
✓ Branch 3 taken 37 times.
✓ Branch 4 taken 22 times.
✓ Branch 5 taken 1 times.
68 || (!settings->multiple_signe && i != 0 && (number[i] == '-' ||
34
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 22 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
23 number[i] == '+') && (number[i - 1] == '-' || number[i - 1] == '+'))
35
3/4
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 52 times.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
67 || (!settings->overflow && (i > start + 9 ||
36
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
15 (i > start + 8 && number[start] != '1' && number[start] != '2')))) {
37 11 my_errno = 1;
38 11 return 1;
39 }
40
5/6
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 45 times.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 21 times.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
67 if (settings->letter_after && not_a_number(number[i]) && start != -1)
41 1 return 1;
42 66 return 0;
43 }
44
45 46 int my_super_number(char *number, number_settings_t settings)
46 {
47 46 int nb = 0;
48 46 int start = -1;
49 46 char neg = 1;
50
51
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 45 times.
46 if (number[0] == '\0')
52 1 return nb;
53
2/2
✓ Branch 0 taken 78 times.
✓ Branch 1 taken 33 times.
111 for (int i = 0; number[i] != '\0'; i++) {
54
2/2
✓ Branch 1 taken 12 times.
✓ Branch 2 taken 66 times.
78 if (check_end(number, &settings, i, start))
55 12 return nb * neg;
56
5/6
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 61 times.
✓ Branch 3 taken 3 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
66 if ((settings.letter_before && not_a_number(number[i]) && start == -1)
57
3/6
✓ Branch 0 taken 21 times.
✓ Branch 1 taken 42 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 21 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
63 || (settings.letter_after && not_a_number(number[i]) && start != -1))
58 3 neg = 1;
59
3/4
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 53 times.
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
66 if (number[i] == '-' && start == -1)
60 13 neg = neg * -1;
61
6/6
✓ Branch 0 taken 56 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 34 times.
✓ Branch 3 taken 22 times.
✓ Branch 4 taken 31 times.
✓ Branch 5 taken 3 times.
66 if (start == -1 && number[i] >= '1' && number[i] <= '9')
62 31 start = i;
63
4/4
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 16 times.
✓ Branch 2 taken 47 times.
✓ Branch 3 taken 3 times.
66 if (number[i] >= '0' && number[i] <= '9')
64 47 nb = nb * 10 + (number[i] - 48);
65 }
66 33 return nb * neg;
67 }
68