xref: /minix3/external/bsd/libc++/dist/libcxx/test/numerics/complex.number/cases.h (revision 4684ddb6aab0b36791c8099bc705d6140b3d05d0)
1*4684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
2*4684ddb6SLionel Sambuc //
3*4684ddb6SLionel Sambuc //                     The LLVM Compiler Infrastructure
4*4684ddb6SLionel Sambuc //
5*4684ddb6SLionel Sambuc // This file is dual licensed under the MIT and the University of Illinois Open
6*4684ddb6SLionel Sambuc // Source Licenses. See LICENSE.TXT for details.
7*4684ddb6SLionel Sambuc //
8*4684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
9*4684ddb6SLionel Sambuc 
10*4684ddb6SLionel Sambuc // <complex>
11*4684ddb6SLionel Sambuc 
12*4684ddb6SLionel Sambuc // test cases
13*4684ddb6SLionel Sambuc 
14*4684ddb6SLionel Sambuc #ifndef CASES_H
15*4684ddb6SLionel Sambuc #define CASES_H
16*4684ddb6SLionel Sambuc 
17*4684ddb6SLionel Sambuc #include <complex>
18*4684ddb6SLionel Sambuc #include <cassert>
19*4684ddb6SLionel Sambuc 
20*4684ddb6SLionel Sambuc std::complex<double> x[] =
21*4684ddb6SLionel Sambuc {
22*4684ddb6SLionel Sambuc     std::complex<double>( 1.e-6,  1.e-6),
23*4684ddb6SLionel Sambuc     std::complex<double>(-1.e-6,  1.e-6),
24*4684ddb6SLionel Sambuc     std::complex<double>(-1.e-6, -1.e-6),
25*4684ddb6SLionel Sambuc     std::complex<double>( 1.e-6, -1.e-6),
26*4684ddb6SLionel Sambuc 
27*4684ddb6SLionel Sambuc     std::complex<double>( 1.e+6,  1.e-6),
28*4684ddb6SLionel Sambuc     std::complex<double>(-1.e+6,  1.e-6),
29*4684ddb6SLionel Sambuc     std::complex<double>(-1.e+6, -1.e-6),
30*4684ddb6SLionel Sambuc     std::complex<double>( 1.e+6, -1.e-6),
31*4684ddb6SLionel Sambuc 
32*4684ddb6SLionel Sambuc     std::complex<double>( 1.e-6,  1.e+6),
33*4684ddb6SLionel Sambuc     std::complex<double>(-1.e-6,  1.e+6),
34*4684ddb6SLionel Sambuc     std::complex<double>(-1.e-6, -1.e+6),
35*4684ddb6SLionel Sambuc     std::complex<double>( 1.e-6, -1.e+6),
36*4684ddb6SLionel Sambuc 
37*4684ddb6SLionel Sambuc     std::complex<double>( 1.e+6,  1.e+6),
38*4684ddb6SLionel Sambuc     std::complex<double>(-1.e+6,  1.e+6),
39*4684ddb6SLionel Sambuc     std::complex<double>(-1.e+6, -1.e+6),
40*4684ddb6SLionel Sambuc     std::complex<double>( 1.e+6, -1.e+6),
41*4684ddb6SLionel Sambuc 
42*4684ddb6SLionel Sambuc     std::complex<double>(NAN, NAN),
43*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, NAN),
44*4684ddb6SLionel Sambuc     std::complex<double>(-2, NAN),
45*4684ddb6SLionel Sambuc     std::complex<double>(-1, NAN),
46*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, NAN),
47*4684ddb6SLionel Sambuc     std::complex<double>(-0., NAN),
48*4684ddb6SLionel Sambuc     std::complex<double>(+0., NAN),
49*4684ddb6SLionel Sambuc     std::complex<double>(0.5, NAN),
50*4684ddb6SLionel Sambuc     std::complex<double>(1, NAN),
51*4684ddb6SLionel Sambuc     std::complex<double>(2, NAN),
52*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, NAN),
53*4684ddb6SLionel Sambuc 
54*4684ddb6SLionel Sambuc     std::complex<double>(NAN, -INFINITY),
55*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, -INFINITY),
56*4684ddb6SLionel Sambuc     std::complex<double>(-2, -INFINITY),
57*4684ddb6SLionel Sambuc     std::complex<double>(-1, -INFINITY),
58*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, -INFINITY),
59*4684ddb6SLionel Sambuc     std::complex<double>(-0., -INFINITY),
60*4684ddb6SLionel Sambuc     std::complex<double>(+0., -INFINITY),
61*4684ddb6SLionel Sambuc     std::complex<double>(0.5, -INFINITY),
62*4684ddb6SLionel Sambuc     std::complex<double>(1, -INFINITY),
63*4684ddb6SLionel Sambuc     std::complex<double>(2, -INFINITY),
64*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, -INFINITY),
65*4684ddb6SLionel Sambuc 
66*4684ddb6SLionel Sambuc     std::complex<double>(NAN, -2),
67*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, -2),
68*4684ddb6SLionel Sambuc     std::complex<double>(-2, -2),
69*4684ddb6SLionel Sambuc     std::complex<double>(-1, -2),
70*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, -2),
71*4684ddb6SLionel Sambuc     std::complex<double>(-0., -2),
72*4684ddb6SLionel Sambuc     std::complex<double>(+0., -2),
73*4684ddb6SLionel Sambuc     std::complex<double>(0.5, -2),
74*4684ddb6SLionel Sambuc     std::complex<double>(1, -2),
75*4684ddb6SLionel Sambuc     std::complex<double>(2, -2),
76*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, -2),
77*4684ddb6SLionel Sambuc 
78*4684ddb6SLionel Sambuc     std::complex<double>(NAN, -1),
79*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, -1),
80*4684ddb6SLionel Sambuc     std::complex<double>(-2, -1),
81*4684ddb6SLionel Sambuc     std::complex<double>(-1, -1),
82*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, -1),
83*4684ddb6SLionel Sambuc     std::complex<double>(-0., -1),
84*4684ddb6SLionel Sambuc     std::complex<double>(+0., -1),
85*4684ddb6SLionel Sambuc     std::complex<double>(0.5, -1),
86*4684ddb6SLionel Sambuc     std::complex<double>(1, -1),
87*4684ddb6SLionel Sambuc     std::complex<double>(2, -1),
88*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, -1),
89*4684ddb6SLionel Sambuc 
90*4684ddb6SLionel Sambuc     std::complex<double>(NAN, -0.5),
91*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, -0.5),
92*4684ddb6SLionel Sambuc     std::complex<double>(-2, -0.5),
93*4684ddb6SLionel Sambuc     std::complex<double>(-1, -0.5),
94*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, -0.5),
95*4684ddb6SLionel Sambuc     std::complex<double>(-0., -0.5),
96*4684ddb6SLionel Sambuc     std::complex<double>(+0., -0.5),
97*4684ddb6SLionel Sambuc     std::complex<double>(0.5, -0.5),
98*4684ddb6SLionel Sambuc     std::complex<double>(1, -0.5),
99*4684ddb6SLionel Sambuc     std::complex<double>(2, -0.5),
100*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, -0.5),
101*4684ddb6SLionel Sambuc 
102*4684ddb6SLionel Sambuc     std::complex<double>(NAN, -0.),
103*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, -0.),
104*4684ddb6SLionel Sambuc     std::complex<double>(-2, -0.),
105*4684ddb6SLionel Sambuc     std::complex<double>(-1, -0.),
106*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, -0.),
107*4684ddb6SLionel Sambuc     std::complex<double>(-0., -0.),
108*4684ddb6SLionel Sambuc     std::complex<double>(+0., -0.),
109*4684ddb6SLionel Sambuc     std::complex<double>(0.5, -0.),
110*4684ddb6SLionel Sambuc     std::complex<double>(1, -0.),
111*4684ddb6SLionel Sambuc     std::complex<double>(2, -0.),
112*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, -0.),
113*4684ddb6SLionel Sambuc 
114*4684ddb6SLionel Sambuc     std::complex<double>(NAN, +0.),
115*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, +0.),
116*4684ddb6SLionel Sambuc     std::complex<double>(-2, +0.),
117*4684ddb6SLionel Sambuc     std::complex<double>(-1, +0.),
118*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, +0.),
119*4684ddb6SLionel Sambuc     std::complex<double>(-0., +0.),
120*4684ddb6SLionel Sambuc     std::complex<double>(+0., +0.),
121*4684ddb6SLionel Sambuc     std::complex<double>(0.5, +0.),
122*4684ddb6SLionel Sambuc     std::complex<double>(1, +0.),
123*4684ddb6SLionel Sambuc     std::complex<double>(2, +0.),
124*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, +0.),
125*4684ddb6SLionel Sambuc 
126*4684ddb6SLionel Sambuc     std::complex<double>(NAN, 0.5),
127*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, 0.5),
128*4684ddb6SLionel Sambuc     std::complex<double>(-2, 0.5),
129*4684ddb6SLionel Sambuc     std::complex<double>(-1, 0.5),
130*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, 0.5),
131*4684ddb6SLionel Sambuc     std::complex<double>(-0., 0.5),
132*4684ddb6SLionel Sambuc     std::complex<double>(+0., 0.5),
133*4684ddb6SLionel Sambuc     std::complex<double>(0.5, 0.5),
134*4684ddb6SLionel Sambuc     std::complex<double>(1, 0.5),
135*4684ddb6SLionel Sambuc     std::complex<double>(2, 0.5),
136*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, 0.5),
137*4684ddb6SLionel Sambuc 
138*4684ddb6SLionel Sambuc     std::complex<double>(NAN, 1),
139*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, 1),
140*4684ddb6SLionel Sambuc     std::complex<double>(-2, 1),
141*4684ddb6SLionel Sambuc     std::complex<double>(-1, 1),
142*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, 1),
143*4684ddb6SLionel Sambuc     std::complex<double>(-0., 1),
144*4684ddb6SLionel Sambuc     std::complex<double>(+0., 1),
145*4684ddb6SLionel Sambuc     std::complex<double>(0.5, 1),
146*4684ddb6SLionel Sambuc     std::complex<double>(1, 1),
147*4684ddb6SLionel Sambuc     std::complex<double>(2, 1),
148*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, 1),
149*4684ddb6SLionel Sambuc 
150*4684ddb6SLionel Sambuc     std::complex<double>(NAN, 2),
151*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, 2),
152*4684ddb6SLionel Sambuc     std::complex<double>(-2, 2),
153*4684ddb6SLionel Sambuc     std::complex<double>(-1, 2),
154*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, 2),
155*4684ddb6SLionel Sambuc     std::complex<double>(-0., 2),
156*4684ddb6SLionel Sambuc     std::complex<double>(+0., 2),
157*4684ddb6SLionel Sambuc     std::complex<double>(0.5, 2),
158*4684ddb6SLionel Sambuc     std::complex<double>(1, 2),
159*4684ddb6SLionel Sambuc     std::complex<double>(2, 2),
160*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, 2),
161*4684ddb6SLionel Sambuc 
162*4684ddb6SLionel Sambuc     std::complex<double>(NAN, INFINITY),
163*4684ddb6SLionel Sambuc     std::complex<double>(-INFINITY, INFINITY),
164*4684ddb6SLionel Sambuc     std::complex<double>(-2, INFINITY),
165*4684ddb6SLionel Sambuc     std::complex<double>(-1, INFINITY),
166*4684ddb6SLionel Sambuc     std::complex<double>(-0.5, INFINITY),
167*4684ddb6SLionel Sambuc     std::complex<double>(-0., INFINITY),
168*4684ddb6SLionel Sambuc     std::complex<double>(+0., INFINITY),
169*4684ddb6SLionel Sambuc     std::complex<double>(0.5, INFINITY),
170*4684ddb6SLionel Sambuc     std::complex<double>(1, INFINITY),
171*4684ddb6SLionel Sambuc     std::complex<double>(2, INFINITY),
172*4684ddb6SLionel Sambuc     std::complex<double>(INFINITY, INFINITY)
173*4684ddb6SLionel Sambuc };
174*4684ddb6SLionel Sambuc 
175*4684ddb6SLionel Sambuc enum {zero, non_zero, inf, NaN, non_zero_nan};
176*4684ddb6SLionel Sambuc 
177*4684ddb6SLionel Sambuc template <class T>
178*4684ddb6SLionel Sambuc int
classify(const std::complex<T> & x)179*4684ddb6SLionel Sambuc classify(const std::complex<T>& x)
180*4684ddb6SLionel Sambuc {
181*4684ddb6SLionel Sambuc     if (x == std::complex<T>())
182*4684ddb6SLionel Sambuc         return zero;
183*4684ddb6SLionel Sambuc     if (std::isinf(x.real()) || std::isinf(x.imag()))
184*4684ddb6SLionel Sambuc         return inf;
185*4684ddb6SLionel Sambuc     if (std::isnan(x.real()) && std::isnan(x.imag()))
186*4684ddb6SLionel Sambuc         return NaN;
187*4684ddb6SLionel Sambuc     if (std::isnan(x.real()))
188*4684ddb6SLionel Sambuc     {
189*4684ddb6SLionel Sambuc         if (x.imag() == T(0))
190*4684ddb6SLionel Sambuc             return NaN;
191*4684ddb6SLionel Sambuc         return non_zero_nan;
192*4684ddb6SLionel Sambuc     }
193*4684ddb6SLionel Sambuc     if (std::isnan(x.imag()))
194*4684ddb6SLionel Sambuc     {
195*4684ddb6SLionel Sambuc         if (x.real() == T(0))
196*4684ddb6SLionel Sambuc             return NaN;
197*4684ddb6SLionel Sambuc         return non_zero_nan;
198*4684ddb6SLionel Sambuc     }
199*4684ddb6SLionel Sambuc     return non_zero;
200*4684ddb6SLionel Sambuc }
201*4684ddb6SLionel Sambuc 
202*4684ddb6SLionel Sambuc inline
203*4684ddb6SLionel Sambuc int
classify(double x)204*4684ddb6SLionel Sambuc classify(double x)
205*4684ddb6SLionel Sambuc {
206*4684ddb6SLionel Sambuc     if (x == 0)
207*4684ddb6SLionel Sambuc         return zero;
208*4684ddb6SLionel Sambuc     if (std::isinf(x))
209*4684ddb6SLionel Sambuc         return inf;
210*4684ddb6SLionel Sambuc     if (std::isnan(x))
211*4684ddb6SLionel Sambuc         return NaN;
212*4684ddb6SLionel Sambuc     return non_zero;
213*4684ddb6SLionel Sambuc }
214*4684ddb6SLionel Sambuc 
is_about(float x,float y)215*4684ddb6SLionel Sambuc void is_about(float x, float y)
216*4684ddb6SLionel Sambuc {
217*4684ddb6SLionel Sambuc     assert(std::abs((x-y)/(x+y)) < 1.e-6);
218*4684ddb6SLionel Sambuc }
219*4684ddb6SLionel Sambuc 
is_about(double x,double y)220*4684ddb6SLionel Sambuc void is_about(double x, double y)
221*4684ddb6SLionel Sambuc {
222*4684ddb6SLionel Sambuc     assert(std::abs((x-y)/(x+y)) < 1.e-14);
223*4684ddb6SLionel Sambuc }
224*4684ddb6SLionel Sambuc 
is_about(long double x,long double y)225*4684ddb6SLionel Sambuc void is_about(long double x, long double y)
226*4684ddb6SLionel Sambuc {
227*4684ddb6SLionel Sambuc     assert(std::abs((x-y)/(x+y)) < 1.e-14);
228*4684ddb6SLionel Sambuc }
229*4684ddb6SLionel Sambuc 
230*4684ddb6SLionel Sambuc #endif  // CASES_H
231