8d0eb33c4288e3c54d3bd885b393884f96f065d5
[fw/sdcc] / support / regression / tests / shifts.c
1 /** Tests covering the shift operators.
2
3     type: char, int
4     storage: static, 
5     attr: volatile
6
7     vals: 3
8
9     pending - 1792, 851968, 1560281088, -3, -1792, -851968, -1560000000
10 */
11 #include <testfwk.h>
12
13 static void
14 testShiftClasses(void)
15 {
16     {attr} {storage} {type} i, result;
17
18     i = 30;
19     ASSERT(i>>3 == 3);
20     ASSERT(i<<2 == 120);
21     
22     result = i;
23     result >>= 2;
24     ASSERT(result == 7);
25
26     result = i;
27     result <<= 2;
28     ASSERT(result == 120);
29 }
30
31 /** PENDING: Disabled. */
32 static void
33 testShiftByteMultiples(void)
34 {
35 #if 1
36     {attr} {storage} {type} i;
37
38     i = ({type}){vals};
39     ASSERT(i>>8  == (({type}){vals} >> 8));
40     ASSERT(i>>16 == (({type}){vals} >> 16));
41     ASSERT(i>>24 == (({type}){vals} >> 24));
42
43     i = ({type}){vals};
44     ASSERT(i<<8  == (({type}){vals} << 8));;
45     ASSERT(i<<16 == (({type}){vals} << 16));
46     ASSERT(i<<24 == (({type}){vals} << 24));
47 #endif
48 }
49
50 static void
51 testShiftOne(void)
52 {
53     {attr} {storage} {type} i;
54     {type} result;
55
56     i = ({type}){vals};
57
58     result = i >> 1;
59     ASSERT(result == ({type})(({type}){vals} >> 1));
60
61     result = i;
62     result >>= 1;
63     ASSERT(result == ({type})(({type}){vals} >> 1));
64
65     result = i << 1;
66     ASSERT(result == ({type})(({type}){vals} << 1));
67
68     result = i;
69     result <<= 1;
70     ASSERT(result == ({type})(({type}){vals} << 1));
71 }