bounding tests
[tinycc.git] / boundtest.c
blob2266ab71d90aa9d01ed125bb59da6e7c6aa69c3a
1 #include <stdlib.h>
2 #include <stdio.h>
4 #define NB_ITS 1000000
5 //#define NB_ITS 1
6 #define TAB_SIZE 100
8 int tab[TAB_SIZE];
9 int ret_sum;
10 char tab3[256];
12 int test1(void)
14 int i, sum = 0;
15 for(i=0;i<TAB_SIZE;i++) {
16 sum += tab[i];
18 return sum;
21 /* error */
22 int test2(void)
24 int i, sum = 0;
25 for(i=0;i<TAB_SIZE + 1;i++) {
26 sum += tab[i];
28 return sum;
31 int test3(void)
33 int sum;
34 int i, it;
36 sum = 0;
37 for(it=0;it<NB_ITS;it++) {
38 for(i=0;i<TAB_SIZE;i++) {
39 sum += tab[i];
42 return sum;
45 /* ok */
46 int test4(void)
48 int i, sum = 0;
49 int *tab4;
51 tab4 = malloc(20 * sizeof(int));
52 for(i=0;i<20;i++) {
53 sum += tab4[i];
55 free(tab4);
57 return sum;
60 /* error */
61 int test5(void)
63 int i, sum = 0;
64 int *tab4;
66 tab4 = malloc(20 * sizeof(int));
67 for(i=0;i<21;i++) {
68 sum += tab4[i];
70 free(tab4);
72 return sum;
75 /* error */
76 int test6(void)
78 int i, sum = 0;
79 int *tab4;
81 tab4 = malloc(20 * sizeof(int));
82 free(tab4);
83 for(i=0;i<21;i++) {
84 sum += tab4[i];
87 return sum;
90 /* error */
91 int test7(void)
93 int i, sum = 0;
94 int *p;
96 for(i=0;i<TAB_SIZE + 1;i++) {
97 p = &tab[i];
98 if (i == TAB_SIZE)
99 printf("i=%d %x\n", i, p);
100 sum += *p;
102 return sum;
105 /* ok */
106 int test8(void)
108 int i, sum = 0;
109 int tab[10];
111 for(i=0;i<10;i++) {
112 sum += tab[i];
114 return sum;
117 /* error */
118 int test9(void)
120 int i, sum = 0;
121 char tab[10];
123 for(i=0;i<11;i++) {
124 sum += tab[i];
126 return sum;
129 /* ok */
130 int test10(void)
132 char tab[10];
133 char tab1[10];
135 memset(tab, 0, 10);
136 memcpy(tab, tab1, 10);
137 memmove(tab, tab1, 10);
138 return 0;
141 /* error */
142 int test11(void)
144 char tab[10];
146 memset(tab, 0, 11);
147 return 0;
150 /* error */
151 int test12(void)
153 void *ptr;
154 ptr = malloc(10);
155 free(ptr);
156 free(ptr);
157 return 0;
160 int (*table_test[])(void) = {
161 test1,
162 test1,
163 test2,
164 test3,
165 test4,
166 test5,
167 test6,
168 test7,
169 test8,
170 test9,
171 test10,
172 test11,
173 test12,
176 int main(int argc, char **argv)
178 int index;
179 int (*ftest)(void);
181 if (argc < 2) {
182 printf("usage: boundtest n\n"
183 "test TCC bound checking system\n"
185 exit(1);
188 index = 0;
189 if (argc >= 2)
190 index = atoi(argv[1]);
191 /* well, we also use bounds on this ! */
192 ftest = table_test[index];
193 ftest();
195 return 0;
199 * without bound 0.77 s
200 * with bounds 4.73