Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / shifts2.c
1 /** extended tests for shift operations, added by
2     Frieder Ferlemann to check for bugs related to bug 1533966
3
4     size: 8,16,32
5     right: 0,1
6     vol: 0,1
7     sign: u,
8 */
9 #include <testfwk.h>
10 #ifdef __sun__
11 #  include <inttypes.h>
12 #else
13 #  include <stdint.h>
14 #endif
15
16 #define SIZE    ({size})
17 #define RIGHT   ({right})
18 #define VOL     ({vol})
19
20 #if SIZE == 8
21 #  define TYPE {sign}int8_t
22 #  define TEST_VECT 0xa4
23 #endif
24
25 #if SIZE == 16
26 #  define TYPE {sign}int16_t
27 #  define TEST_VECT 0xa8ce
28 #endif
29
30 #if SIZE == 32
31 #  define TYPE {sign}int32_t
32 #  define TEST_VECT 0xa8b5c4d6
33 #endif
34
35 #if RIGHT == 0
36 #  define SHIFT(x,y) (TYPE)((TYPE)(x)<<(y))
37 #else
38 #  define SHIFT(x,y) (TYPE)((TYPE)(x)>>(y))
39 #endif
40
41 #if VOL == 0
42   volatile TYPE s = TEST_VECT;
43            TYPE t;
44   #define TESTSHIFT(x) t=s; t = SHIFT (t,(x)); ASSERT( t == SHIFT (TEST_VECT, (x)));
45 #else
46   volatile TYPE t = TEST_VECT;
47   #define TESTSHIFT(x) t=TEST_VECT; t = SHIFT (t,(x)); ASSERT( t == SHIFT (TEST_VECT, (x)));
48 #endif
49
50 static void
51 testShift(void)
52 {
53     TESTSHIFT(0);
54     TESTSHIFT(1);
55     TESTSHIFT(2);
56     TESTSHIFT(3);
57     TESTSHIFT(4);
58     TESTSHIFT(5);
59     TESTSHIFT(6);
60     TESTSHIFT(7);
61
62 #if SIZE >= 16
63     TESTSHIFT(8);
64     TESTSHIFT(9);
65     TESTSHIFT(10);
66     TESTSHIFT(11);
67     TESTSHIFT(12);
68     TESTSHIFT(13);
69     TESTSHIFT(14);
70     TESTSHIFT(15);
71 #endif
72
73 #if SIZE >= 32
74     TESTSHIFT(16);
75     TESTSHIFT(17);
76     TESTSHIFT(18);
77     TESTSHIFT(19);
78     TESTSHIFT(20);
79     TESTSHIFT(21);
80     TESTSHIFT(22);
81     TESTSHIFT(23);
82
83     TESTSHIFT(24);
84     TESTSHIFT(25);
85     TESTSHIFT(26);
86     TESTSHIFT(27);
87     TESTSHIFT(28);
88     TESTSHIFT(29);
89     TESTSHIFT(30);
90     TESTSHIFT(31);
91 #endif
92 }