Added more regression test to the pic port. Added support for <<, >>, ^
[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 void main(void)
183 {
184
185   sub_lit_from_uchar();
186
187   achar0=1;
188   achar1=100;
189   sub_uchar2uchar();
190
191
192   achar0 = 10;
193   achar1 = 32;
194   sub_uchar2uchar2();
195
196 #if SUPPORT_BIT_TYPES
197   sub_bits();
198
199   achar0 = 7;
200   bit0 = 1;
201   sub_bit2uchar();
202   sub_bit2uint();
203 #endif
204
205
206   success = failures;
207   done();
208 }