Imported Upstream version 2.9.0
[debian/cc1111] / src / regression / add.c
1 #include "gpsim_assert.h"
2
3 // Addition tests
4
5 /* bit types are not ANSI - so provide a way of disabling bit types
6  * if this file is used to test other compilers besides SDCC */
7 #define SUPPORT_BIT_TYPES 0
8
9 /* Some compilers that support bit types do not support bit arithmetic 
10  * (like bitx = bity + bitz;) */
11 #define SUPPORT_BIT_ARITHMETIC 1
12
13 unsigned char failures=0;
14
15 #if SUPPORT_BIT_TYPES
16
17 bit bit0 = 0;
18 bit bit1 = 0;
19 bit bit2 = 0;
20 bit bit3 = 0;
21 bit bit4 = 0;
22 bit bit5 = 0;
23 bit bit6 = 0;
24 bit bit7 = 0;
25 bit bit8 = 0;
26 bit bit9 = 0;
27 bit bit10 = 0;
28 bit bit11 = 0;
29
30 #endif
31
32 unsigned int aint0 = 0;
33 unsigned int aint1 = 0;
34 unsigned char achar0 = 0;
35 unsigned char achar1 = 0;
36 unsigned char achar2 = 0;
37 unsigned char achar3 = 0;
38 unsigned char *acharP = 0;
39
40 void
41 done()
42 {
43   ASSERT(MANGLE(failures) == 0);
44   PASSED();
45 }
46
47 void add_lit2uchar(void)
48 {
49
50   achar0 = achar0 + 5;
51
52   if(achar0 != 5)
53     failures++;
54
55   achar0 += 10;
56
57   if(achar0 != 15)
58     failures++;
59
60   achar0 = achar0 +1;  // Should be an increment
61   if(achar0 != 16)
62     failures++;
63
64   for(achar1 = 0; achar1 < 100; achar1++)
65     achar0 += 2;
66
67   if(achar0 != 216)
68     failures++;
69
70 }
71
72 void add_uchar2uchar(void)
73 {
74
75   achar1 = achar1 + achar0;
76
77   if(achar1 != 16)
78     failures++;
79
80   for(achar2 = 0; achar2<7; achar2++)
81     achar1 += achar0;
82
83   if(achar1 != 128)
84     failures++;
85
86 }
87
88 // assumes
89 //  achar0 = 0
90 //  achar1 = 32
91 //  achar2, achar3 can be anything.
92
93 void add_uchar2uchar2(void)
94 {
95   achar0++;
96   achar0 = achar0 + 1;
97   achar0 = achar0 + 2;
98   achar0 = achar0 + 3;
99   if(achar0 != 7)
100     failures++;
101
102   achar1 += achar0;
103   if(achar1 != 39)
104     failures++;
105
106   achar2 = achar1 + achar0;
107   if(achar2 != 46)
108     failures++;
109
110   achar3 = achar2 + achar1 + achar0;
111   if(achar3 != 92)
112     failures++;
113 }
114
115 #if SUPPORT_BIT_TYPES
116 void add_bits(void)
117 {
118   bit1 = bit0;
119
120   bit0 = 1;
121
122   if(bit1 != 0)
123     failures++;
124
125   bit1 = bit1+bit0;
126   if(bit1 != 1)
127     failures++;
128
129 #if SUPPORT_BIT_ARITHMETIC
130   bit2 = bit1+bit3;
131   if(!bit2)
132     failures++;
133
134   bit3 = bit4+bit5+bit6+bit7+bit0;
135   if(!bit3)
136     failures++;
137 #endif
138 }
139 #endif
140
141 /* add_bit2uchar(void) - assumes bit0 = 1, achar0 = 7  */
142
143 #if SUPPORT_BIT_TYPES
144 void add_bit2uchar(void)
145 {
146   achar0 += bit0;
147
148   if(achar0 != 8)
149     failures++;
150
151   if(achar0 == bit0)
152     failures++;
153 }
154
155 void add_bit2uint(void)
156 {
157   if(aint0 != bit11)
158     failures++;
159
160   aint0 += bit0;
161   if(aint0!=1)
162     failures++;
163 }
164 #endif
165
166 void main(void)
167 {
168   add_lit2uchar();
169   ASSERT(MANGLE(failures) == 0);
170
171   achar0=16;
172   achar1=0;
173   add_uchar2uchar();
174   ASSERT(MANGLE(failures) == 0);
175
176
177   achar0 = 0;
178   achar1 = 32;
179   add_uchar2uchar2();
180   ASSERT(MANGLE(failures) == 0);
181
182 #if SUPPORT_BIT_TYPES
183   add_bits();
184
185   add_bit2uchar();
186   add_bit2uint();
187 #endif
188   ASSERT(MANGLE(failures) == 0);
189
190   done();
191 }