Added more regression test to the pic port. Added support for <<, >>, ^
[fw/sdcc] / src / regression / add.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 add_lit2uchar(void)
49 {
50
51   achar0 = achar0 + 5;
52
53   if(achar0 != 5)
54     failures++;
55
56   achar0 += 10;
57
58   if(achar0 != 15)
59     failures++;
60
61   achar0 = achar0 +1;  // Should be an increment
62   if(achar0 != 16)
63     failures++;
64
65   for(achar1 = 0; achar1 < 100; achar1++)
66     achar0 += 2;
67
68   if(achar0 != 216)
69     failures++;
70
71 }
72
73 void add_uchar2uchar(void)
74 {
75
76   achar1 = achar1 + achar0;
77
78   if(achar1 != 16)
79     failures++;
80
81   for(achar2 = 0; achar2<7; achar2++)
82     achar1 += achar0;
83
84   if(achar1 != 128)
85     failures++;
86
87 }
88
89 // assumes
90 //  achar0 = 0
91 //  achar1 = 32
92 //  achar2, achar3 can be anything.
93
94 void add_uchar2uchar2(void)
95 {
96
97
98   achar0++;
99   achar0 = achar0 + 1;
100   achar0 = achar0 + 2;
101   achar0 = achar0 + 3;
102   if(achar0 != 7)
103     failures++;
104
105   achar1 += achar0;
106   if(achar1 != 39)
107     failures++;
108
109   achar2 = achar1 + achar0;
110   if(achar2 != 46)
111     failures++;
112
113   achar3 = achar2 + achar1 + achar0;
114   if(achar3 != 92)
115     failures++;
116
117 }
118
119 #if SUPPORT_BIT_TYPES
120 void add_bits(void)
121 {
122
123   bit1 = bit0;
124
125   bit0 = 1;
126
127   if(bit1 != 0)
128     failures++;
129
130   bit1 = bit1+bit0;
131   if(bit1 != 1)
132     failures++;
133
134 #if SUPPORT_BIT_ARITHMETIC
135   bit2 = bit1+bit3;
136   if(!bit2)
137     failures++;
138
139   bit3 = bit4+bit5+bit6+bit7+bit0;
140   if(!bit3)
141     failures++;
142 #endif
143 }
144 #endif
145
146 /* add_bit2uchar(void) - assumes bit0 = 1, achar0 = 7  */
147
148 void add_bit2uchar(void)
149 {
150
151   achar0 += bit0;
152
153   if(achar0 != 8)
154     failures++;
155
156   if(achar0 == bit0)
157     failures++;
158
159 }
160
161 void add_bit2uint(void)
162 {
163
164   if(aint0 != bit11)
165     failures++;
166
167   aint0 += bit0;
168   if(aint0!=1)
169     failures++;
170
171 }
172 void main(void)
173 {
174
175   add_lit2uchar();
176
177   achar0=16;
178   achar1=0;
179   add_uchar2uchar();
180
181
182   achar0 = 0;
183   achar1 = 32;
184   add_uchar2uchar2();
185
186 #if SUPPORT_BIT_TYPES
187   add_bits();
188
189   add_bit2uchar();
190   add_bit2uint();
191 #endif
192
193
194   success = failures;
195   done();
196 }