OSDN Git Service

3cf3f7d00745eb5fc9e21fb6022e0245ab72b9b5
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / decimal / mixed-mode_neg.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-do compile }
19 // { dg-require-effective-target-dfp }
20
21 // Test that binary operators do not accept mixed decimal and generic
22 // floating-point operands.  This isn't explicity prohibited in
23 // ISO/IEC TR 24733 but it is prohibited in C, and in C++ there should
24 // not be an implicit conversion from a decimal floating-point type to
25 // a generic floating-point type.
26
27 #include <decimal/decimal>
28 #include <testsuite_hooks.h>
29
30 using namespace std::decimal;
31
32 decimal32 a32, b32, c32;
33 decimal64 a64, b64, c64;
34 decimal128 a128, b128, c128;
35 float f;
36 double d;
37 long double ld;
38 bool b1, b2, b3, b4, b5, b6;
39
40 void
41 bad_add (void)
42 {
43   a32 = b32 + f;        // { dg-error "error" }
44   a32 = ld + b32;       // { dg-error "error" }
45   a64 = b64 + d;        // { dg-error "error" }
46   a64 = ld + b64;       // { dg-error "error" }
47   a128 = b128 + ld;     // { dg-error "error" }
48   a128 = d + b128;      // { dg-error "error" }
49 }
50
51 void
52 bad_subtract (void)
53 {
54   a32 = b32 - f;        // { dg-error "error" }
55   a32 = ld - b32;       // { dg-error "error" }
56   a64 = b64 - d;        // { dg-error "error" }
57   a64 = ld - b64;       // { dg-error "error" }
58   a128 = b128 - ld;     // { dg-error "error" }
59   a128 = d - b128;      // { dg-error "error" }
60 }
61
62 void
63 bad_multiply (void)
64 {
65   a32 = b32 * f;        // { dg-error "error" }
66   a32 = ld * b32;       // { dg-error "error" }
67   a64 = b64 * d;        // { dg-error "error" }
68   a64 = ld * b64;       // { dg-error "error" }
69   a128 = b128 * ld;     // { dg-error "error" }
70   a128 = d * b128;      // { dg-error "error" }
71 }
72
73 void
74 bad_divide (void)
75 {
76   a32 = b32 / f;        // { dg-error "error" }
77   a32 = ld / b32;       // { dg-error "error" }
78   a64 = b64 / d;        // { dg-error "error" }
79   a64 = ld / b64;       // { dg-error "error" }
80   a128 = b128 / ld;     // { dg-error "error" }
81   a128 = d / b128;      // { dg-error "error" }
82 }
83
84 void
85 bad_eq (void)
86 {
87   b1 = b32 == f;        // { dg-error "error" }
88   b2 = ld == b32;       // { dg-error "error" }
89   b3 = b64 == d;        // { dg-error "error" }
90   b4 = ld == b64;       // { dg-error "error" }
91   b5 = b128 == ld;      // { dg-error "error" }
92   b6 = d == b128;       // { dg-error "error" }
93 }
94
95 void
96 bad_ne (void)
97 {
98   b1 = b32 != f;        // { dg-error "error" }
99   b2 = ld != b32;       // { dg-error "error" }
100   b3 = b64 != d;        // { dg-error "error" }
101   b4 = ld != b64;       // { dg-error "error" }
102   b5 = b128 != ld;      // { dg-error "error" }
103   b6 = d != b128;       // { dg-error "error" }
104 }
105
106 void
107 bad_lt (void)
108 {
109   b1 = b32 < f;         // { dg-error "error" }
110   b2 = ld < b32;        // { dg-error "error" }
111   b3 = b64 < d;         // { dg-error "error" }
112   b4 = ld < b64;        // { dg-error "error" }
113   b5 = b128 < ld;       // { dg-error "error" }
114   b6 = d < b128;        // { dg-error "error" }
115 }
116
117 void
118 bad_le (void)
119 {
120   b1 = b32 <= f;        // { dg-error "error" }
121   b2 = ld <= b32;       // { dg-error "error" }
122   b3 = b64 <= d;        // { dg-error "error" }
123   b4 = ld <= b64;       // { dg-error "error" }
124   b5 = b128 <= ld;      // { dg-error "error" }
125   b6 = d <= b128;       // { dg-error "error" }
126 }
127
128 void
129 bad_gt (void)
130 {
131   b1 = b32 > f;         // { dg-error "error" }
132   b2 = ld > b32;        // { dg-error "error" }
133   b3 = b64 > d;         // { dg-error "error" }
134   b4 = ld > b64;        // { dg-error "error" }
135   b5 = b128 > ld;       // { dg-error "error" }
136   b6 = d > b128;        // { dg-error "error" }
137 }
138
139 void
140 bad_ge (void)
141 {
142   b1 = b32 >= f;        // { dg-error "error" }
143   b2 = ld >= b32;       // { dg-error "error" }
144   b3 = b64 >= d;        // { dg-error "error" }
145   b4 = ld >= b64;       // { dg-error "error" }
146   b5 = b128 >= ld;      // { dg-error "error" }
147   b6 = d >= b128;       // { dg-error "error" }
148 }
149
150 void
151 bad_pluseq (void)
152 {
153   a32 += f;             // { dg-error "error" }
154   a32 += d;             // { dg-error "error" }
155   a32 += ld;            // { dg-error "error" }
156   a64 += f;             // { dg-error "error" }
157   a64 += d;             // { dg-error "error" }
158   a64 += ld;            // { dg-error "error" }
159   a128 += f;            // { dg-error "error" }
160   a128 += d;            // { dg-error "error" }
161   a128 += ld;           // { dg-error "error" }
162 }
163
164 void
165 bad_minuseq (void)
166 {
167   a32 -= f;             // { dg-error "error" }
168   a32 -= d;             // { dg-error "error" }
169   a32 -= ld;            // { dg-error "error" }
170   a64 -= f;             // { dg-error "error" }
171   a64 -= d;             // { dg-error "error" }
172   a64 -= ld;            // { dg-error "error" }
173   a128 -= f;            // { dg-error "error" }
174   a128 -= d;            // { dg-error "error" }
175   a128 -= ld;           // { dg-error "error" }
176 }
177
178 void
179 bad_timeseq (void)
180 {
181   a32 *= f;             // { dg-error "error" }
182   a32 *= d;             // { dg-error "error" }
183   a32 *= ld;            // { dg-error "error" }
184   a64 *= f;             // { dg-error "error" }
185   a64 *= d;             // { dg-error "error" }
186   a64 *= ld;            // { dg-error "error" }
187   a128 *= f;            // { dg-error "error" }
188   a128 *= d;            // { dg-error "error" }
189   a128 *= ld;           // { dg-error "error" }
190 }
191
192 void
193 bad_divideeq (void)
194 {
195   a32 /= f;             // { dg-error "error" }
196   a32 /= d;             // { dg-error "error" }
197   a32 /= ld;            // { dg-error "error" }
198   a64 /= f;             // { dg-error "error" }
199   a64 /= d;             // { dg-error "error" }
200   a64 /= ld;            // { dg-error "error" }
201   a128 /= f;            // { dg-error "error" }
202   a128 /= d;            // { dg-error "error" }
203   a128 /= ld;           // { dg-error "error" }
204 }
205
206 // { dg-excess-errors "notes about candidates" }