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