]> git.saurik.com Git - apple/libdispatch.git/blob - testing/summarize.c
libdispatch-84.5.3.tar.gz
[apple/libdispatch.git] / testing / summarize.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int
6 has_prefix(const char* str, const char* prefix) {
7 return (strncmp(str, prefix, strlen(prefix)) == 0);
8 }
9
10 int
11 print_summary(FILE* f, long total, long pass, long fail) {
12 fprintf(f, "Total: %ld\n", total);
13 fprintf(f, "Passed: %ld (%0.0lf%%)\n", pass, ((double)pass / (double)total) * (double)100.0);
14 fprintf(f, "Failed: %ld (%0.0lf%%)\n", fail, ((double)fail / (double)total) * (double)100.0);
15 fprintf(f, "\n");
16 return 0;
17 }
18
19 int main(int argc, char* argv[]) {
20 if (argc > 1) {
21 fprintf(stderr, "%s: usage: summarize\n", argv[0]);
22 exit(1);
23 }
24
25 /*
26 FILE* f = fopen(argv[1], "w");
27 if (f == NULL) {
28 perror(argv[1]);
29 exit(1);
30 }
31 */
32 FILE* f = stdout;
33
34 fprintf(f, "\n==================================================\n");
35 fprintf(f, "[SUMMARY] Test Summary\n");
36 fprintf(f, "==================================================\n\n");
37
38 size_t len;
39 char* ln;
40 long total = 0;
41 long pass = 0;
42 long fail = 0;
43 long total_total = 0;
44 long total_pass = 0;
45 long total_fail = 0;
46 for(;;) {
47 ln = fgetln(stdin, &len);
48 //if (ln) fprintf(stdout, "%.*s", (int)len, ln);
49 if (ln == NULL || has_prefix(ln, "[TEST]")) {
50 if (total) {
51 print_summary(f, total, pass, fail);
52 }
53 total_total += total;
54 total_pass += pass;
55 total_fail += fail;
56 total = 0;
57 pass = 0;
58 fail = 0;
59 if (ln) {
60 fprintf(f, "%.*s", (int)len, ln);
61 } else {
62 fprintf(f, "[TOTAL]\n");
63 print_summary(f, total_total, total_pass, total_fail);
64 break;
65 }
66 } else if (has_prefix(ln, "[PASS]")) {
67 ++total;
68 ++pass;
69 } else if (has_prefix(ln, "[FAIL]")) {
70 ++total;
71 ++fail;
72 }
73 }
74
75 return (total_fail ? EXIT_FAILURE : EXIT_SUCCESS);
76 }