1 /* { dg-do run } */
2 /* { dg-options "-std=gnu99" } */
3
4 /* N1169 6.5.7 - Bitwise shift operands.
5 C99 6.5.5 Multiplicative operators.
6 C99 6.5.6 Additive operators.
7 C99 6.5.7 Bitwise shift operators.
8 C99 6.5.8 Relational operators.
9 C99 6.5.9 Equality operators.
10 C99 6.5.16 Assignment operators.
11
12 Check binary operators + - * / << >> < <= >= > == != += -= *= /= <<= >>=. */
13
14 extern void abort (void);
15
16 #define BINARY(TYPE,POSTFIX) \
17 { TYPE a = 0.5 ## POSTFIX; \
18 TYPE b = 0.25 ## POSTFIX; \
19 if (a + b != 0.75 ## POSTFIX) \
20 abort(); \
21 if (a - b != 0.25 ## POSTFIX) \
22 abort(); \
23 if (a * b != 0.125 ## POSTFIX) \
24 abort(); \
25 if (b / a != 0.5 ## POSTFIX) \
26 abort(); \
27 if (b << 1 != a) \
28 abort(); \
29 if (a >> 1 != b) \
30 abort(); \
31 if (a < b != 0) \
32 abort(); \
33 if (a <= b != 0) \
34 abort(); \
35 if (a > b != 1) \
36 abort(); \
37 if (a >= b != 1) \
38 abort(); \
39 if (a == b != 0) \
40 abort(); \
41 if (a != b != 1) \
42 abort(); \
43 a += b; \
44 if (a != 0.75 ## POSTFIX) \
45 abort(); \
46 a -= b; \
47 if (a != 0.5 ## POSTFIX) \
48 abort(); \
49 a *= b; \
50 if (a != 0.125 ## POSTFIX) \
51 abort(); \
52 a /= b; \
53 if (a != 0.5 ## POSTFIX) \
54 abort(); \
55 a >>= 2; \
56 if (a != 0.125 ## POSTFIX) \
57 abort(); \
58 a <<= 1; \
59 if (a != 0.25 ## POSTFIX) \
60 abort(); \
61 }
62
63 #define FRACT_SAT_BINARY(TYPE,POSTFIX) \
64 { TYPE a = 0.7 ## POSTFIX; \
65 TYPE b = 0.9 ## POSTFIX; \
66 if (a + b != 1.0 ## POSTFIX) \
67 abort(); \
68 a = -0.7 ## POSTFIX; \
69 b = -0.9 ## POSTFIX; \
70 if (a + b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
71 abort(); \
72 a = 0.7 ## POSTFIX; \
73 b = -0.9 ## POSTFIX; \
74 if (a - b != 1.0 ## POSTFIX) \
75 abort(); \
76 a = -0.7 ## POSTFIX; \
77 b = 0.9 ## POSTFIX; \
78 if (a - b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
79 abort(); \
80 a = -0.5 ## POSTFIX - 0.5 ## POSTFIX; \
81 if (a * a != 1.0 ## POSTFIX) \
82 abort(); \
83 a = 0.8 ## POSTFIX; \
84 b = 0.5 ## POSTFIX; \
85 if (a / b != 1.0 ## POSTFIX) \
86 abort(); \
87 a = -0.8 ## POSTFIX; \
88 b = 0.5 ## POSTFIX; \
89 if (a / b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
90 abort(); \
91 a = 0.1 ## POSTFIX; \
92 if (a << 4 != 1.0 ## POSTFIX) \
93 abort(); \
94 a = -0.8 ## POSTFIX; \
95 if (a << 4 != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
96 abort(); \
97 }
98
99 #define FRACT_SAT_UNS_BINARY(TYPE,POSTFIX) \
100 { TYPE a = 0.7 ## POSTFIX; \
101 TYPE b = 0.9 ## POSTFIX; \
102 if (a + b != 1.0 ## POSTFIX) \
103 abort(); \
104 if (a - b != 0.0 ## POSTFIX) \
105 abort(); \
106 if (b / a != 1.0 ## POSTFIX) \
107 abort(); \
108 if (a << 1 != 1.0 ## POSTFIX) \
109 abort(); \
110 }
111
main()112 int main ()
113 {
114 BINARY(short _Fract, hr);
115 BINARY(_Fract, r);
116 BINARY(long _Fract, lr);
117 BINARY(long long _Fract, llr);
118 BINARY(unsigned short _Fract, uhr);
119 BINARY(unsigned _Fract, ur);
120 BINARY(unsigned long _Fract, ulr);
121 BINARY(unsigned long long _Fract, ullr);
122 BINARY(_Sat short _Fract, hr);
123 BINARY(_Sat _Fract, r);
124 BINARY(_Sat long _Fract, lr);
125 BINARY(_Sat long long _Fract, llr);
126 BINARY(_Sat unsigned short _Fract, uhr);
127 BINARY(_Sat unsigned _Fract, ur);
128 BINARY(_Sat unsigned long _Fract, ulr);
129 BINARY(_Sat unsigned long long _Fract, ullr);
130 BINARY(short _Accum, hk);
131 BINARY(_Accum, k);
132 BINARY(long _Accum, lk);
133 BINARY(long long _Accum, llk);
134 BINARY(unsigned short _Accum, uhk);
135 BINARY(unsigned _Accum, uk);
136 BINARY(unsigned long _Accum, ulk);
137 BINARY(unsigned long long _Accum, ullk);
138 BINARY(_Sat short _Accum, hk);
139 BINARY(_Sat _Accum, k);
140 BINARY(_Sat long _Accum, lk);
141 BINARY(_Sat long long _Accum, llk);
142 BINARY(_Sat unsigned short _Accum, uhk);
143 BINARY(_Sat unsigned _Accum, uk);
144 BINARY(_Sat unsigned long _Accum, ulk);
145 BINARY(_Sat unsigned long long _Accum, ullk);
146
147 FRACT_SAT_BINARY(_Sat short _Fract, hr);
148 FRACT_SAT_BINARY(_Sat _Fract, r);
149 FRACT_SAT_BINARY(_Sat long _Fract, lr);
150 FRACT_SAT_BINARY(_Sat long long _Fract, llr);
151
152 FRACT_SAT_UNS_BINARY(_Sat unsigned short _Fract, uhr);
153 FRACT_SAT_UNS_BINARY(_Sat unsigned _Fract, ur);
154 FRACT_SAT_UNS_BINARY(_Sat unsigned long _Fract, ulr);
155 FRACT_SAT_UNS_BINARY(_Sat unsigned long long _Fract, ullr);
156
157 return 0;
158 }
159