release 0.1.15
[liba.git] / test / complex.h
blob0baa170b2948cd8d0940142ee9bbff296bc89dec
1 #define MAIN(x) complex##x
2 #include "test.h"
3 #include "a/math.h"
4 #include "a/complex.h"
6 static void test(a_complex a, a_complex b)
8 a_float x;
9 a_complex c;
10 a_complex_polar(&c, A_FLOAT_C(1.0), a_float_c(A_PI_2));
12 x = a_complex_logabs(a);
13 debug("logabs(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_FLOAT_PRI("", "g\n"), a.real, a.imag, x);
15 x = a_complex_abs2(a);
16 debug("abs2(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_FLOAT_PRI("", "g\n"), a.real, a.imag, x);
18 x = a_complex_abs(a);
19 debug("abs(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_FLOAT_PRI("", "g\n"), a.real, a.imag, x);
21 x = a_complex_arg(a);
22 debug("arg(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_FLOAT_PRI("", "g\n"), a.real, a.imag, x);
24 a_complex_proj(&c, a);
25 debug("proj(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
26 a.real, a.imag, c.real, c.imag);
28 a_complex_conj(&c, a);
29 debug(A_COMPLEX_PRI("", "g", "", "g") "'=" A_COMPLEX_PRI("", "g", "", "g") "\n",
30 a.real, a.imag, c.real, c.imag);
32 a_complex_neg(&c, a);
33 debug("-" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
34 a.real, a.imag, c.real, c.imag);
36 a_complex_add(&c, a, b);
37 debug(A_COMPLEX_PRI("", "g", "", "g") "+" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
38 a.real, a.imag, b.real, b.imag, c.real, c.imag);
40 a_complex_sub(&c, a, b);
41 debug(A_COMPLEX_PRI("", "g", "", "g") "-" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
42 a.real, a.imag, b.real, b.imag, c.real, c.imag);
44 a_complex_mul(&c, a, b);
45 debug(A_COMPLEX_PRI("", "g", "", "g") "*" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
46 a.real, a.imag, b.real, b.imag, c.real, c.imag);
48 a_complex_div(&c, a, b);
49 debug(A_COMPLEX_PRI("", "g", "", "g") "/" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
50 a.real, a.imag, b.real, b.imag, c.real, c.imag);
52 a_complex_add_real(&c, a, b.real);
53 debug(A_COMPLEX_PRI("", "g", "", "g") "+" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
54 a.real, a.imag, b.real, A_FLOAT_C(0.0), c.real, c.imag);
56 a_complex_sub_real(&c, a, b.real);
57 debug(A_COMPLEX_PRI("", "g", "", "g") "-" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
58 a.real, a.imag, b.real, A_FLOAT_C(0.0), c.real, c.imag);
60 a_complex_mul_real(&c, a, b.real);
61 debug(A_COMPLEX_PRI("", "g", "", "g") "*" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
62 a.real, a.imag, b.real, A_FLOAT_C(0.0), c.real, c.imag);
64 a_complex_div_real(&c, a, b.real);
65 debug(A_COMPLEX_PRI("", "g", "", "g") "/" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
66 a.real, a.imag, b.real, A_FLOAT_C(0.0), c.real, c.imag);
68 a_complex_add_imag(&c, a, b.real);
69 debug(A_COMPLEX_PRI("", "g", "", "g") "+" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
70 a.real, a.imag, A_FLOAT_C(0.0), b.real, c.real, c.imag);
72 a_complex_sub_imag(&c, a, b.real);
73 debug(A_COMPLEX_PRI("", "g", "", "g") "-" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
74 a.real, a.imag, A_FLOAT_C(0.0), b.real, c.real, c.imag);
76 a_complex_mul_imag(&c, a, b.real);
77 debug(A_COMPLEX_PRI("", "g", "", "g") "*" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
78 a.real, a.imag, A_FLOAT_C(0.0), b.real, c.real, c.imag);
80 a_complex_div_imag(&c, a, b.real);
81 debug(A_COMPLEX_PRI("", "g", "", "g") "/" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
82 a.real, a.imag, A_FLOAT_C(0.0), b.real, c.real, c.imag);
84 a_complex_inv(&c, a);
85 debug("1/" A_COMPLEX_PRI("", "g", "", "g") "=" A_COMPLEX_PRI("", "g", "", "g") "\n",
86 a.real, a.imag, c.real, c.imag);
88 a_complex_sqrt(&c, a);
89 debug("sqrt(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
90 a.real, a.imag, c.real, c.imag);
92 a_complex_sqrt_real(&c, a.real);
93 debug("sqrt(" A_FLOAT_PRI("", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
94 a.real, c.real, c.imag);
96 a_complex_pow(&c, a, b);
97 debug("pow(" A_COMPLEX_PRI("", "g", "", "g") "," A_COMPLEX_PRI("", "g", "", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
98 a.real, a.imag, b.real, b.imag, c.real, c.imag);
100 a_complex_pow_real(&c, a, b.real);
101 debug("pow(" A_COMPLEX_PRI("", "g", "", "g") "," A_FLOAT_PRI("", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
102 a.real, a.imag, b.real, c.real, c.imag);
104 a_complex_exp(&c, a);
105 debug("exp(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
106 a.real, a.imag, c.real, c.imag);
108 a_complex_log(&c, a);
109 debug("log(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
110 a.real, a.imag, c.real, c.imag);
112 a_complex_log2(&c, a);
113 debug("log2(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
114 a.real, a.imag, c.real, c.imag);
116 a_complex_log10(&c, a);
117 debug("log10(" A_COMPLEX_PRI("", "g", "", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
118 a.real, a.imag, c.real, c.imag);
120 a_complex_logb(&c, a, b);
121 debug("logb(" A_COMPLEX_PRI("", "g", "", "g") "," A_COMPLEX_PRI("", "g", "", "g") ")=" A_COMPLEX_PRI("", "g", "", "g") "\n",
122 a.real, a.imag, b.real, b.imag, c.real, c.imag);
125 static void test_tri(a_complex x)
127 a_complex z;
129 debug("sin(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
130 a_complex_sin(&z, x);
131 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
133 debug("cos(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
134 a_complex_cos(&z, x);
135 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
137 debug("tan(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
138 a_complex_tan(&z, x);
139 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
141 debug("sec(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
142 a_complex_sec(&z, x);
143 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
145 debug("csc(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
146 a_complex_csc(&z, x);
147 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
149 debug("cot(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
150 a_complex_cot(&z, x);
151 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
154 static void test_trih(a_complex x)
156 a_complex z;
158 debug("sinh(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
159 a_complex_sinh(&z, x);
160 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
162 debug("cosh(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
163 a_complex_cosh(&z, x);
164 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
166 debug("tanh(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
167 a_complex_tanh(&z, x);
168 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
170 debug("sech(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
171 a_complex_sech(&z, x);
172 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
174 debug("csch(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
175 a_complex_csch(&z, x);
176 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
178 debug("coth(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
179 a_complex_coth(&z, x);
180 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
183 static void test_atri(a_complex x)
185 a_complex z;
187 debug("asin(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
188 a_complex_asin(&z, x);
189 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
191 debug("acos(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
192 a_complex_acos(&z, x);
193 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
195 debug("atan(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
196 a_complex_atan(&z, x);
197 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
199 debug("asec(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
200 a_complex_asec(&z, x);
201 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
203 debug("acsc(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
204 a_complex_acsc(&z, x);
205 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
207 debug("acot(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
208 a_complex_acot(&z, x);
209 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
212 static void test_atrih(a_complex x)
214 a_complex z;
216 debug("asinh(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
217 a_complex_asinh(&z, x);
218 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
220 debug("acosh(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
221 a_complex_acosh(&z, x);
222 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
224 debug("atanh(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
225 a_complex_atanh(&z, x);
226 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
228 debug("asech(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
229 a_complex_asech(&z, x);
230 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
232 debug("acsch(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
233 a_complex_acsch(&z, x);
234 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
236 debug("acoth(" A_COMPLEX_PRI("", "g", "", "g"), x.real, x.imag);
237 a_complex_acoth(&z, x);
238 debug(")=" A_COMPLEX_PRI("", "g", "", "g") "\n", z.real, z.imag);
241 int main(int argc, char *argv[]) // NOLINT(misc-definitions-in-headers)
243 a_complex x = A_COMPLEX_C(0.0, 0.0);
244 a_complex y = a_complex_c(0.0, 0.0);
245 if (argc > 1)
247 a_complex_parse(&x, argv[1]);
249 if (argc > 2)
251 a_complex_parse(&y, argv[2]);
253 test(x, y);
254 test_tri(x);
255 test_trih(x);
256 test_atri(x);
257 test_atrih(x);
258 if (argc > 1)
260 debug("x=" A_COMPLEX_PRI("", "g", "", "g") " ", x.real, x.imag);
262 if (argc > 2)
264 debug("y=" A_COMPLEX_PRI("", "g", "", "g") " ", y.real, y.imag);
265 if (a_complex_eq(x, y)) { debug("x==y"); }
266 if (a_complex_ne(x, y)) { debug("x!=y"); }
268 if (argc > 1) { debug("\n"); }
269 return 0;