cbase coverage


File: src/assert/private/a_base.c
Date: 2024-07-26 20:57:32
Lines:
66/66
100.0%
Functions:
0/0
-%
Branches:
24/24
100.0%

Line Branch Exec Source
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <limits.h>
4 #include <errno.h>
5
6 #include "assert.h"
7 #include "a_internal.h"
8
9 #define RED "\x1B[31m"
10 #define GRN "\x1B[32m"
11 #define YEL "\x1B[33m"
12 #define BLU "\x1B[34m"
13 #define MAG "\x1B[35m"
14 #define CYN "\x1B[36m"
15 #define WHT "\x1B[37m"
16 #define RST "\x1B[0m"
17
18 314 uint8_t __assert_true(
19 FILE* f,
20 assert_level_t l,
21 bool v,
22 const char* message,
23 const char* file,
24 const char* funcname,
25 size_t row,
26 size_t col
27 ) {
28
2/2
✓ Branch 0 taken 311 times.
✓ Branch 1 taken 3 times.
314 if (v == true)
29 311 return EXIT_SUCCESS;
30 3 char s[] = "Expected " GRN "true" RST ", but found " RED "false" RST ". ";
31 3 char* full_message = (char*)malloc(
32 sizeof(*full_message) * (
33 3 sizeof(s) / sizeof(*s) + strlen(message) + 5
34 )
35 );
36 3 strcpy(full_message, s);
37 3 strcpy(full_message + sizeof(s) / sizeof(*s) - 1, message);
38 3 __assert_out(f, l, full_message, file, funcname, row, col);
39 3 free(full_message);
40 3 return l == ERROR;
41 }
42
43 1006 uint8_t __assert_false(
44 FILE* f,
45 assert_level_t l,
46 bool v,
47 const char* message,
48 const char* file,
49 const char* funcname,
50 size_t row,
51 size_t col
52 ) {
53
2/2
✓ Branch 0 taken 1003 times.
✓ Branch 1 taken 3 times.
1006 if (v == false)
54 1003 return EXIT_SUCCESS;
55 3 char s[] = "Expected " GRN "false" RST ", but found " RED "true" RST ". ";
56 3 char* full_message = (char*)malloc(
57 sizeof(*full_message) * (
58 3 sizeof(s) / sizeof(*s) + strlen(message) + 5
59 )
60 );
61 3 strcpy(full_message, s);
62 3 strcpy(full_message + sizeof(s) / sizeof(*s) - 1, message);
63 3 __assert_out(f, l, full_message, file, funcname, row, col);
64 3 free(full_message);
65 3 return l == ERROR;
66 }
67
68 5 uint8_t __assert_fail(
69 FILE* f,
70 assert_level_t l,
71 const char* message,
72 const char* file,
73 const char* funcname,
74 size_t row,
75 size_t col
76 ) {
77 5 __assert_out(f, l, message, file, funcname, row, col);
78 5 return l == ERROR;
79 }
80
81 12 void __assert_excerpt(FILE* f, const char* file, size_t row) {
82 12 FILE *fp = fopen(file,"r");
83
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 times.
12 if (fp == NULL)
84 10 return;
85
86 char linestr[21];
87 2 sprintf(linestr, "%5zu", row);
88 2 fprintf(f, "%s | ", linestr);
89
90 2 int c = 0;
91 2 size_t n = 1;
92
2/2
✓ Branch 1 taken 22281 times.
✓ Branch 2 taken 1 times.
22282 while ((c = fgetc(fp)) != EOF) {
93
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 22261 times.
22281 if (n == row)
94 20 fprintf(f, "%c", c);
95
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 22280 times.
22281 if (n > row)
96 1 break;
97
2/2
✓ Branch 0 taken 1089 times.
✓ Branch 1 taken 21191 times.
22280 if (c == '\n')
98 1089 n++;
99 }
100 2 fclose(fp);
101
102
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if (c != EOF) {
103 1 int len = strlen(linestr);
104
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 1 times.
6 for (int i = 0; i < len; i++)
105 5 fprintf(f, " ");
106 1 fprintf(f, " | \n");
107 }
108 }
109
110 11 void __assert_out(
111 FILE* f,
112 assert_level_t l,
113 const char* message,
114 const char* file,
115 const char* funcname,
116 size_t row,
117 size_t col
118 ) {
119 char status[10];
120 char color[10];
121
4/4
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 1 times.
11 switch (l) {
122 4 case ERROR:
123 4 strcpy(status, "error");
124 4 strcpy(color, RED);
125 4 break;
126 3 case WARNING:
127 3 strcpy(status, "warning");
128 3 strcpy(color, YEL);
129 3 break;
130 3 case NOTE:
131 3 strcpy(status, "note");
132 3 strcpy(color, BLU);
133 3 break;
134 1 default:
135 1 return;
136 }
137
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 1 times.
10 if (funcname)
138 9 fprintf(
139 f,
140 "%s:%zu:%zu %s%s: " RST "in " CYN "%s()" RST ". %s\n",
141 file,
142 row,
143 col,
144 color,
145 status,
146 funcname,
147 message
148 );
149 else
150 1 fprintf(
151 f,
152 "%s:%zu:%zu %s%s: " RST "%s\n",
153 file,
154 row,
155 col,
156 color,
157 status,
158 message
159 );
160 10 __assert_excerpt(f, file, row);
161 }
162