OSDN Git Service

* testsuite/decimal/binary-arith.cc: Fix directive to skip test.
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / decimal / incdec.cc
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.5  Increment and decrement operators (decimal32).
21 // ISO/IEC TR 24733  3.2.3.5  Increment and decrement operators (decimal64).
22 // ISO/IEC TR 24733  3.2.4.5  Increment and decrement operators (decimal128).
23
24 #include <decimal/decimal>
25 #include <testsuite_hooks.h>
26
27 // Use extension to replace implicit long long conversion with function call.
28 #define LONGLONG(X) decimal_to_long_long(X)
29
30 using namespace std::decimal;
31
32 void
33 incdec32 (void)
34 {
35   int ival;
36   std::decimal::decimal32 a(11), b, c;
37
38   // Verify that we get the expected value of b after assignment.
39   b = a;
40   ival = LONGLONG (b); VERIFY (ival == 11);
41
42   // Check that the increment and decrement operators change the value
43   // of the original class.
44   b = a;
45   ++b;
46   ival = LONGLONG (b); VERIFY (ival == 12);
47
48   b = a;
49   b++;
50   ival = LONGLONG (b); VERIFY (ival == 12);
51
52   b = a;
53   --b;
54   ival = LONGLONG (b); VERIFY (ival == 10);
55
56   b = a;
57   b--;
58   ival = LONGLONG (b); VERIFY (ival == 10);
59
60   // Check that the increment and decrement operators return the
61   // correct value.
62   b = a;
63   c = ++b;
64   ival = LONGLONG (c); VERIFY (ival == 12);
65
66   b = a;
67   c = b++;
68   ival = LONGLONG (c); VERIFY (ival == 11);
69
70   b = a;
71   c = --b;
72   ival = LONGLONG (c); VERIFY (ival == 10);
73
74   b = a;
75   c = b--;
76   ival = LONGLONG (c); VERIFY (ival == 11);
77 }
78
79 void
80 incdec64 (void)
81 {
82   int ival;
83   std::decimal::decimal64 a(11), b, c;
84
85   // Verify that we get the expected value of b after assignment.
86   b = a;
87   ival = LONGLONG (b); VERIFY (ival == 11);
88
89   // Check that the increment and decrement operators change the value
90   // of the original class.
91   b = a;
92   ++b;
93   ival = LONGLONG (b); VERIFY (ival == 12);
94
95   b = a;
96   b++;
97   ival = LONGLONG (b); VERIFY (ival == 12);
98
99   b = a;
100   --b;
101   ival = LONGLONG (b); VERIFY (ival == 10);
102
103   b = a;
104   b--;
105   ival = LONGLONG (b); VERIFY (ival == 10);
106
107   // Check that the increment and decrement operators return the
108   // correct value.
109   b = a;
110   c = ++b;
111   ival = LONGLONG (c); VERIFY (ival == 12);
112
113   b = a;
114   c = b++;
115   ival = LONGLONG (c); VERIFY (ival == 11);
116
117   b = a;
118   c = --b;
119   ival = LONGLONG (c); VERIFY (ival == 10);
120
121   b = a;
122   c = b--;
123   ival = LONGLONG (c); VERIFY (ival == 11);
124 }
125
126 void
127 incdec128 (void)
128 {
129   int ival;
130   std::decimal::decimal128 a(11), b, c;
131
132   // Verify that we get the expected value of b after assignment.
133   b = a;
134   ival = LONGLONG (b); VERIFY (ival == 11);
135
136   // Check that the increment and decrement operators change the value
137   // of the original class.
138   b = a;
139   ++b;
140   ival = LONGLONG (b); VERIFY (ival == 12);
141
142   b = a;
143   b++;
144   ival = LONGLONG (b); VERIFY (ival == 12);
145
146   b = a;
147   --b;
148   ival = LONGLONG (b); VERIFY (ival == 10);
149
150   b = a;
151   b--;
152   ival = LONGLONG (b); VERIFY (ival == 10);
153
154   // Check that the increment and decrement operators return the
155   // correct value.
156   b = a;
157   c = ++b;
158   ival = LONGLONG (c); VERIFY (ival == 12);
159
160   b = a;
161   c = b++;
162   ival = LONGLONG (c); VERIFY (ival == 11);
163
164   b = a;
165   c = --b;
166   ival = LONGLONG (c); VERIFY (ival == 10);
167
168   b = a;
169   c = b--;
170   ival = LONGLONG (c); VERIFY (ival == 11);
171 }
172
173 int
174 main ()
175 {
176   incdec32 ();
177   incdec64 ();
178   incdec128 ();
179 }