]> git.sur5r.net Git - cc65/blob - test/val/compare4.c
goto.c warning fix for implicit truncation
[cc65] / test / val / compare4.c
1 /*
2   !!DESCRIPTION!! regression testing program for comparing signed chars and ints
3   !!ORIGIN!!      SDCC regression tests
4   !!LICENCE!!     GPL, read COPYING.GPL
5 */
6
7 #include <stdio.h>
8 #include <limits.h>
9
10 /*
11  compare4.c
12 */
13
14 /*#define  COMPARE_OUT_OF_RANGE 1*/
15
16 unsigned char success = 0;
17 unsigned char failures = 0;
18 unsigned char dummy = 0;
19
20 #ifdef SUPPORT_BIT_TYPES
21 bit bit0 = 0;
22 #endif
23 #ifdef SIZEOF_INT_16BIT
24 #if defined(__LINUX__) || defined(LINUX)
25 short int0 = 0;
26 short int1 = 0;
27
28 #else
29 int int0 = 0;
30 int int1 = 0;
31
32 #endif
33
34 #else
35 int int0 = 0;
36 int int1 = 0;
37
38 #endif
39
40 signed char char0 = 0;
41 signed char char1 = 0;
42
43 void
44 done ()
45 {
46   dummy++;
47 }
48
49 /* compare to 0
50  assumes
51  char0 == 0
52  char1 != 0
53  int0  == 0
54  int1  != 0
55 */
56 void c_0(void)
57 {
58   if(char0 != 0)
59     failures++;
60
61   if(char0)
62     failures++;
63
64   if(char1 == 0)
65     failures++;
66
67   if(!char1)
68     failures++;
69
70   if(int0 != 0)
71     failures++;
72
73   if(int0)
74     failures++;
75
76   if(int1 == 0)
77     failures++;
78
79   if(!int1)
80     failures++;
81
82   if(char0>0)
83     failures++;
84
85   if(int0>0)
86     failures++;
87
88   if(char0<0)
89     failures++;
90
91   if(int0<0)
92     failures++;
93 }
94
95 /* compare to 1
96  assumes
97  char0 != 1
98  char1 == 1
99  int0  != 1
100  int1  == 1
101 */
102 void c_1(void)
103 {
104   if(char0 == 1)
105     failures++;
106
107   if(char1 != 1)
108     failures++;
109
110   if(int0 == 1)
111     failures++;
112
113   if(int1 != 1)
114     failures++;
115
116   if(char0 < 0)
117     failures++;
118
119   if(int0 < 0)
120     failures++;
121 }
122
123 /* compare to 2
124  assumes
125  achar0 == 2
126  aint0  == 2
127 */
128 void c_2(void)
129 {
130   if(char0 != 2)
131     failures++;
132
133   if(int0 != 2)
134     failures++;
135 }
136
137 /* compare to 0xff
138  assumes
139  achar0 == 0xff
140  aint0  == 0xff
141 */
142 void c_ff(void)
143 {
144   if((unsigned char)char0 != 0xff)
145     failures++;
146
147   if((unsigned short)int0 != 0xff)
148     failures++;
149
150   if((unsigned short)int0 == 0xfe)
151     failures++;
152
153   if((unsigned short)int0 == 0xff00)
154     failures++;
155 }
156
157 /* compare to 0x00a5
158  assumes
159  char0  == 0xa5
160  int0  == 0x00a5
161 */
162 void c_a5(void)
163 {
164   if((unsigned char)char0 != 0xa5)
165     failures++;
166
167   if((unsigned short)int0 != 0xa5)
168     failures++;
169
170   if((unsigned short)int0 == 0xa4)
171     failures++;
172
173   if((unsigned short)int0 == 0xa500)
174     failures++;
175 }
176
177 /* compare to 0xa500
178  assumes
179  char0  == 0xa5
180  int0  == 0xa500
181 */
182 void c_a500(void)
183 {
184 #ifdef COMPARE_OUT_OF_RANGE
185   if(char0 == 0xa500)
186     failures++;
187 #endif
188
189   if((unsigned short)int0 != 0xa500)
190     failures++;
191
192   if(int0 != 0x44)
193     int0 = 0x28;
194
195   if((unsigned short)int0 == 0xa400)
196     failures++;
197
198   if(int0 == 0x00a5)
199     failures++;
200 }
201
202 /* compare to 0xabcd
203  assumes
204  char0  == 0xa5
205  int0  == 0xabcd
206 */
207 void c_abcd(void)
208 {
209 #ifdef COMPARE_OUT_OF_RANGE
210   if(char0 == 0xabcd)
211     failures++;
212 #endif
213 /*
214   if(int0 != 0xabcd)
215     failures++;
216 */
217   if((unsigned short)int0 == 0xab00)
218     failures++;
219
220   if(int0 == 0x00cd)
221     failures++;
222
223   if(int0 == 0x05cd)
224     failures++;
225
226   if((unsigned short)int0 == 0xab05)
227     failures++;
228
229   if((unsigned short)int0 == 0xab01)
230     failures++;
231
232   if(int0 == 0x01cd)
233     failures++;
234
235   if(int0 > 0)
236     failures++;
237
238 #ifdef COMPARE_OUT_OF_RANGE
239   if(int0 == 0x1234abcd)
240     failures++;
241 #endif
242 }
243
244 /* assumes char1 == 0 */
245 void c_ifelse1(void)
246 {
247   if(char0)
248     char0 = char1;
249   else
250     char0 = 0;
251
252   if(char0)
253     failures++;
254 }
255
256 /* assumes char0 = -1
257  assumes int0 = -1
258 */
259 void c_minus1(void)
260 {
261   if(char0 != -1)
262     failures++;
263
264   printf("%d\n",failures);
265
266   if(int0 != -1)
267     failures++;
268
269   printf("%d\n",failures);
270
271   if(char0 != int0)
272     failures++;
273
274   printf("%d\n",failures);
275
276   if(char0>0)
277     failures++;
278
279   printf("%d\n",failures);
280
281   if(int0>0)
282     failures++;
283
284   printf("%d\n",failures);
285 }
286
287 void c_c0gtc1(void)
288 {
289   if(char0 < char1)
290     failures++;
291
292   printf("%d\n",failures);
293 }
294
295 int main(void)
296 {
297   int1 = 1;
298   char1 = 1;
299   c_0();
300   printf("failures: %d\n",failures);
301   c_1();
302   printf("failures: %d\n",failures);
303
304   int0 = 2;
305   char0 = 2;
306   c_2();
307   printf("failures: %d\n",failures);
308
309   int0 = 0xff;
310   char0 = 0xff;
311   c_ff();
312   printf("failures: %d\n",failures);
313
314   int0 = 0xa5;
315   char0 = 0xa5;
316   c_a5();
317   printf("failures: %d\n",failures);
318
319   int0 = 0xabcd;
320   /*c_abcd();*/
321
322   char0 = 0;
323   char1 = 0;
324   c_ifelse1();
325   printf("failures: %d\n",failures);
326
327   char0 = 1;
328   c_ifelse1();
329   printf("failures: %d\n",failures);
330
331   char0 = -1;
332   int0 = -1;
333   c_minus1();
334   printf("failures: %d\n",failures);
335
336   char0 = 5;
337   char1 = 3;
338   c_c0gtc1();
339   printf("failures: %d\n",failures);
340
341   char1 = -3;
342   c_c0gtc1();
343
344   success = failures;
345   done ();
346   printf("failures: %d\n",failures);
347
348   return failures;
349 }