159 lines
4.2 KiB
C
159 lines
4.2 KiB
C
/* { dg-do run } */
|
|
/* { dg-options "-std=gnu99" } */
|
|
|
|
/* N1169 6.5.7 - Bitwise shift operands.
|
|
C99 6.5.5 Multiplicative operators.
|
|
C99 6.5.6 Additive operators.
|
|
C99 6.5.7 Bitwise shift operators.
|
|
C99 6.5.8 Relational operators.
|
|
C99 6.5.9 Equality operators.
|
|
C99 6.5.16 Assignment operators.
|
|
|
|
Check binary operators + - * / << >> < <= >= > == != += -= *= /= <<= >>=. */
|
|
|
|
extern void abort (void);
|
|
|
|
#define BINARY(TYPE,POSTFIX) \
|
|
{ TYPE a = 0.5 ## POSTFIX; \
|
|
TYPE b = 0.25 ## POSTFIX; \
|
|
if (a + b != 0.75 ## POSTFIX) \
|
|
abort(); \
|
|
if (a - b != 0.25 ## POSTFIX) \
|
|
abort(); \
|
|
if (a * b != 0.125 ## POSTFIX) \
|
|
abort(); \
|
|
if (b / a != 0.5 ## POSTFIX) \
|
|
abort(); \
|
|
if (b << 1 != a) \
|
|
abort(); \
|
|
if (a >> 1 != b) \
|
|
abort(); \
|
|
if (a < b != 0) \
|
|
abort(); \
|
|
if (a <= b != 0) \
|
|
abort(); \
|
|
if (a > b != 1) \
|
|
abort(); \
|
|
if (a >= b != 1) \
|
|
abort(); \
|
|
if (a == b != 0) \
|
|
abort(); \
|
|
if (a != b != 1) \
|
|
abort(); \
|
|
a += b; \
|
|
if (a != 0.75 ## POSTFIX) \
|
|
abort(); \
|
|
a -= b; \
|
|
if (a != 0.5 ## POSTFIX) \
|
|
abort(); \
|
|
a *= b; \
|
|
if (a != 0.125 ## POSTFIX) \
|
|
abort(); \
|
|
a /= b; \
|
|
if (a != 0.5 ## POSTFIX) \
|
|
abort(); \
|
|
a >>= 2; \
|
|
if (a != 0.125 ## POSTFIX) \
|
|
abort(); \
|
|
a <<= 1; \
|
|
if (a != 0.25 ## POSTFIX) \
|
|
abort(); \
|
|
}
|
|
|
|
#define FRACT_SAT_BINARY(TYPE,POSTFIX) \
|
|
{ TYPE a = 0.7 ## POSTFIX; \
|
|
TYPE b = 0.9 ## POSTFIX; \
|
|
if (a + b != 1.0 ## POSTFIX) \
|
|
abort(); \
|
|
a = -0.7 ## POSTFIX; \
|
|
b = -0.9 ## POSTFIX; \
|
|
if (a + b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
|
abort(); \
|
|
a = 0.7 ## POSTFIX; \
|
|
b = -0.9 ## POSTFIX; \
|
|
if (a - b != 1.0 ## POSTFIX) \
|
|
abort(); \
|
|
a = -0.7 ## POSTFIX; \
|
|
b = 0.9 ## POSTFIX; \
|
|
if (a - b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
|
abort(); \
|
|
a = -0.5 ## POSTFIX - 0.5 ## POSTFIX; \
|
|
if (a * a != 1.0 ## POSTFIX) \
|
|
abort(); \
|
|
a = 0.8 ## POSTFIX; \
|
|
b = 0.5 ## POSTFIX; \
|
|
if (a / b != 1.0 ## POSTFIX) \
|
|
abort(); \
|
|
a = -0.8 ## POSTFIX; \
|
|
b = 0.5 ## POSTFIX; \
|
|
if (a / b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
|
abort(); \
|
|
a = 0.1 ## POSTFIX; \
|
|
if (a << 4 != 1.0 ## POSTFIX) \
|
|
abort(); \
|
|
a = -0.8 ## POSTFIX; \
|
|
if (a << 4 != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
|
abort(); \
|
|
}
|
|
|
|
#define FRACT_SAT_UNS_BINARY(TYPE,POSTFIX) \
|
|
{ TYPE a = 0.7 ## POSTFIX; \
|
|
TYPE b = 0.9 ## POSTFIX; \
|
|
if (a + b != 1.0 ## POSTFIX) \
|
|
abort(); \
|
|
if (a - b != 0.0 ## POSTFIX) \
|
|
abort(); \
|
|
if (b / a != 1.0 ## POSTFIX) \
|
|
abort(); \
|
|
if (a << 1 != 1.0 ## POSTFIX) \
|
|
abort(); \
|
|
}
|
|
|
|
int main ()
|
|
{
|
|
BINARY(short _Fract, hr);
|
|
BINARY(_Fract, r);
|
|
BINARY(long _Fract, lr);
|
|
BINARY(long long _Fract, llr);
|
|
BINARY(unsigned short _Fract, uhr);
|
|
BINARY(unsigned _Fract, ur);
|
|
BINARY(unsigned long _Fract, ulr);
|
|
BINARY(unsigned long long _Fract, ullr);
|
|
BINARY(_Sat short _Fract, hr);
|
|
BINARY(_Sat _Fract, r);
|
|
BINARY(_Sat long _Fract, lr);
|
|
BINARY(_Sat long long _Fract, llr);
|
|
BINARY(_Sat unsigned short _Fract, uhr);
|
|
BINARY(_Sat unsigned _Fract, ur);
|
|
BINARY(_Sat unsigned long _Fract, ulr);
|
|
BINARY(_Sat unsigned long long _Fract, ullr);
|
|
BINARY(short _Accum, hk);
|
|
BINARY(_Accum, k);
|
|
BINARY(long _Accum, lk);
|
|
BINARY(long long _Accum, llk);
|
|
BINARY(unsigned short _Accum, uhk);
|
|
BINARY(unsigned _Accum, uk);
|
|
BINARY(unsigned long _Accum, ulk);
|
|
BINARY(unsigned long long _Accum, ullk);
|
|
BINARY(_Sat short _Accum, hk);
|
|
BINARY(_Sat _Accum, k);
|
|
BINARY(_Sat long _Accum, lk);
|
|
BINARY(_Sat long long _Accum, llk);
|
|
BINARY(_Sat unsigned short _Accum, uhk);
|
|
BINARY(_Sat unsigned _Accum, uk);
|
|
BINARY(_Sat unsigned long _Accum, ulk);
|
|
BINARY(_Sat unsigned long long _Accum, ullk);
|
|
|
|
FRACT_SAT_BINARY(_Sat short _Fract, hr);
|
|
FRACT_SAT_BINARY(_Sat _Fract, r);
|
|
FRACT_SAT_BINARY(_Sat long _Fract, lr);
|
|
FRACT_SAT_BINARY(_Sat long long _Fract, llr);
|
|
|
|
FRACT_SAT_UNS_BINARY(_Sat unsigned short _Fract, uhr);
|
|
FRACT_SAT_UNS_BINARY(_Sat unsigned _Fract, ur);
|
|
FRACT_SAT_UNS_BINARY(_Sat unsigned long _Fract, ulr);
|
|
FRACT_SAT_UNS_BINARY(_Sat unsigned long long _Fract, ullr);
|
|
|
|
return 0;
|
|
}
|