1
2
3
4
5
6
7
8
9
10
11 :(before "End Types")
12 typedef void (*test_fn)(void);
13 :(before "Globals")
14
15 const test_fn Tests[] = {
16 #include "test_list"
17 };
18
19 :(before "End Globals")
20 bool Run_tests = false;
21 bool Passed = true;
22
23 :(before "End Includes")
24 #define CHECK(X) \
25 if (Passed && !(X)) { \
26 ¦ cerr << "\nF - " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ << "): " << #X << '\n'; \
27 ¦ Passed = false; \
28 ¦ return; \
29 }
30
31 #define CHECK_EQ(X, Y) \
32 if (Passed && (X) != (Y)) { \
33 ¦ cerr << "\nF - " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ << "): " << #X << " == " << #Y << '\n'; \
34 ¦ cerr << " got " << (X) << '\n'; \
35 ¦ Passed = false; \
36 ¦ return; \
37 }
38
39 :(before "End Reset")
40 Passed = true;
41
42 :(before "End Commandline Parsing")
43 if (argc > 1 && is_equal(argv[1], "test")) {
44 Run_tests = true; --argc; ++argv;
45 }
46
47 :(before "End Main")
48 if (Run_tests) {
49
50
51
52 long num_failures = 0;
53
54 time_t t; time(&t);
55 cerr << "C tests: " << ctime(&t);
56 for (size_t i=0; i < sizeof(Tests)/sizeof(Tests[0]); ++i) {
57
58 ¦ run_test(i);
59 ¦ if (Passed) cerr << '.';
60 ¦ else ++num_failures;
61 }
62 cerr << '\n';
63
64 if (num_failures > 0) {
65 ¦ cerr << num_failures << " failure"
66 ¦ ¦ ¦ ¦<< (num_failures > 1 ? "s" : "")
67 ¦ ¦ ¦ ¦<< '\n';
68 ¦ return 1;
69 }
70 return 0;
71 }
72
73 :(code)
74 void run_test(size_t i) {
75 if (i >= sizeof(Tests)/sizeof(Tests[0])) {
76 ¦ cerr << "no test " << i << '\n';
77 ¦ return;
78 }
79 reset();
80
81 (*Tests[i])();
82
83 }
84
85 bool is_integer(const string& s) {
86 return s.find_first_not_of("0123456789-") == string::npos
87 ¦ ¦ && s.find_first_of("0123456789") != string::npos
88 ¦ ¦ && s.find('-', 1) == string::npos;
89 }
90
91 int to_integer(string n) {
92 char* end = NULL;
93
94 int result = strtoll(n.c_str(), &end, 0);
95 if (*end != '\0') cerr << "tried to convert " << n << " to number\n";
96 assert(*end == '\0');
97 return result;
98 }
99
100 void test_is_integer() {
101 CHECK(is_integer("1234"));
102 CHECK(is_integer("-1"));
103 CHECK(!is_integer("234.0"));
104 CHECK(is_integer("-567"));
105 CHECK(!is_integer("89-0"));
106 CHECK(!is_integer("-"));
107 CHECK(!is_integer("1e3"));
108 }
109
110 :(before "End Includes")
111 #include <stdlib.h>