]> git.sur5r.net Git - cc65/blob - test/val/sub1.c
Merge pull request #849 from polluks/patch-4
[cc65] / test / val / sub1.c
1 /*
2   !!DESCRIPTION!! Substraction Test
3   !!ORIGIN!!      SDCC regression tests
4   !!LICENCE!!     GPL, read COPYING.GPL
5 */
6
7 #include <stdio.h>
8 #include <limits.h>
9
10 unsigned char success=0;
11 unsigned char failures=0;
12 unsigned char dummy=0;
13
14 #if SUPPORT_BIT_TYPES
15
16 bit bit0 = 0;
17 bit bit1 = 0;
18 bit bit2 = 0;
19 bit bit3 = 0;
20 bit bit4 = 0;
21 bit bit5 = 0;
22 bit bit6 = 0;
23 bit bit7 = 0;
24 bit bit8 = 0;
25 bit bit9 = 0;
26 bit bit10 = 0;
27 bit bit11 = 0;
28
29 #endif
30
31 #ifdef SIZEOF_INT_16BIT
32 #if defined(__LINUX__) || defined(LINUX)
33 unsigned short aint0 = 0;
34 unsigned short aint1 = 0;
35 #else
36 unsigned int aint0 = 0;
37 unsigned int aint1 = 0;
38 #endif
39
40 #else
41 unsigned int aint0 = 0;
42 unsigned int aint1 = 0;
43 #endif
44 unsigned char achar0 = 0;
45 unsigned char achar1 = 0;
46 unsigned char achar2 = 0;
47 unsigned char achar3 = 0;
48 unsigned char *acharP = 0;
49
50 void done()
51 {
52   dummy++;
53 }
54
55 void sub_lit_from_uchar(void)
56 {
57   achar0 = achar0 - 5;
58
59   if(achar0 != 0xfb)
60     failures++;
61
62   achar0 -= 10;
63
64   if(achar0 != 0xf1)
65     failures++;
66
67   achar0 = achar0 -1;  /* Should be a decrement */
68   if(achar0 != 0xf0)
69     failures++;
70
71   for(achar1 = 0; achar1 < 100; achar1++)
72     achar0 -= 2;
73
74   if(achar0 != 40)
75     failures++;
76 }
77
78 /* achar0 = 1
79  achar1 = 100
80 */
81
82 void sub_uchar2uchar(void)
83 {
84   achar1 = achar1 - achar0;
85
86   if(achar1 != 99)
87     failures++;
88
89   for(achar2 = 0; achar2<7; achar2++)
90     achar1 -= achar0;
91
92   if(achar1 != 92)
93     failures++;
94 }
95
96 /* assumes
97   achar0 = 10
98   achar1 = 32
99   achar2, achar3 can be anything.
100 */
101 void sub_uchar2uchar2(void)
102 {
103   achar0--;
104   achar0 = achar0 - 1;
105   achar0 = achar0 - 2;
106   achar0 = achar0 - 3;
107   if(achar0 != 3)
108     failures++;
109
110   achar1 -= achar0;
111   if(achar1 != 29)
112     failures++;
113
114   achar2 = achar1 - achar0;
115   if(achar2 != 26)
116     failures++;
117
118   achar3 = achar2 - achar1 - achar0;
119   if(achar3 != 0xfa)
120     failures++;
121 }
122
123 /* sub_bits
124  all bit variables are 0 upon entry.
125 */
126 #if SUPPORT_BIT_TYPES
127 void sub_bits(void)
128 {
129   bit1 = bit0;
130
131   bit0 = 1;
132
133   if(bit1 != 0)
134     failures++;
135
136   bit1 = bit0-bit1;   /* 1 - 0 => 1 */
137   if(bit1 != 1)
138     failures++;
139
140 #if SUPPORT_BIT_ARITHMETIC
141   bit2 = bit1-bit0;   /* 1 - 1 => 0 */
142   if(bit2)
143     failures++;
144
145   bit7 = bit4-bit5;
146   bit6 = bit4+bit5;
147   bit3 = bit4-bit5-bit6-bit7-bit0; /* 0-0-0-0-1 => 1 */
148   if(!bit3)
149     failures++;
150 #endif
151 }
152
153 /* sub_bit2uchar(void) - assumes bit0 = 1, achar0 = 7  */
154
155 void sub_bit2uchar(void)
156 {
157   achar0 -= bit0;
158
159   if(achar0 != 6)
160     failures++;
161
162   if(achar0 == bit0)
163     failures++;
164 }
165
166 void sub_bit2uint(void)
167 {
168   if(aint0 != bit11)
169     failures++;
170
171   aint0 -= bit0;
172   if(aint0!=0xffff)
173     failures++;
174 }
175 #endif
176
177 void sub_ucharFromLit(void)
178 {
179   achar0 = 2 - achar0;
180
181   if(achar0 != 2)
182   {
183     printf("%x != %x\n",0x02,achar0);
184     failures++;
185   }
186
187   aint0 = 2 - aint0;
188
189   if(aint0 != 2)
190   {
191     printf("%x != %x\n",0x02,aint0);
192     failures++;
193   }
194
195   aint0--;
196
197   if(aint0 != 1)
198   {
199     printf("%x != %x\n",0x01,aint0);
200     failures++;
201   }
202
203   aint0 = 0x100 - aint0;
204
205   if(aint0 != 0xff)
206   {
207     printf("%x != %x\n",0xff,aint0);
208     failures++;
209   }
210
211   aint0 = 0xff00 - aint0;
212
213   if(aint0 != 0xfe01)
214   {
215     printf("%x != %x\n",0xfe01,aint0);
216     failures++;
217   }
218
219   aint0 = 0x0e01 - aint0;
220
221   if(aint0 != 0x1000)
222   {
223     printf("%x != %x\n",0x1000,aint0);
224     failures++;
225   }
226
227   aint0 = 0x10ff - aint0;
228
229   if(aint0 != 0xff)
230   {
231     printf("%x != %x\n",0xff,aint0);
232     failures++;
233   }
234 }
235
236 int main(void)
237 {
238   sub_lit_from_uchar();
239   printf("failures: %d\n",failures);
240
241   achar0=1;
242   achar1=100;
243   sub_uchar2uchar();
244   printf("failures: %d\n",failures);
245
246   achar0 = 10;
247   achar1 = 32;
248   sub_uchar2uchar2();
249   printf("failures: %d\n",failures);
250
251 #if SUPPORT_BIT_TYPES
252   sub_bits();
253
254   achar0 = 7;
255   bit0 = 1;
256   sub_bit2uchar();
257   printf("failures: %d\n",failures);
258   sub_bit2uint();
259   printf("failures: %d\n",failures);
260 #endif
261
262   aint0 = 0;
263   achar0 = 0;
264   sub_ucharFromLit();
265
266   success = failures;
267   done();
268
269   printf("failures: %d\n",failures);
270
271   return failures;
272 }