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