]>
Commit | Line | Data |
---|---|---|
7adcbafe | 1 | // Copyright (C) 2019-2022 Free Software Foundation, Inc. |
4f75543d JW |
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 | ||
061a7450 | 18 | // { dg-do run { target c++11 } } |
4f75543d JW |
19 | |
20 | #include <complex> | |
21 | #include <limits> | |
22 | #include <testsuite_hooks.h> | |
23 | ||
e339291f JW |
24 | namespace test |
25 | { | |
26 | #ifdef _GLIBCXX_USE_C99_MATH_TR1 | |
27 | using std::copysign; | |
28 | #else | |
29 | bool copysign(float x, float y) | |
30 | { return __builtin_copysignf(x, y); } | |
31 | ||
32 | bool copysign(double x, double y) | |
33 | { return __builtin_copysign(x, y); } | |
34 | ||
35 | bool copysign(long double x, long double y) | |
36 | { return __builtin_copysignl(x, y); } | |
37 | #endif | |
38 | } | |
39 | ||
4f75543d JW |
40 | template<typename T> |
41 | bool eq(const std::complex<T>& x, const std::complex<T>& y) | |
42 | { | |
43 | bool nan_reals = std::isnan(x.real()) && std::isnan(y.real()); | |
44 | bool nan_imags = std::isnan(x.imag()) && std::isnan(y.imag()); | |
45 | ||
46 | bool sign_reals | |
e339291f | 47 | = test::copysign(T(1), x.real()) == test::copysign(T(1), y.real()); |
4f75543d | 48 | bool sign_imags |
e339291f | 49 | = test::copysign(T(1), x.imag()) == test::copysign(T(1), y.imag()); |
4f75543d JW |
50 | |
51 | return ((x.real() == y.real() && sign_reals) || nan_reals) | |
52 | && ((x.imag() == y.imag() && sign_imags) || nan_imags); | |
53 | } | |
54 | ||
55 | void | |
56 | test01() | |
57 | { | |
58 | const double qnan = std::numeric_limits<double>::quiet_NaN(); | |
59 | const double pinf = std::numeric_limits<double>::infinity(); | |
60 | const double ninf = -pinf; | |
61 | ||
62 | std::complex<double> c00(0, 0); | |
63 | VERIFY( eq( std::proj(c00) , c00 ) ); | |
64 | VERIFY( eq( std::proj(-c00) , -c00 ) ); | |
65 | c00.real(-0.0); | |
66 | VERIFY( eq( std::proj(c00) , c00 ) ); | |
67 | VERIFY( eq( std::proj(-c00) , -c00 ) ); | |
68 | ||
69 | const std::complex<double> c01(0, 1); | |
70 | VERIFY( eq( std::proj(c01) , c01 ) ); | |
71 | VERIFY( eq( std::proj(-c01) , -c01 ) ); | |
72 | c00.real(-0.0); | |
73 | VERIFY( eq( std::proj(c01) , c01 ) ); | |
74 | VERIFY( eq( std::proj(-c01) , -c01 ) ); | |
75 | ||
76 | const std::complex<double> c10(1, 0); | |
77 | VERIFY( eq( std::proj(c10) , c10 ) ); | |
78 | VERIFY( eq( std::proj(-c10) , -c10 ) ); | |
79 | ||
80 | const std::complex<double> c12(1, 2); | |
81 | VERIFY( eq( std::proj(c12) , c12 ) ); | |
82 | VERIFY( eq( std::proj(-c12) , -c12 ) ); | |
83 | ||
84 | const std::complex<double> c0q(0, qnan); | |
85 | VERIFY( eq( std::proj(c0q) , c0q ) ); | |
86 | VERIFY( eq( std::proj(-c0q) , -c0q ) ); | |
87 | ||
88 | const std::complex<double> c1q(1, qnan); | |
89 | VERIFY( eq( std::proj(c1q) , c1q ) ); | |
90 | VERIFY( eq( std::proj(-c1q) , -c1q ) ); | |
91 | ||
92 | const std::complex<double> cq0(qnan, 0); | |
93 | VERIFY( eq( std::proj(cq0) , cq0 ) ); | |
94 | VERIFY( eq( std::proj(-cq0) , -cq0 ) ); | |
95 | ||
96 | const std::complex<double> cq1(qnan, 1); | |
97 | VERIFY( eq( std::proj(cq1) , cq1 ) ); | |
98 | VERIFY( eq( std::proj(-cq1) , -cq1 ) ); | |
99 | ||
100 | const std::complex<double> cqq(qnan, qnan); | |
101 | VERIFY( eq( std::proj(cqq) , cqq ) ); | |
102 | VERIFY( eq( std::proj(-cqq) , -cqq ) ); | |
103 | ||
104 | const std::complex<double> c0p(0, pinf); | |
105 | VERIFY( eq( std::proj(c0p) , std::complex<double>(pinf, +0.0) ) ); | |
106 | VERIFY( eq( std::proj(-c0p) , std::complex<double>(pinf, -0.0) ) ); | |
107 | ||
108 | const std::complex<double> c1p(1, pinf); | |
109 | VERIFY( eq( std::proj(c1p) , std::complex<double>(pinf, +0.0) ) ); | |
110 | VERIFY( eq( std::proj(-c1p) , std::complex<double>(pinf, -0.0) ) ); | |
111 | ||
112 | const std::complex<double> cqp(qnan, pinf); | |
113 | VERIFY( eq( std::proj(cqp) , std::complex<double>(pinf, +0.0) ) ); | |
114 | VERIFY( eq( std::proj(-cqp) , std::complex<double>(pinf, -0.0) ) ); | |
115 | ||
116 | const std::complex<double> cpp(pinf, pinf); | |
117 | VERIFY( eq( std::proj(cpp) , std::complex<double>(pinf, +0.0) ) ); | |
118 | VERIFY( eq( std::proj(-cpp) , std::complex<double>(pinf, -0.0) ) ); | |
119 | ||
120 | const std::complex<double> c0n(0, ninf); | |
121 | VERIFY( eq( std::proj(c0n) , std::complex<double>(pinf, -0.0) ) ); | |
122 | VERIFY( eq( std::proj(-c0n) , std::complex<double>(pinf, +0.0) ) ); | |
123 | ||
124 | const std::complex<double> c1n(1, ninf); | |
125 | VERIFY( eq( std::proj(c1n) , std::complex<double>(pinf, -0.0) ) ); | |
126 | VERIFY( eq( std::proj(-c1n) , std::complex<double>(pinf, +0.0) ) ); | |
127 | ||
128 | const std::complex<double> cqn(qnan, ninf); | |
129 | VERIFY( eq( std::proj(cqn) , std::complex<double>(pinf, -0.0) ) ); | |
130 | VERIFY( eq( std::proj(-cqn) , std::complex<double>(pinf, +0.0) ) ); | |
131 | ||
132 | const std::complex<double> cpn(pinf, ninf); | |
133 | VERIFY( eq( std::proj(cpn) , std::complex<double>(pinf, -0.0) ) ); | |
134 | VERIFY( eq( std::proj(-cpn) , std::complex<double>(pinf, +0.0) ) ); | |
135 | ||
136 | const std::complex<double> cnn(ninf, ninf); | |
137 | VERIFY( eq( std::proj(cnn) , std::complex<double>(pinf, -0.0) ) ); | |
138 | VERIFY( eq( std::proj(-cnn) , std::complex<double>(pinf, +0.0) ) ); | |
139 | ||
140 | const std::complex<double> cp0(pinf, 0); | |
141 | VERIFY( eq( std::proj(cp0) , std::complex<double>(pinf, +0.0) ) ); | |
142 | VERIFY( eq( std::proj(-cp0) , std::complex<double>(pinf, -0.0) ) ); | |
143 | ||
144 | const std::complex<double> cp1(pinf, 1); | |
145 | VERIFY( eq( std::proj(cp1) , std::complex<double>(pinf, +0.0) ) ); | |
146 | VERIFY( eq( std::proj(-cp1) , std::complex<double>(pinf, -0.0) ) ); | |
147 | ||
148 | const std::complex<double> cpq(pinf, qnan); | |
149 | VERIFY( eq( std::proj(cpq) , std::complex<double>(pinf, +0.0) ) ); | |
150 | VERIFY( eq( std::proj(-cpq) , std::complex<double>(pinf, -0.0) ) ); | |
151 | ||
152 | const std::complex<double> cn0(ninf, 0); | |
153 | VERIFY( eq( std::proj(cn0) , std::complex<double>(pinf, +0.0) ) ); | |
154 | VERIFY( eq( std::proj(-cn0) , std::complex<double>(pinf, -0.0) ) ); | |
155 | ||
156 | const std::complex<double> cn1(ninf, 1); | |
157 | VERIFY( eq( std::proj(cn1) , std::complex<double>(pinf, +0.0) ) ); | |
158 | VERIFY( eq( std::proj(-cn1) , std::complex<double>(pinf, -0.0) ) ); | |
159 | ||
160 | const std::complex<double> cnq(ninf, qnan); | |
161 | VERIFY( eq( std::proj(cnq) , std::complex<double>(pinf, +0.0) ) ); | |
162 | VERIFY( eq( std::proj(-cnq) , std::complex<double>(pinf, -0.0) ) ); | |
163 | ||
164 | const std::complex<double> cnp(ninf, pinf); | |
165 | VERIFY( eq( std::proj(cnp) , std::complex<double>(pinf, +0.0) ) ); | |
166 | VERIFY( eq( std::proj(-cnp) , std::complex<double>(pinf, -0.0) ) ); | |
167 | } | |
168 | ||
169 | void | |
170 | test02() | |
171 | { | |
172 | const float qnan = std::numeric_limits<float>::quiet_NaN(); | |
173 | const float pinf = std::numeric_limits<float>::infinity(); | |
174 | const float ninf = -pinf; | |
175 | ||
176 | std::complex<float> c00(0, 0); | |
177 | VERIFY( eq( std::proj(c00) , c00 ) ); | |
178 | VERIFY( eq( std::proj(-c00) , -c00 ) ); | |
179 | c00.real(-0.0); | |
180 | VERIFY( eq( std::proj(c00) , c00 ) ); | |
181 | VERIFY( eq( std::proj(-c00) , -c00 ) ); | |
182 | ||
183 | const std::complex<float> c01(0, 1); | |
184 | VERIFY( eq( std::proj(c01) , c01 ) ); | |
185 | VERIFY( eq( std::proj(-c01) , -c01 ) ); | |
186 | c00.real(-0.0); | |
187 | VERIFY( eq( std::proj(c01) , c01 ) ); | |
188 | VERIFY( eq( std::proj(-c01) , -c01 ) ); | |
189 | ||
190 | const std::complex<float> c10(1, 0); | |
191 | VERIFY( eq( std::proj(c10) , c10 ) ); | |
192 | VERIFY( eq( std::proj(-c10) , -c10 ) ); | |
193 | ||
194 | const std::complex<float> c12(1, 2); | |
195 | VERIFY( eq( std::proj(c12) , c12 ) ); | |
196 | VERIFY( eq( std::proj(-c12) , -c12 ) ); | |
197 | ||
198 | const std::complex<float> c0q(0, qnan); | |
199 | VERIFY( eq( std::proj(c0q) , c0q ) ); | |
200 | VERIFY( eq( std::proj(-c0q) , -c0q ) ); | |
201 | ||
202 | const std::complex<float> c1q(1, qnan); | |
203 | VERIFY( eq( std::proj(c1q) , c1q ) ); | |
204 | VERIFY( eq( std::proj(-c1q) , -c1q ) ); | |
205 | ||
206 | const std::complex<float> cq0(qnan, 0); | |
207 | VERIFY( eq( std::proj(cq0) , cq0 ) ); | |
208 | VERIFY( eq( std::proj(-cq0) , -cq0 ) ); | |
209 | ||
210 | const std::complex<float> cq1(qnan, 1); | |
211 | VERIFY( eq( std::proj(cq1) , cq1 ) ); | |
212 | VERIFY( eq( std::proj(-cq1) , -cq1 ) ); | |
213 | ||
214 | const std::complex<float> cqq(qnan, qnan); | |
215 | VERIFY( eq( std::proj(cqq) , cqq ) ); | |
216 | VERIFY( eq( std::proj(-cqq) , -cqq ) ); | |
217 | ||
218 | const std::complex<float> c0p(0, pinf); | |
219 | VERIFY( eq( std::proj(c0p) , std::complex<float>(pinf, +0.0) ) ); | |
220 | VERIFY( eq( std::proj(-c0p) , std::complex<float>(pinf, -0.0) ) ); | |
221 | ||
222 | const std::complex<float> c1p(1, pinf); | |
223 | VERIFY( eq( std::proj(c1p) , std::complex<float>(pinf, +0.0) ) ); | |
224 | VERIFY( eq( std::proj(-c1p) , std::complex<float>(pinf, -0.0) ) ); | |
225 | ||
226 | const std::complex<float> cqp(qnan, pinf); | |
227 | VERIFY( eq( std::proj(cqp) , std::complex<float>(pinf, +0.0) ) ); | |
228 | VERIFY( eq( std::proj(-cqp) , std::complex<float>(pinf, -0.0) ) ); | |
229 | ||
230 | const std::complex<float> cpp(pinf, pinf); | |
231 | VERIFY( eq( std::proj(cpp) , std::complex<float>(pinf, +0.0) ) ); | |
232 | VERIFY( eq( std::proj(-cpp) , std::complex<float>(pinf, -0.0) ) ); | |
233 | ||
234 | const std::complex<float> c0n(0, ninf); | |
235 | VERIFY( eq( std::proj(c0n) , std::complex<float>(pinf, -0.0) ) ); | |
236 | VERIFY( eq( std::proj(-c0n) , std::complex<float>(pinf, +0.0) ) ); | |
237 | ||
238 | const std::complex<float> c1n(1, ninf); | |
239 | VERIFY( eq( std::proj(c1n) , std::complex<float>(pinf, -0.0) ) ); | |
240 | VERIFY( eq( std::proj(-c1n) , std::complex<float>(pinf, +0.0) ) ); | |
241 | ||
242 | const std::complex<float> cqn(qnan, ninf); | |
243 | VERIFY( eq( std::proj(cqn) , std::complex<float>(pinf, -0.0) ) ); | |
244 | VERIFY( eq( std::proj(-cqn) , std::complex<float>(pinf, +0.0) ) ); | |
245 | ||
246 | const std::complex<float> cpn(pinf, ninf); | |
247 | VERIFY( eq( std::proj(cpn) , std::complex<float>(pinf, -0.0) ) ); | |
248 | VERIFY( eq( std::proj(-cpn) , std::complex<float>(pinf, +0.0) ) ); | |
249 | ||
250 | const std::complex<float> cnn(ninf, ninf); | |
251 | VERIFY( eq( std::proj(cnn) , std::complex<float>(pinf, -0.0) ) ); | |
252 | VERIFY( eq( std::proj(-cnn) , std::complex<float>(pinf, +0.0) ) ); | |
253 | ||
254 | const std::complex<float> cp0(pinf, 0); | |
255 | VERIFY( eq( std::proj(cp0) , std::complex<float>(pinf, +0.0) ) ); | |
256 | VERIFY( eq( std::proj(-cp0) , std::complex<float>(pinf, -0.0) ) ); | |
257 | ||
258 | const std::complex<float> cp1(pinf, 1); | |
259 | VERIFY( eq( std::proj(cp1) , std::complex<float>(pinf, +0.0) ) ); | |
260 | VERIFY( eq( std::proj(-cp1) , std::complex<float>(pinf, -0.0) ) ); | |
261 | ||
262 | const std::complex<float> cpq(pinf, qnan); | |
263 | VERIFY( eq( std::proj(cpq) , std::complex<float>(pinf, +0.0) ) ); | |
264 | VERIFY( eq( std::proj(-cpq) , std::complex<float>(pinf, -0.0) ) ); | |
265 | ||
266 | const std::complex<float> cn0(ninf, 0); | |
267 | VERIFY( eq( std::proj(cn0) , std::complex<float>(pinf, +0.0) ) ); | |
268 | VERIFY( eq( std::proj(-cn0) , std::complex<float>(pinf, -0.0) ) ); | |
269 | ||
270 | const std::complex<float> cn1(ninf, 1); | |
271 | VERIFY( eq( std::proj(cn1) , std::complex<float>(pinf, +0.0) ) ); | |
272 | VERIFY( eq( std::proj(-cn1) , std::complex<float>(pinf, -0.0) ) ); | |
273 | ||
274 | const std::complex<float> cnq(ninf, qnan); | |
275 | VERIFY( eq( std::proj(cnq) , std::complex<float>(pinf, +0.0) ) ); | |
276 | VERIFY( eq( std::proj(-cnq) , std::complex<float>(pinf, -0.0) ) ); | |
277 | ||
278 | const std::complex<float> cnp(ninf, pinf); | |
279 | VERIFY( eq( std::proj(cnp) , std::complex<float>(pinf, +0.0) ) ); | |
280 | VERIFY( eq( std::proj(-cnp) , std::complex<float>(pinf, -0.0) ) ); | |
281 | } | |
282 | ||
283 | void | |
284 | test03() | |
285 | { | |
286 | const long double qnan = std::numeric_limits<long double>::quiet_NaN(); | |
287 | const long double pinf = std::numeric_limits<long double>::infinity(); | |
288 | const long double ninf = -pinf; | |
289 | ||
290 | std::complex<long double> c00(0, 0); | |
291 | VERIFY( eq( std::proj(c00) , c00 ) ); | |
292 | VERIFY( eq( std::proj(-c00) , -c00 ) ); | |
293 | c00.real(-0.0); | |
294 | VERIFY( eq( std::proj(c00) , c00 ) ); | |
295 | VERIFY( eq( std::proj(-c00) , -c00 ) ); | |
296 | ||
297 | const std::complex<long double> c01(0, 1); | |
298 | VERIFY( eq( std::proj(c01) , c01 ) ); | |
299 | VERIFY( eq( std::proj(-c01) , -c01 ) ); | |
300 | c00.real(-0.0); | |
301 | VERIFY( eq( std::proj(c01) , c01 ) ); | |
302 | VERIFY( eq( std::proj(-c01) , -c01 ) ); | |
303 | ||
304 | const std::complex<long double> c10(1, 0); | |
305 | VERIFY( eq( std::proj(c10) , c10 ) ); | |
306 | VERIFY( eq( std::proj(-c10) , -c10 ) ); | |
307 | ||
308 | const std::complex<long double> c12(1, 2); | |
309 | VERIFY( eq( std::proj(c12) , c12 ) ); | |
310 | VERIFY( eq( std::proj(-c12) , -c12 ) ); | |
311 | ||
312 | const std::complex<long double> c0q(0, qnan); | |
313 | VERIFY( eq( std::proj(c0q) , c0q ) ); | |
314 | VERIFY( eq( std::proj(-c0q) , -c0q ) ); | |
315 | ||
316 | const std::complex<long double> c1q(1, qnan); | |
317 | VERIFY( eq( std::proj(c1q) , c1q ) ); | |
318 | VERIFY( eq( std::proj(-c1q) , -c1q ) ); | |
319 | ||
320 | const std::complex<long double> cq0(qnan, 0); | |
321 | VERIFY( eq( std::proj(cq0) , cq0 ) ); | |
322 | VERIFY( eq( std::proj(-cq0) , -cq0 ) ); | |
323 | ||
324 | const std::complex<long double> cq1(qnan, 1); | |
325 | VERIFY( eq( std::proj(cq1) , cq1 ) ); | |
326 | VERIFY( eq( std::proj(-cq1) , -cq1 ) ); | |
327 | ||
328 | const std::complex<long double> cqq(qnan, qnan); | |
329 | VERIFY( eq( std::proj(cqq) , cqq ) ); | |
330 | VERIFY( eq( std::proj(-cqq) , -cqq ) ); | |
331 | ||
332 | const std::complex<long double> c0p(0, pinf); | |
333 | VERIFY( eq( std::proj(c0p) , std::complex<long double>(pinf, +0.0) ) ); | |
334 | VERIFY( eq( std::proj(-c0p) , std::complex<long double>(pinf, -0.0) ) ); | |
335 | ||
336 | const std::complex<long double> c1p(1, pinf); | |
337 | VERIFY( eq( std::proj(c1p) , std::complex<long double>(pinf, +0.0) ) ); | |
338 | VERIFY( eq( std::proj(-c1p) , std::complex<long double>(pinf, -0.0) ) ); | |
339 | ||
340 | const std::complex<long double> cqp(qnan, pinf); | |
341 | VERIFY( eq( std::proj(cqp) , std::complex<long double>(pinf, +0.0) ) ); | |
342 | VERIFY( eq( std::proj(-cqp) , std::complex<long double>(pinf, -0.0) ) ); | |
343 | ||
344 | const std::complex<long double> cpp(pinf, pinf); | |
345 | VERIFY( eq( std::proj(cpp) , std::complex<long double>(pinf, +0.0) ) ); | |
346 | VERIFY( eq( std::proj(-cpp) , std::complex<long double>(pinf, -0.0) ) ); | |
347 | ||
348 | const std::complex<long double> c0n(0, ninf); | |
349 | VERIFY( eq( std::proj(c0n) , std::complex<long double>(pinf, -0.0) ) ); | |
350 | VERIFY( eq( std::proj(-c0n) , std::complex<long double>(pinf, +0.0) ) ); | |
351 | ||
352 | const std::complex<long double> c1n(1, ninf); | |
353 | VERIFY( eq( std::proj(c1n) , std::complex<long double>(pinf, -0.0) ) ); | |
354 | VERIFY( eq( std::proj(-c1n) , std::complex<long double>(pinf, +0.0) ) ); | |
355 | ||
356 | const std::complex<long double> cqn(qnan, ninf); | |
357 | VERIFY( eq( std::proj(cqn) , std::complex<long double>(pinf, -0.0) ) ); | |
358 | VERIFY( eq( std::proj(-cqn) , std::complex<long double>(pinf, +0.0) ) ); | |
359 | ||
360 | const std::complex<long double> cpn(pinf, ninf); | |
361 | VERIFY( eq( std::proj(cpn) , std::complex<long double>(pinf, -0.0) ) ); | |
362 | VERIFY( eq( std::proj(-cpn) , std::complex<long double>(pinf, +0.0) ) ); | |
363 | ||
364 | const std::complex<long double> cnn(ninf, ninf); | |
365 | VERIFY( eq( std::proj(cnn) , std::complex<long double>(pinf, -0.0) ) ); | |
366 | VERIFY( eq( std::proj(-cnn) , std::complex<long double>(pinf, +0.0) ) ); | |
367 | ||
368 | const std::complex<long double> cp0(pinf, 0); | |
369 | VERIFY( eq( std::proj(cp0) , std::complex<long double>(pinf, +0.0) ) ); | |
370 | VERIFY( eq( std::proj(-cp0) , std::complex<long double>(pinf, -0.0) ) ); | |
371 | ||
372 | const std::complex<long double> cp1(pinf, 1); | |
373 | VERIFY( eq( std::proj(cp1) , std::complex<long double>(pinf, +0.0) ) ); | |
374 | VERIFY( eq( std::proj(-cp1) , std::complex<long double>(pinf, -0.0) ) ); | |
375 | ||
376 | const std::complex<long double> cpq(pinf, qnan); | |
377 | VERIFY( eq( std::proj(cpq) , std::complex<long double>(pinf, +0.0) ) ); | |
378 | VERIFY( eq( std::proj(-cpq) , std::complex<long double>(pinf, -0.0) ) ); | |
379 | ||
380 | const std::complex<long double> cn0(ninf, 0); | |
381 | VERIFY( eq( std::proj(cn0) , std::complex<long double>(pinf, +0.0) ) ); | |
382 | VERIFY( eq( std::proj(-cn0) , std::complex<long double>(pinf, -0.0) ) ); | |
383 | ||
384 | const std::complex<long double> cn1(ninf, 1); | |
385 | VERIFY( eq( std::proj(cn1) , std::complex<long double>(pinf, +0.0) ) ); | |
386 | VERIFY( eq( std::proj(-cn1) , std::complex<long double>(pinf, -0.0) ) ); | |
387 | ||
388 | const std::complex<long double> cnq(ninf, qnan); | |
389 | VERIFY( eq( std::proj(cnq) , std::complex<long double>(pinf, +0.0) ) ); | |
390 | VERIFY( eq( std::proj(-cnq) , std::complex<long double>(pinf, -0.0) ) ); | |
391 | ||
392 | const std::complex<long double> cnp(ninf, pinf); | |
393 | VERIFY( eq( std::proj(cnp) , std::complex<long double>(pinf, +0.0) ) ); | |
394 | VERIFY( eq( std::proj(-cnp) , std::complex<long double>(pinf, -0.0) ) ); | |
395 | } | |
396 | ||
397 | int | |
398 | main() | |
399 | { | |
400 | test01(); | |
401 | test02(); | |
402 | test03(); | |
403 | } |