OSDN Git Service

45efe32a5e88a879244ca973b56dedd686376b8b
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / dfp / convert-int.c
1 /* { dg-options "-std=gnu99 -O0" } */
2
3 /* N1150 5.1 Conversion between decimal floating types and integer.
4    C99 6.3.1.4(1a) New.  */
5
6 extern void abort (void);
7 int failcnt;
8
9 #ifdef DBG
10 extern int printf (const char *, ...);
11 #define FAILURE { printf ("failed at line %d\n", __LINE__); failcnt++; }
12 #else
13 #define FAILURE abort ();
14 #endif
15
16 _Decimal32 d32;
17 _Decimal64 d64;
18 _Decimal128 d128;
19 unsigned int ui;
20 unsigned long ul;
21 unsigned long long ull;
22 int si;
23 long sl;
24 long long sll;
25 _Bool b;
26
27 void
28 init_dfp_1 (void)
29 {
30   d32 = 456.789df;
31   d64 = 23.456789dd;
32   d128 = 1234.5678dl;
33 }
34 void
35 init_dfp_2 (void)
36 {
37   d32 = 1.23df;
38   d64 = -3.4dd;
39   d128 = 0.00003dl;
40 }
41
42 void
43 init_dfp_3 (void)
44 {
45   d32 = 0.0DF;
46   d64 = 0.0DD;
47   d128 = 0.0DL;
48 }
49
50 void
51 init_unsigned_int (void)
52 {
53   ui = 987U;
54   ul = 345678UL;
55   ull = 1234567ULL;
56 }
57
58 void
59 init_signed_int (void)
60 {
61   si = -987;
62   sl = -345678;
63   sll = -1234567;
64 }
65
66 int
67 main ()
68 {
69   /* C99 Section 6.7.2 Type specifiers.  Type _Bool is 
70      mentioned in this section.  Conversions between 
71      _Bool and DFP types.  */
72
73   /* Decimal float to unsigned integer.  */
74   init_dfp_1 ();
75
76   ui = d32;
77   if (ui != 456U)
78     FAILURE
79   ul = d32;
80   if (ul != 456UL)
81     FAILURE
82   ull = d32;
83   if (ull != 456ULL)
84     FAILURE
85
86   ui = d64;
87   if (ui != 23U)
88     FAILURE
89   ul = d64;
90   if (ul != 23UL)
91     FAILURE
92   ull = d64;
93   if (ull != 23ULL)
94     FAILURE
95
96   ui = d128;
97   if (ui != 1234U)
98     FAILURE
99   ul = d128;
100   if (ul != 1234UL)
101     FAILURE
102   ull = d128;
103   if (ull != 1234ULL)
104     FAILURE
105
106   /* Decimal float to signed integer.  */
107
108   /* Decimal float to _Bool.  */
109   init_dfp_2 ();
110
111   b = d32;
112   if (!b)
113     FAILURE
114   b = d64;
115   if (!b)
116     FAILURE
117   b = d128;
118   if (!b)
119     FAILURE
120
121   /* Unsigned integer to decimal float.  */
122   init_unsigned_int ();
123
124   d32 = ui;
125   if (d32 != 987.0df)
126     FAILURE
127   d32 = ul;
128   if (d32 != 345678.0df)
129     FAILURE
130   d32 = ull;
131   if (d32 != 1234567.df)
132     FAILURE
133
134   d64 = ui;
135   if (d64 != 987.0dd)
136     FAILURE
137   d64 = ul;
138   if (d64 != 345678.0dd)
139     FAILURE
140   d64 = ull;
141   if (d64 != 1234567.dd)
142     FAILURE
143
144   d128 = ui;
145   if (d128 != 987.0dl)
146     FAILURE
147   d128 = ul;
148   if (d128 != 345678.0dl)
149     FAILURE
150   d128 = ull;
151   if (d128 != 1234567.dl)
152     FAILURE
153
154   /* Signed integer to decimal float.  */
155   init_signed_int ();
156
157   d32 = si;
158   if (d32 != -987.0df)
159     FAILURE
160   d32 = sl;
161   if (d32 != -345678.0df)
162     FAILURE
163   d32 = sll;
164   if (d32 != -1234567.df)
165     FAILURE
166
167   d64 = si;
168   if (d64 != -987.0dd)
169     FAILURE
170   d64 = sl;
171   if (d64 != -345678.0dd)
172     FAILURE
173   d64 = sll;
174   if (d64 != -1234567.dd)
175     FAILURE
176
177   d128 = si;
178   if (d128 != -987.0dl)
179     FAILURE
180   d128 = sl;
181   if (d128 != -345678.0dl)
182     FAILURE
183   d128 = sll;
184   if (d128 != -1234567.dl)
185     FAILURE
186
187   /* _Bool to decimal float.  */
188   init_dfp_3 ();
189   
190   b = d32;
191   if (b)
192     FAILURE
193   b = d64;
194   if (b)
195     FAILURE
196   b = d128;
197   if (b)
198     FAILURE
199
200   if (failcnt != 0)
201     abort ();
202
203   return 0;
204 }