Added support for gsinit packing.
[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>>2 == -30);
39
40     result = i;
41     result >>= 3;
42     ASSERT(result == -15); 
43 }
44
45 /** PENDING: Disabled. */
46 static void
47 testShiftByteMultiples(void)
48 {
49 #if 0
50     /* PENDING */
51     {attr} {storage} {type} i;
52
53     i = ({type}){vals};
54     ASSERT(i>>8  == (({type}){vals} >> 8));
55     ASSERT(i>>16 == (({type}){vals} >> 16));
56     ASSERT(i>>24 == (({type}){vals} >> 24));
57
58     i = ({type}){vals};
59     ASSERT(i<<8  == (({type}){vals} << 8));;
60     ASSERT(i<<16 == (({type}){vals} << 16));
61     ASSERT(i<<24 == (({type}){vals} << 24));
62 #endif
63 }
64
65 static void
66 testShiftOne(void)
67 {
68     {attr} {storage} {sign} {type} i;
69     {sign} {type} result;
70
71     i = ({type}){vals};
72
73     result = i >> 1;
74     ASSERT(result == ({type})(({type}){vals} >> 1));
75
76     result = i;
77     result >>= 1;
78     ASSERT(result == ({type})(({type}){vals} >> 1));
79
80     result = i << 1;
81     ASSERT(result == ({type})(({type}){vals} << 1));
82
83     result = i;
84     result <<= 1;
85     ASSERT(result == ({type})(({type}){vals} << 1));
86 }