]> git.sur5r.net Git - cc65/blob - test/val/compare5.c
added tests as prepared by oliver
[cc65] / test / val / compare5.c
1 /*
2   !!DESCRIPTION!! regression testing program for comparing longs
3   !!ORIGIN!!      SDCC regression tests
4   !!LICENCE!!     GPL, read COPYING.GPL
5 */
6
7 #include <stdio.h>
8 #include <limits.h>
9
10 /*
11  compare5.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 int int0 = 0;
24 int int1 = 0;
25 char char0 = 0;
26 char char1 = 0;
27 long long0 = 0;
28 long long1 = 0;
29 unsigned long ulong0 = 0;
30 unsigned long ulong1 = 0;
31
32 void
33 done ()
34 {
35   dummy++;
36 }
37
38 /* compare to 0
39  assumes
40  long0 == 0
41  ulong0 == 0
42 */
43 void c_0(void)
44 {
45   if(long0 != 0)
46     failures++;
47
48   if(long0 > 0)
49     failures++;
50
51   if(ulong0 != 0)
52     failures++;
53
54   if(ulong0 > 0)
55     failures++;
56 }
57
58 /* compare to 1
59  assumes
60  long1 == 1
61  ulong1 == 1
62 */
63 void c_1(void)
64 {
65   if(long0 == 1)
66     failures++;
67
68   if(long1 != 1)
69     failures++;
70
71   if(ulong0 == 1)
72     failures++;
73
74   if(ulong1 != 1)
75     failures++;
76
77   if(long1 < 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   if(long0 != 2)
101     failures++;
102
103   if(ulong0 != 2)
104     failures++;
105
106   if(long1 == 2)
107     failures++;
108
109   if(ulong1 == 2)
110     failures++;
111 }
112
113 /* compare to 0xff
114  assumes
115  achar0 == 0xff
116  aint0  == 0xff
117 */
118 void c_ff(void)
119 {
120   if(long0 != 0xff)
121     failures++;
122
123   if(ulong0 != 0xff)
124     failures++;
125
126   if(long1 == 0xff)
127     failures++;
128
129   if(ulong1 == 0xff)
130     failures++;
131 }
132
133 /* compare to 0x200
134  assumes
135  achar0 == 0x200
136  aint0  == 0x200
137 */
138 void c_200(void)
139 {
140   if(long0 != 0x200)
141     failures++;
142
143   if(ulong0 != 0x200)
144     failures++;
145
146   if(long1 == 0x200)
147     failures++;
148
149   if(ulong1 == 0x200)
150     failures++;
151 }
152
153 /* compare to 0x20000
154  assumes
155  long0  == 0x20000
156  ulong0 == 0x20000
157  long1  != 0x20000
158  ulong1 != 0x20000
159 */
160 void c_20000(void)
161 {
162   if(long0 != 0x20000)
163     failures++;
164
165   if(ulong0 != 0x20000)
166     failures++;
167
168   if(long1 == 0x20000)
169     failures++;
170
171   if(ulong1 == 0x20000)
172     failures++;
173
174   if(long0 <= 0x10000)
175     failures++;
176
177   if(long0 < 0x10000)
178     failures++;
179
180 /*  if(long0 < 0x12345)
181     failures++;
182 */
183   if(long0 == 0)
184     failures++;
185 }
186
187 /* compare to 0x00a5
188  assumes
189  char0  == 0xa5
190  int0  == 0x00a5
191 */
192 void c_a5(void)
193 {
194   if(char0 != 0xa5)
195     failures++;
196
197   if(int0 != 0xa5)
198     failures++;
199
200   if(int0 == 0xa4)
201     failures++;
202
203   if(int0 == 0xa500)
204     failures++;
205 }
206
207 /* compare to 0xa500
208  assumes
209  char0  == 0xa5
210  int0  == 0xa500
211 */
212 void c_a500(void)
213 {
214 #ifdef COMPARE_OUT_OF_RANGE
215   if(char0 == 0xa500)
216     failures++;
217 #endif
218
219   if(int0 != 0xa500)
220     failures++;
221
222   if(int0 == 0xa400)
223     failures++;
224
225   if(int0 == 0x00a5)
226     failures++;
227 }
228
229 /* compare to 0xabcd
230  assumes
231  char0  == 0xa5
232  int0  == 0xabcd
233 */
234 void c_abcd(void)
235 {
236 #ifdef COMPARE_OUT_OF_RANGE
237   if(char0 == 0xabcd)
238     failures++;
239 #endif
240
241   if(int0 != 0xabcd)
242     failures++;
243
244   if(int0 == 0xab00)
245     failures++;
246
247   if(int0 == 0x00cd)
248     failures++;
249
250   if(int0 == 0x05cd)
251     failures++;
252
253   if(int0 == 0xab05)
254     failures++;
255
256   if(int0 == 0xab01)
257     failures++;
258
259   if(int0 == 0x01cd)
260     failures++;
261
262   if(int0 > 0)
263     failures++;
264
265 #ifdef COMPARE_OUT_OF_RANGE
266   if(int0 == 0x1234abcd)
267     failures++;
268 #endif
269 }
270
271 /* assumes char1 == 0 */
272 void c_ifelse1(void)
273 {
274   if(char0)
275     char0 = char1;
276   else
277     char0 = 0;
278
279   if(char0)
280     failures++;
281 }
282
283 /*
284    assumes long0 = -1
285    assumes long1 = 1
286 */
287 void c_minus1(void)
288 {
289   printf("long0:%ld long1:%ld\n",long0,long1);
290   
291   printf("(long0 != -1)\n");
292   if(long0 != -1)
293   {
294         LOG_ERROR(1);
295         failures++;
296   }
297   printf("(long0 > 0)\n");
298   if(long0 > 0)
299   {
300         LOG_ERROR(1);
301         failures++;
302   }
303   printf("(long1 < 0)\n");
304   if(long1 < 0)
305   {
306         LOG_ERROR(1);
307         failures++;
308   }
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   if(long0 != long1)
321     failures++;
322
323   if(ulong0 != ulong1)
324     failures++;
325
326   if(long0 != ulong1)
327     failures++;
328
329   if(long0 > long1)
330     failures++;
331
332   if(long0 < long1)
333     failures++;
334
335   if(long0 > ulong0)
336     failures++;
337
338   if(long0 < ulong0)
339     failures++;
340 }
341
342 /* assumes
343  long0 = ulong0 == 0
344  long1 = ulong1 == 1
345 */
346 void c_long2long_neq(void)
347 {
348   if(long0 == long1)
349     failures++;
350
351   if(ulong0 == ulong1)
352     failures++;
353
354   if(long1 != ulong1)
355     failures++;
356
357   if(long1 < long0)
358     failures++;
359
360   if(long1 <= long0)
361     failures++;
362
363   if(ulong1 < ulong0)
364     failures++;
365
366   if(ulong1 <= ulong0)
367     failures++;
368 }
369
370 /*  long0=-100;
371   long1=-1000;
372 */
373 void
374 c_long2neglit(void)
375 {
376   if(long0>0)
377     failures++;
378   if(long1>0)
379     failures++;
380
381   if(long1 > long0)
382     failures++;
383
384   if(long1 > 100)
385     failures++;
386
387   if(long0 > -50)
388     failures++;
389
390   if(long1 < -5000)
391     failures++;
392 }
393
394 int
395 main (void)
396 {
397   c_0();
398   printf("c_0: %d\n",failures);
399
400   c_long2long_eq();
401   printf("c_long2long_eq: %d\n",failures);
402
403   long1 = 1;
404   ulong1 = 1;
405   c_1();
406   printf("c_1: %d\n",failures);
407   c_long2long_neq();
408   printf("c_long2long_neq: %d\n",failures);
409
410   long0 = 2;
411   ulong0 = 2;
412   c_2();
413   printf("c_2: %d\n",failures);
414
415   long0 = 0xff;
416   ulong0 = 0xff;
417   c_ff();
418   printf("c_ff: %d\n",failures);
419
420   long0 = 0x200;
421   ulong0 = 0x200;
422   c_200();
423   printf("c_200: %d\n",failures);
424
425   long0 = 0x20000;
426   ulong0 = 0x20000;
427   c_20000();
428   printf("c_20000: %d\n",failures);
429
430   long0 = -1;
431   c_minus1();
432   printf("c_minus1: %d\n",failures);
433
434   long0=-100;
435   long1=-1000;
436   c_long2neglit();
437   printf("c_long2neglit: %d\n",failures);
438
439   success = failures;
440   done ();
441   
442   printf("failures: %d\n",failures);
443
444   return failures;
445 }