Signed comparisons are now working (except for signed longs)
[fw/sdcc] / src / regression / compare5.c
1 //
2 // compare5.c
3 // regression testing program for comparing longs
4 //
5
6 #define  COMPARE_OUT_OF_RANGE 1
7
8 unsigned char success = 0;
9 unsigned char failures = 0;
10 unsigned char dummy = 0;
11
12 bit bit0 = 0;
13 int int0 = 0;
14 int int1 = 0;
15 char char0 = 0;
16 char char1 = 0;
17 long long0 = 0;
18 long long1 = 0;
19 unsigned long ulong0 = 0;
20 unsigned long ulong1 = 0;
21
22 void
23 done ()
24 {
25
26   dummy++;
27
28 }
29
30 // compare to 0
31 // assumes
32 // long0 == 0
33 // ulong0 == 0
34
35 void c_0(void)
36 {
37
38   if(long0 != 0)
39     failures++;
40
41   if(long0 > 0)
42     failures++;
43
44   if(ulong0 != 0)
45     failures++;
46
47   if(ulong0 > 0)
48     failures++;
49
50   if(ulong0 < 0)
51     failures++;
52 }
53
54 // compare to 1
55 // assumes
56 // long1 == 1
57 // ulong1 == 1
58
59 void c_1(void)
60 {
61
62   if(long0 == 1)
63     failures++;
64
65   if(long1 != 1)
66     failures++;
67
68   if(ulong0 == 1)
69     failures++;
70
71   if(ulong1 != 1)
72     failures++;
73
74   if(long1 < 0)
75     failures++;
76
77   if(ulong1 < 0)
78     failures++;
79
80   if(long1 < 1)
81     failures++;
82
83   if(ulong1 < 1)
84     failures++;
85
86   if(long1 > 1)
87     failures++;
88
89   if(ulong1 > 1)
90     failures++;
91 }
92
93 // compare to 2
94 // assumes
95 // long0 == 2
96 // ulong0  == 2
97
98 void c_2(void)
99 {
100
101   if(long0 != 2)
102     failures++;
103
104   if(ulong0 != 2)
105     failures++;
106
107   if(long1 == 2)
108     failures++;
109
110   if(ulong1 == 2)
111     failures++;
112
113 }
114
115 // compare to 0xff
116 // assumes
117 // achar0 == 0xff
118 // aint0  == 0xff
119
120 void c_ff(void)
121 {
122
123   if(long0 != 0xff)
124     failures++;
125
126   if(ulong0 != 0xff)
127     failures++;
128
129   if(long1 == 0xff)
130     failures++;
131
132   if(ulong1 == 0xff)
133     failures++;
134
135
136 }
137
138 // compare to 0x200
139 // assumes
140 // achar0 == 0x200
141 // aint0  == 0x200
142
143 void c_200(void)
144 {
145
146   if(long0 != 0x200)
147     failures++;
148
149   if(ulong0 != 0x200)
150     failures++;
151
152   if(long1 == 0x200)
153     failures++;
154
155   if(ulong1 == 0x200)
156     failures++;
157
158
159 }
160
161 // compare to 0x20000
162 // assumes
163 // achar0 == 0x20000
164 // aint0  == 0x20000
165
166 void c_20000(void)
167 {
168
169   if(long0 != 0x20000)
170     failures++;
171
172   if(ulong0 != 0x20000)
173     failures++;
174
175   if(long1 == 0x20000)
176     failures++;
177
178   if(ulong1 == 0x20000)
179     failures++;
180
181   if(long0 <= 0x10000)
182     failures++;
183
184   if(long0 < 0x10000)
185     failures++;
186
187 /*  if(long0 < 0x12345)
188     failures++;
189 */
190   if(long0 == 0)
191     failures++;
192 }
193
194 // compare to 0x00a5
195 // assumes
196 // char0  == 0xa5
197 // int0  == 0x00a5
198
199 void c_a5(void)
200 {
201
202   if(char0 != 0xa5)
203     failures++;
204
205   if(int0 != 0xa5)
206     failures++;
207
208   if(int0 == 0xa4)
209     failures++;
210
211   if(int0 == 0xa500)
212     failures++;
213
214 }
215
216 // compare to 0xa500
217 // assumes
218 // char0  == 0xa5
219 // int0  == 0xa500
220
221 void c_a500(void)
222 {
223
224 #ifdef COMPARE_OUT_OF_RANGE
225   if(char0 == 0xa500)
226     failures++;
227 #endif
228
229   if(int0 != 0xa500)
230     failures++;
231
232   if(int0 == 0xa400)
233     failures++;
234
235   if(int0 == 0x00a5)
236     failures++;
237
238 }
239
240 // compare to 0xabcd
241 // assumes
242 // char0  == 0xa5
243 // int0  == 0xabcd
244
245 void c_abcd(void)
246 {
247 #ifdef COMPARE_OUT_OF_RANGE
248   if(char0 == 0xabcd)
249     failures++;
250 #endif
251
252   if(int0 != 0xabcd)
253     failures++;
254
255   if(int0 == 0xab00)
256     failures++;
257
258   if(int0 == 0x00cd)
259     failures++;
260
261   if(int0 == 0x05cd)
262     failures++;
263
264   if(int0 == 0xab05)
265     failures++;
266
267   if(int0 == 0xab01)
268     failures++;
269
270   if(int0 == 0x01cd)
271     failures++;
272
273   if(int0 > 0)
274     failures++;
275
276 #ifdef COMPARE_OUT_OF_RANGE
277   if(int0 == 0x1234abcd)
278     failures++;
279 #endif
280
281 }
282
283 // assumes char1 == 0
284 void c_ifelse1(void)
285 {
286
287   if(char0)
288     char0 = char1;
289   else
290     char0 = 0;
291
292   if(char0)
293     failures++;
294 }
295
296 // assumes char0 = -1
297 // assumes int0 = -1
298
299 void c_minus1(void)
300 {
301   if(long0 != -1)
302     failures++;
303
304   if(long0 > 0)
305     failures++;
306
307   if(long1 < 0)
308     failures++;
309 /*
310   if(long1 < 2)
311     failures++;
312 */
313 }
314
315 // assumes
316 // long0 = long1 = ulong0 = ulong1 == 0
317
318 void c_long2long_eq(void)
319 {
320
321   if(long0 != long1)
322     failures++;
323
324   if(ulong0 != ulong1)
325     failures++;
326
327   if(long0 != ulong1)
328     failures++;
329
330   if(long0 > long1)
331     failures++;
332
333   if(long0 < long1)
334     failures++;
335
336   if(long0 > ulong0)
337     failures++;
338
339   if(long0 < ulong0)
340     failures++;
341 }
342
343 // assumes
344 // long0 = ulong0 == 0
345 // long1 = ulong1 == 1
346
347 void c_long2long_neq(void)
348 {
349
350   if(long0 == long1)
351     failures++;
352
353   if(ulong0 == ulong1)
354     failures++;
355
356   if(long1 != ulong1)
357     failures++;
358
359   if(long1 < long0)
360     failures++;
361
362   if(long1 <= long0)
363     failures++;
364
365   if(ulong1 < ulong0)
366     failures++;
367
368   if(ulong1 <= ulong0)
369     failures++;
370
371 }
372 void
373 main (void)
374 {
375
376   c_0();
377
378   c_long2long_eq();
379
380   long1 = 1;
381   ulong1 = 1;
382   c_1();
383   c_long2long_neq();
384
385   long0 = 2;
386   ulong0 = 2;
387   c_2();
388
389   long0 = 0xff;
390   ulong0 = 0xff;
391   c_ff();
392
393   long0 = 0x200;
394   ulong0 = 0x200;
395   c_200();
396
397   long0 = 0x20000;
398   ulong0 = 0x20000;
399   c_20000();
400
401   long0 = -1;
402   c_minus1();
403
404   success = failures;
405   done ();
406 }