* src/SDCCval.h: unified double2ul macro for all platforms
[fw/sdcc] / support / regression / tests / bitwise.c
1 /** Test the bitwise operators.
2
3     type: char, short, long
4     attr: volatile,
5     storage: static,
6  */
7 #include <testfwk.h>
8
9 static void
10 testTwoOpBitwise(void)
11 {
12     {storage} {attr} {type} left, right;
13
14     left = ({type})0x3df7;
15     right = ({type})0xc1ec;
16
17     ASSERT(({type})(left & right) == ({type})0x1E4);
18     ASSERT(({type})(right & left) == ({type})0x1E4);
19     ASSERT(({type})(left & 0xc1ec) == ({type})0x1E4);
20     ASSERT(({type})(0x3df7 & right) == ({type})0x1E4);
21
22     ASSERT(({type})(left | right) == ({type})0xFDFF);
23     ASSERT(({type})(right | left) == ({type})0xFDFF);
24     ASSERT(({type})(left | 0xc1ec) == ({type})0xFDFF);
25     ASSERT(({type})(0x3df7 | right) == ({type})0xFDFF);
26
27     ASSERT(({type})(left ^ right) == ({type})0xFC1B);
28     ASSERT(({type})(right ^ left) == ({type})0xFC1B);
29     ASSERT(({type})(left ^ 0xc1ec) == ({type})0xFC1B);
30     ASSERT(({type})(0x3df7 ^ right) == ({type})0xFC1B);
31
32 #if defined (__alpha__) || defined (__x86_64__)
33     /* long is 64 bits on 64 bit machines */
34     ASSERT(({type})(~left) == ({type})0xFFFFFFFFFFFFC208);
35 #else
36     ASSERT(({type})(~left) == ({type})0xFFFFC208);
37 #endif
38 }
39
40 static void
41 testBug_1777758(void)
42 {
43   char ep = -1;
44
45   ep &= ~0x80;
46
47   ASSERT(ep == 127);
48 }