Imported Upstream version 2.9.0
[debian/cc1111] / src / regression / sub.c
1 #include "gpsim_assert.h"
2 // Addition tests
3
4 /* bit types are not ANSI - so provide a way of disabling bit types
5  * if this file is used to test other compilers besides SDCC */
6 #define SUPPORT_BIT_TYPES 0
7
8 /* Some compilers that support bit types do not support bit arithmetic 
9  * (like bitx = bity + bitz;) */
10 #define SUPPORT_BIT_ARITHMETIC 1
11
12 unsigned char failures=0;
13
14 #if SUPPORT_BIT_TYPES
15
16 bit bit0 = 0;
17 bit bit1 = 0;
18 bit bit2 = 0;
19 bit bit3 = 0;
20 bit bit4 = 0;
21 bit bit5 = 0;
22 bit bit6 = 0;
23 bit bit7 = 0;
24 bit bit8 = 0;
25 bit bit9 = 0;
26 bit bit10 = 0;
27 bit bit11 = 0;
28
29 #endif
30
31 unsigned int aint0 = 0;
32 unsigned int aint1 = 0;
33 unsigned char achar0 = 0;
34 unsigned char achar1 = 0;
35 unsigned char achar2 = 0;
36 unsigned char achar3 = 0;
37 unsigned char *acharP = 0;
38
39 void
40 done()
41 {
42   ASSERT(MANGLE(failures) == 0);
43   PASSED();
44 }
45
46 void sub_lit_from_uchar(void)
47 {
48
49   achar0 = achar0 - 5;
50
51   if(achar0 != 0xfb)
52     failures++;
53
54   achar0 -= 10;
55
56   if(achar0 != 0xf1)
57     failures++;
58
59   achar0 = achar0 -1;  // Should be a decrement
60   if(achar0 != 0xf0)
61     failures++;
62
63   for(achar1 = 0; achar1 < 100; achar1++)
64     achar0 -= 2;
65
66   if(achar0 != 40)
67     failures++;
68
69 }
70
71 // achar0 = 1
72 // achar1 = 100
73
74 void sub_uchar2uchar(void)
75 {
76
77   achar1 = achar1 - achar0;
78
79   if(achar1 != 99)
80     failures++;
81
82   for(achar2 = 0; achar2<7; achar2++)
83     achar1 -= achar0;
84
85   if(achar1 != 92)
86     failures++;
87
88 }
89
90 // assumes
91 //  achar0 = 10
92 //  achar1 = 32
93 //  achar2, achar3 can be anything.
94
95 void sub_uchar2uchar2(void)
96 {
97
98
99   achar0--;
100   achar0 = achar0 - 1;
101   achar0 = achar0 - 2;
102   achar0 = achar0 - 3;
103   if(achar0 != 3)
104     failures++;
105
106
107   achar1 -= achar0;
108   if(achar1 != 29)
109     failures++;
110
111   achar2 = achar1 - achar0;
112   if(achar2 != 26)
113     failures++;
114
115
116   achar3 = achar2 - achar1 - achar0;
117   if(achar3 != 0xfa)
118     failures++;
119
120 }
121
122 // sub_bits
123 // all bit variables are 0 upon entry.
124
125 #if SUPPORT_BIT_TYPES
126 void sub_bits(void)
127 {
128
129   bit1 = bit0;
130
131   bit0 = 1;
132
133   if(bit1 != 0)
134     failures++;
135
136   bit1 = bit0-bit1;   // 1 - 0 => 1
137   if(bit1 != 1)
138     failures++;
139
140 #if SUPPORT_BIT_ARITHMETIC
141   bit2 = bit1-bit0;   // 1 - 1 => 0
142   if(bit2)
143     failures++;
144
145   bit7 = bit4-bit5;
146   bit6 = bit4+bit5;
147   bit3 = bit4-bit5-bit6-bit7-bit0; // 0-0-0-0-1 => 1
148   if(!bit3)
149     failures++;
150 #endif
151 }
152
153 /* sub_bit2uchar(void) - assumes bit0 = 1, achar0 = 7  */
154
155 void sub_bit2uchar(void)
156 {
157
158   achar0 -= bit0;
159
160   if(achar0 != 6)
161     failures++;
162
163   if(achar0 == bit0)
164     failures++;
165
166 }
167
168 void sub_bit2uint(void)
169 {
170
171   if(aint0 != bit11)
172     failures++;
173
174   aint0 -= bit0;
175   if(aint0!=0xffff)
176     failures++;
177
178 }
179 #endif
180
181 void sub_ucharFromLit(void)
182 {
183
184   achar0 = 2 - achar0;
185
186   if(achar0 != 2)
187     failures++;
188
189
190   aint0 = 2 - aint0;
191
192   if(aint0 != 2)
193     failures++;
194
195   aint0--;
196
197   if(aint0 != 1)
198     failures++;
199
200   aint0 = 0x100 - aint0;
201
202   if(aint0 != 0xff)
203     failures++;
204
205   aint0 = 0xff00 - aint0;
206
207   if(aint0 != 0xfe01)
208     failures++;
209
210   aint0 = 0x0e01 - aint0;
211
212   if(aint0 != 0x1000)
213     failures++;
214
215   aint0 = 0x10ff - aint0;
216
217   if(aint0 != 0xff)
218     failures++;
219
220
221
222 }
223
224 void main(void)
225 {
226
227   sub_lit_from_uchar();
228
229   achar0=1;
230   achar1=100;
231   sub_uchar2uchar();
232
233
234   achar0 = 10;
235   achar1 = 32;
236   sub_uchar2uchar2();
237
238 #if SUPPORT_BIT_TYPES
239   sub_bits();
240
241   achar0 = 7;
242   bit0 = 1;
243   sub_bit2uchar();
244   sub_bit2uint();
245 #endif
246
247   aint0 = 0;
248   achar0 = 0;
249   sub_ucharFromLit();
250
251   done();
252 }