Imported the regression suite
[fw/sdcc] / support / regression / fwk / lib / testfwk.c
1 /** Test framework support functions.
2  */
3 #include <testfwk.h>
4 #include <stdarg.h>
5
6 //#include <stdio.h>
7
8 void _putchar(char c);
9
10 static void _printn(int n) {
11     // PENDING
12     _putchar('0' + n);
13 }
14
15 static void _printf(const char *szFormat, ...)
16 {
17     va_list ap;
18     va_start(ap, szFormat);
19
20     while (*szFormat) {
21         if (*szFormat == '%') {
22             switch (*++szFormat) {
23             case 's': {
24                 const char *sz = va_arg(ap, const char *);
25                 while (*sz) {
26                     _putchar(*sz++);
27                 }
28                 break;
29             }
30             case 'u': {
31                 int i = va_arg(ap, int);
32                 _printn(i);
33                 break;
34             }
35             default:
36                 break;
37             }
38         }
39         else {
40             _putchar(*szFormat);
41         }
42         szFormat++;
43     }
44     va_end(ap);
45 }
46
47 int __numTests;
48 int __numFailures;
49
50 void 
51 __fail(const char *szMsg, const char *szCond, const char *szFile, int line)
52 {
53     _printf("--- FAIL: \"%s\" on %s at %s:%u\n", szMsg, szCond, szFile, line);
54     __numFailures++;
55 }
56
57 int 
58 main(void)
59 {
60     TESTFUN **cases;
61     int numCases = 0;
62
63     _printf("--- Running: %s\n", getSuiteName());
64
65     cases = (TESTFUN **)suite();
66
67     while (*cases) {
68         _printf("Running %u\n", numCases);
69         (*cases)();
70         cases++;
71         numCases++;
72     }
73     
74     _printf("--- Summary: %u/%u/%u: %u failed of %u tests in %u cases.\n", 
75            __numFailures, __numTests, numCases,
76            __numFailures, __numTests, numCases
77            );
78
79     return __numFailures;
80 }