]> git.sur5r.net Git - cc65/blob - test/val/rotate1.c
Merge pull request #849 from polluks/patch-4
[cc65] / test / val / rotate1.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 unsigned int aint0 = 0;
18 unsigned int aint1 = 0;
19 unsigned char achar0 = 0;
20 unsigned char achar1 = 0;
21 unsigned char achar2 = 0;
22
23 void done()
24 {
25   dummy++;
26 }
27
28 void check(void)
29 {
30   if(achar0 != achar1)
31     failures++;
32 }
33
34 void shift_left_1(void)
35 {
36   achar0 <<= 1;
37
38   check();
39 }
40
41 void shift_left_2(void)
42 {
43   achar0 <<= 2;
44
45   if(achar0 != achar1)
46     failures++;
47 }
48
49 void shift_left_3(void)
50 {
51   achar0 <<= 3;
52
53   if(achar0 != achar1)
54     failures++;
55 }
56
57 void shift_left_4(void)
58 {
59   achar0 <<= 4;
60
61   if(achar0 != achar1)
62     failures++;
63 }
64
65 void shift_left_5(void)
66 {
67   achar0 <<= 5;
68
69   if(achar0 != achar1)
70     failures++;
71 }
72
73 void shift_left_6(void)
74 {
75   achar0 <<= 6;
76
77   if(achar0 != achar1)
78     failures++;
79 }
80
81 void shift_left_7(void)
82 {
83   achar0 <<= 7;
84
85   if(achar0 != achar1)
86     failures++;
87 }
88
89 void shift_right_1(void)
90 {
91   achar0 >>= 1;
92
93   check();
94 }
95
96 void shift_right_2(void)
97 {
98   achar0 >>= 2;
99
100   check();
101 }
102
103 void shift_right_3(void)
104 {
105   achar0 >>= 3;
106
107   check();
108 }
109
110 void shift_right_4(void)
111 {
112   achar0 >>= 4;
113
114   check();
115 }
116
117 void shift_right_5(void)
118 {
119   achar0 >>= 5;
120
121   check();
122 }
123
124 void shift_right_6(void)
125 {
126   achar0 >>= 6;
127
128   check();
129 }
130
131 void shift_right_7(void)
132 {
133   achar0 >>= 7;
134
135   check();
136 }
137
138 int main(void)
139 {
140   /* call with both values zero */
141   shift_left_1();
142
143   achar0 = 1;
144   achar1 = 2;
145   for(achar2=0; achar2<6; achar2++) {
146     shift_left_1();
147     achar1 <<=1;
148   }
149
150   achar0 = 1;
151   achar1 = 4;
152   shift_left_2();
153
154   achar0 = 1;
155   achar1 = 8;
156   shift_left_3();
157
158   achar0 = 1;
159   achar1 = 0x10;
160   shift_left_4();
161
162   achar0 = 1;
163   achar1 = 0x20;
164   shift_left_5();
165
166   achar0 = 1;
167   achar1 = 0x40;
168   shift_left_6();
169
170   achar0 = 1;
171   achar1 = 0x80;
172   shift_left_7();
173
174   achar0 = 2;
175   achar1 = 1;
176   shift_right_1();
177
178   achar0 = 4;
179   shift_right_2();
180
181   achar0 = 8;
182   shift_right_3();
183
184   achar0 = 0x10;
185   shift_right_4();
186
187   achar0 = 0x20;
188   shift_right_5();
189
190   achar0 = 0x40;
191   shift_right_6();
192
193   achar0 = 0x80;
194   shift_right_7();
195
196   success=failures;
197   done();
198   printf("failures: %d\n",failures);
199
200   return failures;
201 }