1// Copyright (C) 2009 Free Software Foundation, Inc.
2//
3// This file is part of the GNU ISO C++ Library.  This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3.  If not see
16// <http://www.gnu.org/licenses/>.
17
18// { dg-require-effective-target dfp }
19
20// ISO/IEC TR 24733  3.2.2.3  Conversion from integral type (decimal32).
21// ISO/IEC TR 24733  3.2.3.3  Conversion from integral type (decimal64).
22// ISO/IEC TR 24733  3.2.4.3  Conversion from integral type (decimal128).
23
24#include <decimal/decimal>
25#include <testsuite_hooks.h>
26
27using namespace std::decimal;
28
29void
30conversion_from_integral_p32 ()
31{
32  decimal32 d;
33  decimal32 from_si (1);
34  decimal32 from_ui (2U);
35  decimal32 from_sl (3L);
36  decimal32 from_ul (4UL);
37  decimal32 from_sll (5LL);
38  decimal32 from_ull (6ULL);
39
40  d++; VERIFY (from_si == d);
41  d++; VERIFY (from_ui == d);
42  d++; VERIFY (from_sl == d);
43  d++; VERIFY (from_ul == d);
44  d++; VERIFY (from_sll == d);
45  d++; VERIFY (from_ull == d);
46
47  from_si = 7;
48  d++; VERIFY (from_si == d);
49  from_ui = 8U;
50  d++; VERIFY (from_ui == d);
51  from_sl = 9L;
52  d++; VERIFY (from_sl == d);
53  from_ul = 10UL;
54  d++; VERIFY (from_ul == d);
55  from_sll = 11LL;
56  d++; VERIFY (from_sll == d);
57  from_ull = 12ULL;
58  d++; VERIFY (from_ull == d);
59}
60
61void
62conversion_from_integral_m32 ()
63{
64  decimal32 d;
65  decimal32 from_si (-1);
66  decimal32 from_sl (-2L);
67  decimal32 from_sll (-3LL);
68
69  d--; VERIFY (from_si == d);
70  d--; VERIFY (from_sl == d);
71  d--; VERIFY (from_sll == d);
72
73  from_si = -4;
74  d--; VERIFY (from_si == d);
75  from_sl = -5L;
76  d--; VERIFY (from_sl == d);
77  from_sll = -6LL;
78  d--; VERIFY (from_sll == d);
79}
80
81void
82conversion_from_integral_p64 ()
83{
84  decimal64 d;
85  decimal64 from_si (1);
86  decimal64 from_ui (2U);
87  decimal64 from_sl (3L);
88  decimal64 from_ul (4UL);
89  decimal64 from_sll (5LL);
90  decimal64 from_ull (6ULL);
91
92  d++; VERIFY (from_si == d);
93  d++; VERIFY (from_ui == d);
94  d++; VERIFY (from_sl == d);
95  d++; VERIFY (from_ul == d);
96  d++; VERIFY (from_sll == d);
97  d++; VERIFY (from_ull == d);
98
99  from_si = 7;
100  d++; VERIFY (from_si == d);
101  from_ui = 8U;
102  d++; VERIFY (from_ui == d);
103  from_sl = 9L;
104  d++; VERIFY (from_sl == d);
105  from_ul = 10UL;
106  d++; VERIFY (from_ul == d);
107  from_sll = 11LL;
108  d++; VERIFY (from_sll == d);
109  from_ull = 12ULL;
110  d++; VERIFY (from_ull == d);
111}
112
113void
114conversion_from_integral_m64 ()
115{
116  decimal64 d;
117  decimal64 from_si (-1);
118  decimal64 from_sl (-2L);
119  decimal64 from_sll (-3LL);
120
121  d--; VERIFY (from_si == d);
122  d--; VERIFY (from_sl == d);
123  d--; VERIFY (from_sll == d);
124
125  from_si = -4;
126  d--; VERIFY (from_si == d);
127  from_sl = -5L;
128  d--; VERIFY (from_sl == d);
129  from_sll = -6LL;
130  d--; VERIFY (from_sll == d);
131}
132
133void
134conversion_from_integral_p128 ()
135{
136  decimal128 d;
137  decimal128 from_si (1);
138  decimal128 from_ui (2U);
139  decimal128 from_sl (3L);
140  decimal128 from_ul (4UL);
141  decimal128 from_sll (5LL);
142  decimal128 from_ull (6ULL);
143
144  d++; VERIFY (from_si == d);
145  d++; VERIFY (from_ui == d);
146  d++; VERIFY (from_sl == d);
147  d++; VERIFY (from_ul == d);
148  d++; VERIFY (from_sll == d);
149  d++; VERIFY (from_ull == d);
150
151  from_si = 7;
152  d++; VERIFY (from_si == d);
153  from_ui = 8U;
154  d++; VERIFY (from_ui == d);
155  from_sl = 9L;
156  d++; VERIFY (from_sl == d);
157  from_ul = 10UL;
158  d++; VERIFY (from_ul == d);
159  from_sll = 11LL;
160  d++; VERIFY (from_sll == d);
161  from_ull = 12ULL;
162}
163
164void
165conversion_from_integral_m128 ()
166{
167  decimal128 d;
168  decimal128 from_si (-1);
169  decimal128 from_sl (-2L);
170  decimal128 from_sll (-3LL);
171
172  d--; VERIFY (from_si == d);
173  d--; VERIFY (from_sl == d);
174  d--; VERIFY (from_sll == d);
175
176  from_si = -4;
177  d--; VERIFY (from_si == d);
178  from_sl = -5L;
179  d--; VERIFY (from_sl == d);
180  from_sll = -6LL;
181  d--; VERIFY (from_sll == d);
182}
183
184int
185main ()
186{
187  conversion_from_integral_p32 ();
188  conversion_from_integral_m32 ();
189  conversion_from_integral_p64 ();
190  conversion_from_integral_m64 ();
191  conversion_from_integral_p128 ();
192  conversion_from_integral_m128 ();
193}
194