OSDN Git Service

8c20a52ee69330727f1ac5daca1c0804eda6c036
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / dfp / convert-bfp-fold.c
1 /* { dg-options "-std=gnu99 -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 }