Merge -r 127928:132243 from trunk
[official-gcc.git] / gcc / testsuite / gcc.dg / fixed-point / unary.c
blob4e0954902aa194d7ba6325658856f842afb7a999
1 /* { dg-do run } */
2 /* { dg-options "-std=gnu99" } */
4 /* C99 6.5.3 Unary operators.
6 Check unary operators ++ -- + - !. */
8 extern void abort (void);
10 #define INCDEC(TYPE,POSTFIX) \
11 { TYPE a = 0.0 ## POSTFIX; \
12 if (a++ != 0.0 ## POSTFIX) \
13 abort(); \
14 if (a != 1.0 ## POSTFIX) \
15 abort(); \
16 if (a-- != 1.0 ## POSTFIX) \
17 abort(); \
18 if (a != 0.0 ## POSTFIX) \
19 abort(); \
20 if (++a != 1.0 ## POSTFIX) \
21 abort(); \
22 if (a != 1.0 ## POSTFIX) \
23 abort(); \
24 if (--a != 0.0 ## POSTFIX) \
25 abort(); \
26 if (a != 0.0 ## POSTFIX) \
27 abort(); \
30 #define FRACT_INCDEC(TYPE,POSTFIX) \
31 { TYPE a = -0.5 ## POSTFIX; \
32 if (a++ != -0.5 ## POSTFIX) \
33 abort(); \
34 if (a != 0.5 ## POSTFIX) \
35 abort(); \
36 if (a-- != 0.5 ## POSTFIX) \
37 abort(); \
38 if (a != -0.5 ## POSTFIX) \
39 abort(); \
40 if (++a != 0.5 ## POSTFIX) \
41 abort(); \
42 if (a != 0.5 ## POSTFIX) \
43 abort(); \
44 if (--a != -0.5 ## POSTFIX) \
45 abort(); \
46 if (a != -0.5 ## POSTFIX) \
47 abort(); \
50 #define FRACT_SAT_INCDEC(TYPE,POSTFIX) \
51 { TYPE a = 0.9 ## POSTFIX; \
52 if (++a != 1.0 ## POSTFIX) \
53 abort(); \
54 a = -0.1 ## POSTFIX; \
55 if (--a != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
56 abort(); \
59 #define FRACT_SAT_UNS_INCDEC(TYPE,POSTFIX) \
60 { TYPE a = 0.9 ## POSTFIX; \
61 if (++a != 1.0 ## POSTFIX) \
62 abort(); \
63 a = 0.1 ## POSTFIX; \
64 if (--a != 0.0 ## POSTFIX) \
65 abort(); \
68 #define PLUS(TYPE,POSTFIX) \
69 { TYPE a = 0.1 ## POSTFIX; \
70 if (+a != 0.1 ## POSTFIX) \
71 abort(); \
74 #define NEG(TYPE,POSTFIX) \
75 { TYPE a = -0.1 ## POSTFIX; \
76 if (-a != 0.1 ## POSTFIX) \
77 abort(); \
80 #define FRACT_SAT_NEG(TYPE,POSTFIX) \
81 { TYPE a = -0.5 ## POSTFIX - 0.5 ## POSTFIX; \
82 if (-a != 1.0 ## POSTFIX) \
83 abort(); \
86 #define UNS_NEG(TYPE,POSTFIX) \
87 { TYPE a = 0.0 ## POSTFIX; \
88 if (-a != 0.0 ## POSTFIX) \
89 abort(); \
92 #define FRACT_SAT_UNS_NEG(TYPE,POSTFIX) \
93 { TYPE a = 0.5 ## POSTFIX; \
94 if (-a != 0.0 ## POSTFIX) \
95 abort(); \
98 #define LOGNEG(TYPE,POSTFIX) \
99 { TYPE a = 0.0 ## POSTFIX; \
100 TYPE b = 0.1 ## POSTFIX; \
101 if (!a != 1) \
102 abort(); \
103 if (!b != 0) \
104 abort(); \
107 int main ()
109 FRACT_INCDEC(short _Fract, hr);
110 FRACT_INCDEC(_Fract, r);
111 FRACT_INCDEC(long _Fract, lr);
112 FRACT_INCDEC(long long _Fract, llr);
113 FRACT_INCDEC(_Sat short _Fract, hr);
114 FRACT_INCDEC(_Sat _Fract, r);
115 FRACT_INCDEC(_Sat long _Fract, lr);
116 FRACT_INCDEC(_Sat long long _Fract, llr);
118 INCDEC(short _Accum, hk);
119 INCDEC(_Accum, k);
120 INCDEC(long _Accum, lk);
121 INCDEC(long long _Accum, llk);
122 INCDEC(unsigned short _Accum, uhk);
123 INCDEC(unsigned _Accum, uk);
124 INCDEC(unsigned long _Accum, ulk);
125 INCDEC(unsigned long long _Accum, ullk);
126 INCDEC(_Sat short _Accum, hk);
127 INCDEC(_Sat _Accum, k);
128 INCDEC(_Sat long _Accum, lk);
129 INCDEC(_Sat long long _Accum, llk);
130 INCDEC(_Sat unsigned short _Accum, uhk);
131 INCDEC(_Sat unsigned _Accum, uk);
132 INCDEC(_Sat unsigned long _Accum, ulk);
133 INCDEC(_Sat unsigned long long _Accum, ullk);
135 FRACT_SAT_INCDEC(_Sat short _Fract, hr);
136 FRACT_SAT_INCDEC(_Sat _Fract, r);
137 FRACT_SAT_INCDEC(_Sat long _Fract, lr);
138 FRACT_SAT_INCDEC(_Sat long long _Fract, llr);
140 FRACT_SAT_UNS_INCDEC(_Sat unsigned short _Fract, uhr);
141 FRACT_SAT_UNS_INCDEC(_Sat unsigned _Fract, ur);
142 FRACT_SAT_UNS_INCDEC(_Sat unsigned long _Fract, ulr);
143 FRACT_SAT_UNS_INCDEC(_Sat unsigned long long _Fract, ullr);
145 PLUS(short _Fract, hr);
146 PLUS(_Fract, r);
147 PLUS(long _Fract, lr);
148 PLUS(long long _Fract, llr);
149 PLUS(unsigned short _Fract, uhr);
150 PLUS(unsigned _Fract, ur);
151 PLUS(unsigned long _Fract, ulr);
152 PLUS(unsigned long long _Fract, ullr);
153 PLUS(_Sat short _Fract, hr);
154 PLUS(_Sat _Fract, r);
155 PLUS(_Sat long _Fract, lr);
156 PLUS(_Sat long long _Fract, llr);
157 PLUS(_Sat unsigned short _Fract, uhr);
158 PLUS(_Sat unsigned _Fract, ur);
159 PLUS(_Sat unsigned long _Fract, ulr);
160 PLUS(_Sat unsigned long long _Fract, ullr);
161 PLUS(short _Accum, hk);
162 PLUS(_Accum, k);
163 PLUS(long _Accum, lk);
164 PLUS(long long _Accum, llk);
165 PLUS(unsigned short _Accum, uhk);
166 PLUS(unsigned _Accum, uk);
167 PLUS(unsigned long _Accum, ulk);
168 PLUS(unsigned long long _Accum, ullk);
169 PLUS(_Sat short _Accum, hk);
170 PLUS(_Sat _Accum, k);
171 PLUS(_Sat long _Accum, lk);
172 PLUS(_Sat long long _Accum, llk);
173 PLUS(_Sat unsigned short _Accum, uhk);
174 PLUS(_Sat unsigned _Accum, uk);
175 PLUS(_Sat unsigned long _Accum, ulk);
176 PLUS(_Sat unsigned long long _Accum, ullk);
178 NEG(short _Fract, hr);
179 NEG(_Fract, r);
180 NEG(long _Fract, lr);
181 NEG(long long _Fract, llr);
182 NEG(_Sat short _Fract, hr);
183 NEG(_Sat _Fract, r);
184 NEG(_Sat long _Fract, lr);
185 NEG(_Sat long long _Fract, llr);
186 NEG(short _Accum, hk);
187 NEG(_Accum, k);
188 NEG(long _Accum, lk);
189 NEG(long long _Accum, llk);
190 NEG(_Sat short _Accum, hk);
191 NEG(_Sat _Accum, k);
192 NEG(_Sat long _Accum, lk);
193 NEG(_Sat long long _Accum, llk);
195 FRACT_SAT_NEG(_Sat short _Fract, hr);
196 FRACT_SAT_NEG(_Sat _Fract, r);
197 FRACT_SAT_NEG(_Sat long _Fract, lr);
198 FRACT_SAT_NEG(_Sat long long _Fract, llr);
200 UNS_NEG(short _Fract, hr);
201 UNS_NEG(_Fract, r);
202 UNS_NEG(long _Fract, lr);
203 UNS_NEG(long long _Fract, llr);
204 UNS_NEG(_Sat short _Fract, hr);
205 UNS_NEG(_Sat _Fract, r);
206 UNS_NEG(_Sat long _Fract, lr);
207 UNS_NEG(_Sat long long _Fract, llr);
208 UNS_NEG(short _Accum, hk);
209 UNS_NEG(_Accum, k);
210 UNS_NEG(long _Accum, lk);
211 UNS_NEG(long long _Accum, llk);
212 UNS_NEG(_Sat short _Accum, hk);
213 UNS_NEG(_Sat _Accum, k);
214 UNS_NEG(_Sat long _Accum, lk);
215 UNS_NEG(_Sat long long _Accum, llk);
217 FRACT_SAT_UNS_NEG(_Sat unsigned short _Fract, uhr);
218 FRACT_SAT_UNS_NEG(_Sat unsigned _Fract, ur);
219 FRACT_SAT_UNS_NEG(_Sat unsigned long _Fract, ulr);
220 FRACT_SAT_UNS_NEG(_Sat unsigned long long _Fract, ullr);
222 LOGNEG(short _Fract, hr);
223 LOGNEG(_Fract, r);
224 LOGNEG(long _Fract, lr);
225 LOGNEG(long long _Fract, llr);
226 LOGNEG(unsigned short _Fract, uhr);
227 LOGNEG(unsigned _Fract, ur);
228 LOGNEG(unsigned long _Fract, ulr);
229 LOGNEG(unsigned long long _Fract, ullr);
230 LOGNEG(_Sat short _Fract, hr);
231 LOGNEG(_Sat _Fract, r);
232 LOGNEG(_Sat long _Fract, lr);
233 LOGNEG(_Sat long long _Fract, llr);
234 LOGNEG(_Sat unsigned short _Fract, uhr);
235 LOGNEG(_Sat unsigned _Fract, ur);
236 LOGNEG(_Sat unsigned long _Fract, ulr);
237 LOGNEG(_Sat unsigned long long _Fract, ullr);
238 LOGNEG(short _Accum, hk);
239 LOGNEG(_Accum, k);
240 LOGNEG(long _Accum, lk);
241 LOGNEG(long long _Accum, llk);
242 LOGNEG(unsigned short _Accum, uhk);
243 LOGNEG(unsigned _Accum, uk);
244 LOGNEG(unsigned long _Accum, ulk);
245 LOGNEG(unsigned long long _Accum, ullk);
246 LOGNEG(_Sat short _Accum, hk);
247 LOGNEG(_Sat _Accum, k);
248 LOGNEG(_Sat long _Accum, lk);
249 LOGNEG(_Sat long long _Accum, llk);
250 LOGNEG(_Sat unsigned short _Accum, uhk);
251 LOGNEG(_Sat unsigned _Accum, uk);
252 LOGNEG(_Sat unsigned long _Accum, ulk);
253 LOGNEG(_Sat unsigned long long _Accum, ullk);
255 return 0;