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