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