1 /* { dg-options "-std=gnu99" } */
3 /* C99 6.5.16 Assignment operators.
4 Verify the compound assignment operator for decimal float types,
5 using it with other decimal float types, integers, and other binary
6 float types cast to decimal float types. */
8 extern void abort (void);
10 #define OPERATE(OPRD1,OPRT,OPRD2,RLT) \
11 if (( OPRD1 OPRT OPRD2 )!= RLT) \
14 #define DECIMAL_COMPOUND_ASSIGNMENT(TYPE, OPRD) \
16 _Decimal##TYPE d = OPRD; \
17 OPERATE(d,+=,1,(OPRD + 1)); \
19 OPERATE(d,+=,0,OPRD); \
21 OPERATE(d,+=,(-1),(OPRD - 1)); \
23 OPERATE(d,+=,d32a,(OPRD + d32a)); \
25 OPERATE(d,+=,d64a,(OPRD + d64a)); \
27 OPERATE(d,+=,d128a,(OPRD + d128a)); \
29 OPERATE(d,+=,(_Decimal##TYPE)1.1,(OPRD + (_Decimal##TYPE)1.1)); \
31 OPERATE(d,+=,(_Decimal##TYPE)2.2f,(OPRD + (_Decimal##TYPE)2.2f)); \
33 OPERATE(d,-=,1,(OPRD - 1)); \
35 OPERATE(d,-=,0,OPRD); \
37 OPERATE(d,-=,(-1),(OPRD + 1)); \
39 OPERATE(d,-=,d32a,OPRD-d32a); \
41 OPERATE(d,-=,d64a,OPRD-d64a); \
43 OPERATE(d,-=,d128a,OPRD-d128a); \
49 _Decimal32 d32
= 1.23456fd
, d32a
= 1.2df
;
50 _Decimal64 d64
= 23.456789dd
, d64a
= 2.8dd
;
51 _Decimal128 d128
= 345.67890123456789ld
, d128a
= 4.7dl
;
53 DECIMAL_COMPOUND_ASSIGNMENT(32, d32
);
54 DECIMAL_COMPOUND_ASSIGNMENT(64, d64
);
55 DECIMAL_COMPOUND_ASSIGNMENT(128, d128
);