41a04febf6188808373d1fb0f869e0f12989ce57
[gcc.git] / gcc / testsuite / gcc.dg / dfp / convert-bfp-fold.c
1 /* { dg-options "-O2" } */
2
3 /* N1150 5.2 Conversions among decimal floating types and between
4 decimal floating types and generic floating types.
5 C99 6.3.1.5(4) Conversions, arithmetic operands, real floating types. */
6
7 _Decimal32 d32;
8 _Decimal64 d64;
9 _Decimal128 d128;
10 float sf;
11 double df;
12 long double tf;
13
14 extern void link_error (void);
15
16 int
17 main ()
18 {
19 /* Conversions from decimal float to binary float. */
20
21 /* Conversions from _Decimal32. */
22 d32 = 2.0df;
23 sf = d32;
24 if (sf != 2.0f)
25 link_error ();
26
27 df = d32;
28 if (df != 2.0)
29 link_error ();
30
31 tf = d32;
32 if (tf != 2.0l)
33 link_error ();
34
35 /* Conversions from _Decimal64. */
36 d64 = -7.0dd;
37 sf = d64;
38 if (sf != -7.0f)
39 link_error ();
40
41 df = d64;
42 if (df != -7.0)
43 link_error ();
44
45 tf = d64;
46 if (tf != -7.0l)
47 link_error ();
48
49 /* Conversions from _Decimal128. */
50 d128 = 30.0dl;
51 sf = d128;
52 if (sf != 30.0f)
53 link_error ();
54
55 df = d128;
56 if (df != 30.0)
57 link_error ();
58
59 df = d128;
60 if (df != 30.0l)
61 link_error ();
62
63 /* Conversions from binary float to decimal float. */
64 sf = 30.0f;
65 d128 = sf;
66 if (d128 != 30.0dl)
67 link_error ();
68
69 d64 = sf;
70 if (d64 != 30.0dd)
71 link_error ();
72
73 d32 = sf;
74 if (d32 != 30.0df)
75 link_error ();
76
77 df = -2.0;
78 d128 = df;
79 if (d128 != -2.0dl)
80 link_error ();
81
82 d64 = df;
83 if (d64 != -2.0dd)
84 link_error ();
85
86 d32 = df;
87 if (d32 != -2.0df)
88 link_error ();
89
90 tf = -22.0l;
91 d128 = tf;
92 if (d128 != -22.0dl)
93 link_error ();
94
95 d64 = tf;
96 if (d64 != -22.0dd)
97 link_error ();
98
99 d32 = tf;
100 if (d32 != -22.0df)
101 link_error ();
102
103 /* 2**(-11) = 0.00048828125. */
104 d128 = 0.000488281251dl;
105 sf = d128;
106 if (sf != 0.00048828125f)
107 link_error ();
108 /* 2**(-25) = 0.298023223876953125E-7. */
109 d128 = 2.98023223876953125E-8dl;
110 df = d128;
111 if (df < (2.9802322387695312e-08 - 0.00000000001)
112 || df > (2.9802322387695312e-08 + 0.00000000001))
113 link_error ();
114
115 return 0;
116 }