]> git.sur5r.net Git - cc65/blob - test/val/rotate5.c
All regression-tests subdirectories are cleaned before the first test starts, so...
[cc65] / test / val / rotate5.c
1 /*
2   !!DESCRIPTION!! Shift bytes left and right by a constant.
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 #ifdef SUPPORT_BIT_TYPES
15 bit bit0 = 0;
16 #endif
17 #ifdef SIZEOF_INT_16BIT
18 #if defined(__LINUX__) || defined(LINUX)
19 signed short aint0 = 0;
20 signed short aint1 = 0;
21
22 #else
23 signed int aint0 = 0;
24 signed int aint1 = 0;
25
26 #endif
27
28 #else
29 signed int aint0 = 0;
30 signed int aint1 = 0;
31
32 #endif
33 signed char achar0 = 0;
34 signed char achar1 = 0;
35 signed char achar2 = 0;
36
37 void done()
38 {
39   dummy++;
40 }
41
42 void check(void)
43 {
44   if(achar0 != achar1)
45     failures++;
46 }
47
48 void shift_left_1(void)
49 {
50   achar0 <<= 1;
51
52   check();
53 }
54
55 void shift_left_2(void)
56 {
57   achar0 <<= 2;
58
59   if(achar0 != achar1)
60     failures++;
61 }
62
63 void shift_left_3(void)
64 {
65   achar0 <<= 3;
66
67   if(achar0 != achar1)
68     failures++;
69 }
70
71 void shift_left_4(void)
72 {
73   achar0 <<= 4;
74
75   if(achar0 != achar1)
76     failures++;
77 }
78
79 void shift_left_5(void)
80 {
81   achar0 <<= 5;
82
83   if(achar0 != achar1)
84     failures++;
85 }
86
87 void shift_left_6(void)
88 {
89   achar0 <<= 6;
90
91   if(achar0 != achar1)
92     failures++;
93 }
94
95 void shift_left_7(void)
96 {
97   achar0 <<= 7;
98
99   if(achar0 != achar1)
100     failures++;
101 }
102
103 void shift_right_1(void)
104 {
105   achar0 >>= 1;
106
107   check();
108 }
109
110 void shift_right_2(void)
111 {
112   achar0 >>= 2;
113
114   check();
115 }
116
117 void shift_right_3(void)
118 {
119   achar0 >>= 3;
120
121   check();
122 }
123
124 void shift_right_4(void)
125 {
126   achar0 >>= 4;
127
128   check();
129 }
130
131 void shift_right_5(void)
132 {
133   achar0 >>= 5;
134
135   check();
136 }
137
138 void shift_right_6(void)
139 {
140   achar0 >>= 6;
141
142   check();
143 }
144
145 void shift_right_7(void)
146 {
147   achar0 >>= 7;
148
149   check();
150 }
151
152 int main(void)
153 {
154   /* call with both values zero */
155   shift_left_1();
156   printf("failures: %d\n",failures);
157
158   achar0 = 1;
159   achar1 = 2;
160   for(achar2=0; achar2<6; achar2++) {
161     shift_left_1();
162     achar1 <<=1;
163   }
164   printf("failures: %d\n",failures);
165
166   achar0 = 1;
167   achar1 = 4;
168   shift_left_2();
169   printf("failures: %d\n",failures);
170
171   achar0 = 1;
172   achar1 = 8;
173   shift_left_3();
174   printf("failures: %d\n",failures);
175
176   achar0 = 1;
177   achar1 = 0x10;
178   shift_left_4();
179   printf("failures: %d\n",failures);
180
181   achar0 = 1;
182   achar1 = 0x20;
183   shift_left_5();
184   printf("failures: %d\n",failures);
185
186   achar0 = 1;
187   achar1 = 0x40;
188   shift_left_6();
189   printf("failures: %d\n",failures);
190
191   achar0 = 1;
192   achar1 = 0x80;
193   shift_left_7();
194   printf("failures: %d\n",failures);
195
196   achar0 = 2;
197   achar1 = 1;
198   shift_right_1();
199   printf("failures: %d\n",failures);
200
201   achar0 = 4;
202   shift_right_2();
203   printf("failures: %d\n",failures);
204
205   achar0 = 8;
206   shift_right_3();
207   printf("failures: %d\n",failures);
208
209   achar0 = 0x10;
210   shift_right_4();
211   printf("failures: %d\n",failures);
212
213   achar0 = 0x20;
214   shift_right_5();
215   printf("failures: %d\n",failures);
216
217   achar0 = 0x40;
218   shift_right_6();
219   printf("failures: %d\n",failures);
220
221   achar0 = 0xff;
222   achar1 = 0xff;
223   shift_right_1();
224   printf("failures: %d\n",failures);
225
226   achar0 = 0xfe;
227   achar1 = 0xff;
228   shift_right_1();
229   printf("failures: %d\n",failures);
230
231   achar0 = 0xfc;
232   shift_right_2();
233   printf("failures: %d\n",failures);
234
235   achar0 = 0xf8;
236   shift_right_3();
237   printf("failures: %d\n",failures);
238
239   achar0 = 0xf0;
240   shift_right_4();
241   printf("failures: %d\n",failures);
242
243   achar0 = 0xe0;
244   shift_right_5();
245   printf("failures: %d\n",failures);
246
247   achar0 = 0xc0;
248   shift_right_6();
249   printf("failures: %d\n",failures);
250
251   achar0 = 0x80;
252   achar1 = 0xff;
253   shift_right_7();
254
255   success=failures;
256   done();
257   printf("failures: %d\n",failures);
258
259   return failures;
260 }