]> git.sur5r.net Git - cc65/blob - test/val/rotate6.c
All regression-tests subdirectories are cleaned before the first test starts, so...
[cc65] / test / val / rotate6.c
1 /*
2   !!DESCRIPTION!! Shift bytes left and right by a variable.
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 signed char achar3 = 0;
37
38 void done()
39 {
40   dummy++;
41 }
42
43 void shift_right_var(void)
44 {
45   achar0 >>= achar1;
46 }
47
48 void shift_left_var(void)
49 {
50   achar0 <<= achar1;
51 }
52
53 void shift_int_left_var(void)
54 {
55   aint0 <<= achar1;
56 }
57
58 void shift_int_right_var(void)
59 {
60   aint0 >>= achar1;
61 }
62
63 void shift_int_right_var2(void)
64 {
65   aint0 = aint1 >> achar1;
66 }
67
68 void shift_int_left_var2(void)
69 {
70   aint0 = aint1 << achar1;
71 }
72
73 int
74 main (void)
75 {
76   char i;
77
78   achar0 = 1;
79   achar1 = 1;
80   shift_left_var();
81
82   if(achar0 !=2)
83     failures++;
84   printf("failures: %d\n",failures);
85
86   achar0 = 1;
87   achar1 = 1;
88   achar2 = 1;
89   for(i=0; i<7; i++) {
90     shift_left_var();
91     achar2 <<= 1;
92
93     if(achar2 != achar0)
94       failures++;
95   }
96   printf("failures: %d\n",failures);
97
98   achar1 = 4;
99   achar0 = 0xf0;
100   shift_right_var();
101   if(((unsigned char)achar0) != 0xff)
102     failures++;
103   printf("failures: %d\n",failures);
104
105   aint0 = 1;
106   aint1 = 1;
107   achar1 = 1;
108
109   for(i=0; i<15; i++) {
110     shift_int_left_var();
111     aint1 <<= 1;
112     if(aint0 != aint1)
113       failures++;
114   }
115   printf("failures: %d\n",failures);
116
117   aint0 = 0x4000;
118   aint1 = 0x4000;
119
120   for(i=0; i<15; i++) {
121     shift_int_right_var();
122     aint1 >>= 1;
123     if(aint0 != aint1)
124       failures++;
125   }
126   printf("failures: %d\n",failures);
127
128   aint0 = -0x4000;
129   aint1 = -0x4000;
130
131   for(i=0; i<15; i++) {
132     shift_int_right_var();
133     aint1 >>= 1;
134     if(aint0 != aint1)
135       failures++;
136   }
137   printf("failures: %d\n",failures);
138
139   aint1 = 0xf000;
140   achar1 = 10;
141   shift_int_right_var2();
142
143   if(((unsigned short)aint0) != 0xfffc)
144     failures++;
145   printf("failures: %d\n",failures);
146
147   aint1 = aint0;
148   shift_int_left_var2();
149
150   if(((unsigned short)aint0) != 0xf000)
151     failures++;
152
153   success=failures;
154   done();
155   printf("failures: %d\n",failures);
156
157   return failures;
158 }