* src/SDCCval.c (cheapestVal): reenabled to reduce int to char
[fw/sdcc] / support / regression / tests / shifts.c
1 /** Tests covering the shift operators.
2
3     sign: signed, unsigned
4     type: char, int, long
5     storage: static, 
6     attr: volatile
7
8     vals: 3
9
10     pending - 1792, 851968, 1560281088, -3, -1792, -851968, -1560000000
11 */
12 #include <testfwk.h>
13
14 void
15 testShiftClasses(void)
16 {
17     {attr} {storage} {sign} {type} i, result;
18
19     i = 30;
20     ASSERT(i>>3 == 3);
21     ASSERT(i<<2 == 120);
22     
23     result = i;
24     result >>= 2;
25     ASSERT(result == 7);
26
27     result = i;
28     result <<= 2;
29     ASSERT(result == 120);
30 }
31
32 void
33 testShiftRight(void)
34 {
35     {attr} {storage} {type} i, result;
36
37     i = -120;
38     ASSERT(i>>1 == -60);
39     ASSERT(i>>2 == -30);
40     ASSERT(i>>3 == -15);
41     ASSERT(i>>4 == -8);
42     ASSERT(i>>5 == -4);
43     ASSERT(i>>6 == -2);
44     ASSERT(i>>7 == -1);
45     ASSERT(i>>8 == -1);
46     result = i;
47     result >>= 3;
48     ASSERT(result == -15); 
49 }
50
51 static void
52 testShiftByteMultiples(void)
53 {
54     {attr} {storage} {type} i;
55
56     i = ({type}){vals};
57     ASSERT(i>>8  == ({type})({vals} >> 8));
58     ASSERT(i>>16 == ({type})({vals} >> 16));
59     ASSERT(i>>24 == ({type})({vals} >> 24));
60
61     i = ({type}){vals};
62     ASSERT( ({type})(i<<8)  ==  ({type})({vals} << 8));;
63     ASSERT((({type}) i<<16) == (({type}) {vals} << 16));
64     ASSERT((({type}) i<<24) == (({type}) {vals} << 24));
65 }
66
67 static void
68 testShiftOne(void)
69 {
70     {attr} {storage} {sign} {type} i;
71     {sign} {type} result;
72
73     i = ({type}){vals};
74
75     result = i >> 1;
76     ASSERT(result == ({type})(({type}){vals} >> 1));
77
78     result = i;
79     result >>= 1;
80     ASSERT(result == ({type})(({type}){vals} >> 1));
81
82     result = i << 1;
83     ASSERT(result == ({type})(({type}){vals} << 1));
84
85     result = i;
86     result <<= 1;
87     ASSERT(result == ({type})(({type}){vals} << 1));
88 }