Imported Upstream version 2.9.0
[debian/cc1111] / 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 test1ShiftClasses(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 test2ShiftRight(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 void
52 test3ShiftByteMultiples(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 void
68 test4ShiftOne(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 }
89
90 static {type} ShiftLeftByParam ({type} count)
91 {
92     {attr} {storage} {type} i;
93     i = ({type}){vals};
94     return (i << count);
95 }
96
97 static {type} ShiftRightByParam ({type} count)
98 {
99     {attr} {storage} {type} i;
100     i = ({type}){vals};
101     return (i >> count);
102 }
103
104 void
105 testShiftByParam(void)
106 {
107     ASSERT(ShiftLeftByParam(2)  == ({type})({vals} << 2));
108     ASSERT(ShiftRightByParam(2) == ({type})({vals} >> 2));
109 }