f0b0033bbe6f8f9b438570bae7ddaca17f510306
[fw/sdcc] / src / regression / add3.c
1 #define __16F873
2 #include "p16f873.h"
3
4 // Addition tests - mostly int's
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
11 unsigned char success=0;
12 unsigned char failures=0;
13 unsigned char dummy=0;
14
15
16 char char0 = 0;
17 char char1 = 0;
18 char char2 = 0;
19 int int0 = 0;
20 int int1 = 0;
21 long long0 = 0;
22 long long1 = 0;
23 unsigned long ulong0 = 0;
24 unsigned long ulong1 = 0;
25
26 #if SUPPORT_BIT_TYPES
27
28 bit bit0 = 0;
29 bit bit1 = 0;
30 bit bit2 = 0;
31 bit bit3 = 0;
32 bit bit4 = 0;
33 bit bit5 = 0;
34 bit bit6 = 0;
35 bit bit7 = 0;
36 bit bit8 = 0;
37 bit bit9 = 0;
38 bit bit10 = 0;
39 bit bit11 = 0;
40
41 #endif
42
43
44 void done()
45 {
46
47   dummy++;
48
49 }
50
51 void add_char2char(void)
52 {
53   if(char0 != 4)
54     failures++;
55   if(char1 != 5)
56     failures++;
57
58   char0 = char0 + char1;
59
60   if(char0 != 9)
61     failures++;
62
63   char0 += 127;
64   if(char0 > 0)
65     failures++;
66
67   if(char0 != -0x78)
68     failures++;
69
70
71 }
72
73 void add_compound_char(void)
74 {
75   char0 = char1+5;
76
77   if(char0 != 9)
78     failures++;
79
80   if((char0+char1) != 13)
81     failures++;
82 }
83
84 void add_int2int(void)
85 {
86   if(int0 != 4)
87     failures++;
88   if(int1 != 5)
89     failures++;
90
91   int0 += int1;
92   if(int0 != 9)
93     failures++;
94
95   int0 += 0x7fff;
96   if(int0 != -0x7ff8)
97     failures++;
98
99 }
100
101 void add_compound_int(void)
102 {
103   int0 = int1+5;
104
105   if(int0 != 9)
106     failures++;
107
108   if((int0+int1) != 13)
109     failures++;
110 }
111
112
113 void add_lit2long(void)
114 {
115
116   if(long0 != 0)
117     failures++;
118
119   long0++;
120
121   if(long0 != 1)
122     failures++;
123
124   long0 = long0 + 0xff;
125
126   if(long0 != 0x100)
127     failures++;
128
129   long0 = long0 + 0x100;
130   if(long0 != 0x200)
131     failures++;
132
133
134   long0 = long0 + 0xfe00;
135   if(long0 != 0x10000)
136     failures++;
137
138   long0 = long0 + 0xff0000;
139   if(long0 != 0x1000000)
140     failures++;
141
142   long0 = long0 + 0x7e000000;
143   if(long0 != 0x7f000000)
144     failures++;
145
146   /* wrap around zero */
147   long0 = long0 + 0x2000000;
148   if(long0 != -0x7f000000)
149     failures++;
150
151   long0 = long0 + 0x7f000000;
152   if(long0 != 0)
153     failures++;
154
155 }
156
157 void add_lit2ulong(void)
158 {
159
160   if(ulong0 != 0)
161     failures++;
162
163   ulong0++;
164
165   if(ulong0 != 1)
166     failures++;
167
168   ulong0 = ulong0 + 0xff;
169
170   if(ulong0 != 0x100)
171     failures++;
172
173   ulong0 = ulong0 + 0x100;
174   if(ulong0 != 0x200)
175     failures++;
176
177
178   ulong0 = ulong0 + 0xfe00;
179   if(ulong0 != 0x10000)
180     failures++;
181
182   ulong0 = ulong0 + 0xff0000;
183   if(ulong0 != 0x1000000)
184     failures++;
185
186   ulong0 = ulong0 + 0x7e000000;
187   if(ulong0 != 0x7f000000)
188     failures++;
189
190   ulong0 = ulong0 + 0x2000000;
191   if(ulong0 != 0x81000000)
192     failures++;
193
194   /* wrap around zero */
195   ulong0 = ulong0 + 0x7f000000;
196   if(ulong0)
197     failures++;
198
199 }
200
201 void main(void)
202 {
203   char0=4;
204   char1 = char0 + 1;
205   add_char2char();
206
207   char1=4;
208   add_compound_char();
209
210   int0 = 4;
211   int1 = int0 + 1;
212   add_int2int();
213
214   int1=4;
215   add_compound_int();
216
217   add_lit2long();
218   add_lit2ulong();
219
220   success = failures;
221   done();
222 }