1 /*- 2 * Copyright (c) 2004 Stefan Farfeleder <stefanf@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * $FreeBSD: src/tools/regression/include/tgmath/tgmath.c,v 1.3 2012/11/17 01:53:49 svnexp Exp $ 27 */ 28 29 #include <sys/cdefs.h> 30 /* All of our functions have side effects, __pure2 causes functions calls to 31 * be optimised away. Stop that. */ 32 #undef __pure2 33 #define __pure2 34 35 #include <assert.h> 36 #include <stdio.h> 37 #include <tgmath.h> 38 39 int n_float, n_double, n_long_double; 40 int n_float_complex, n_double_complex, n_long_double_complex; 41 42 int currtest = 0; 43 44 #define TGMACRO(FNC) \ 45 TGMACRO_REAL(FNC) \ 46 TGMACRO_COMPLEX(c ## FNC) 47 48 #define TGMACRO_REAL(FNC) \ 49 float (FNC ## f)(float x) { n_float++; } \ 50 double (FNC)(double x) { n_double++; } \ 51 long double (FNC ## l)(long double x) { n_long_double++; } 52 53 #define TGMACRO_REAL_REAL(FNC) \ 54 float (FNC ## f)(float x, float y) { n_float++; } \ 55 double (FNC)(double x, double y) { n_double++; } \ 56 long double \ 57 (FNC ## l)(long double x, long double y) { n_long_double++; } 58 59 #define TGMACRO_REAL_FIXED_RET(FNC, TYPE) \ 60 TYPE (FNC ## f)(float x) { n_float++; } \ 61 TYPE (FNC)(double x) { n_double++; } \ 62 TYPE (FNC ## l)(long double x) { n_long_double++; } 63 64 #define TGMACRO_COMPLEX(FNC) \ 65 float complex (FNC ## f)(float complex x) { n_float_complex++; }\ 66 double complex (FNC)(double complex x) { n_double_complex++; } \ 67 long double complex \ 68 (FNC ## l)(long double complex x) { n_long_double_complex++; } 69 70 #define TGMACRO_COMPLEX_REAL_RET(FNC) \ 71 float (FNC ## f)(float complex x) { n_float_complex++; } \ 72 double (FNC)(double complex x) { n_double_complex++; } \ 73 long double \ 74 (FNC ## l)(long double complex x) { n_long_double_complex++; } 75 76 77 /* 7.22#4 */ 78 TGMACRO(acos) 79 TGMACRO(asin) 80 TGMACRO(atan) 81 TGMACRO(acosh) 82 TGMACRO(asinh) 83 TGMACRO(atanh) 84 TGMACRO(cos) 85 TGMACRO(sin) 86 TGMACRO(tan) 87 TGMACRO(cosh) 88 TGMACRO(sinh) 89 TGMACRO(tanh) 90 TGMACRO(exp) 91 TGMACRO(log) 92 TGMACRO_REAL_REAL(pow) 93 float complex (cpowf)(float complex x, float complex y) { n_float_complex++; } 94 double complex 95 (cpow)(double complex x, double complex y) { n_double_complex++; } 96 long double complex 97 (cpowl)(long double complex x, long double complex y) 98 { n_long_double_complex++; } 99 TGMACRO(sqrt) 100 TGMACRO_REAL(fabs) 101 TGMACRO_COMPLEX_REAL_RET(cabs) 102 103 /* 7.22#5 */ 104 TGMACRO_REAL_REAL(atan2) 105 TGMACRO_REAL(cbrt) 106 TGMACRO_REAL(ceil) 107 TGMACRO_REAL_REAL(copysign) 108 TGMACRO_REAL(erf) 109 TGMACRO_REAL(erfc) 110 TGMACRO_REAL(exp2) 111 TGMACRO_REAL(expm1) 112 TGMACRO_REAL_REAL(fdim) 113 TGMACRO_REAL(floor) 114 float (fmaf)(float x, float y, float z) { n_float++; } 115 double (fma)(double x, double y, double z) { n_double++; } 116 long double 117 (fmal)(long double x, long double y, long double z) { n_long_double++; } 118 TGMACRO_REAL_REAL(fmax) 119 TGMACRO_REAL_REAL(fmin) 120 TGMACRO_REAL_REAL(fmod) 121 float (frexpf)(float x, int *e) { n_float++; } 122 double (frexp)(double x, int *e) { n_double++; } 123 long double (frexpl)(long double x, int *e) { n_long_double++; } 124 TGMACRO_REAL_REAL(hypot) 125 TGMACRO_REAL_FIXED_RET(ilogb, int) 126 float (ldexpf)(float x, int e) { n_float++; } 127 double (ldexp)(double x, int e) { n_double++; } 128 long double (ldexpl)(long double x, int e) { n_long_double++; } 129 TGMACRO_REAL(lgamma) 130 TGMACRO_REAL_FIXED_RET(llrint, long long) 131 TGMACRO_REAL_FIXED_RET(llround, long long) 132 TGMACRO_REAL(log10) 133 TGMACRO_REAL(log1p) 134 TGMACRO_REAL(log2) 135 TGMACRO_REAL(logb) 136 TGMACRO_REAL_FIXED_RET(lrint, long) 137 TGMACRO_REAL_FIXED_RET(lround, long) 138 TGMACRO_REAL(nearbyint) 139 TGMACRO_REAL_REAL(nextafter) 140 float (nexttowardf)(float x, long double y) { n_float++; } 141 double (nexttoward)(double x, long double y) { n_double++; } 142 long double (nexttowardl)(long double x, long double y) { n_long_double++; } 143 TGMACRO_REAL_REAL(remainder) 144 float (remquof)(float x, float y, int *q) { n_float++; } 145 double (remquo)(double x, double y, int *q) { n_double++; } 146 long double (remquol)(long double x, long double y, int *q) { n_long_double++; } 147 TGMACRO_REAL(rint) 148 TGMACRO_REAL(round) 149 float (scalbnf)(float x, int n) { n_float++; } 150 double (scalbn)(double x, int n) { n_double++; } 151 long double (scalbnl)(long double x, int n) { n_long_double++; } 152 float (scalblnf)(float x, long n) { n_float++; } 153 double (scalbln)(double x, long n) { n_double++; } 154 long double (scalblnl)(long double x, long n) { n_long_double++; } 155 TGMACRO_REAL(tgamma) 156 TGMACRO_REAL(trunc) 157 158 /* 7.22#6 */ 159 TGMACRO_COMPLEX_REAL_RET(carg) 160 TGMACRO_COMPLEX_REAL_RET(cimag) 161 TGMACRO_COMPLEX(conj) 162 TGMACRO_COMPLEX(cproj) 163 TGMACRO_COMPLEX_REAL_RET(creal) 164 165 166 long double ld; 167 double d; 168 float f; 169 long double complex ldc; 170 double complex dc; 171 float complex fc; 172 unsigned long long ull; 173 int i; 174 _Bool b; 175 176 #define SAMETYPE(EXP, TYPE) \ 177 __builtin_types_compatible_p(__typeof__(EXP), TYPE) 178 179 #define CLEAR_COUNTERS \ 180 (n_float = n_double = n_long_double = 0, \ 181 n_float_complex = n_double_complex = n_long_double_complex = 0, 1) 182 183 #define RUN_TEST(EXP, TYPE) (EXP, SAMETYPE(EXP, TYPE)) 184 185 #define PASS_REAL_ARG_REAL_RET(FNC) PASS_REAL_ARG_REAL_RET_(FNC,) 186 187 #define PASS_REAL_ARG_REAL_RET_(FNC, SUFFIX) \ 188 CLEAR_COUNTERS && \ 189 RUN_TEST(FNC(1.l), long double) && \ 190 RUN_TEST(FNC(ld), long double) && \ 191 n_long_double ## SUFFIX == 2 && \ 192 RUN_TEST(FNC(1.), double) && \ 193 RUN_TEST(FNC(d), double) && \ 194 RUN_TEST(FNC(1ull), double) && \ 195 RUN_TEST(FNC(ull), double) && \ 196 RUN_TEST(FNC(1), double) && \ 197 RUN_TEST(FNC(i), double) && \ 198 RUN_TEST(FNC((_Bool)0), double) && \ 199 RUN_TEST(FNC(b), double) && \ 200 n_double ## SUFFIX == 8 && \ 201 RUN_TEST(FNC(1.f), float) && \ 202 RUN_TEST(FNC(f), float) && \ 203 n_float ## SUFFIX == 2 204 205 #define PASS_REAL_ARG_FIXED_RET(FNC, RET) \ 206 CLEAR_COUNTERS && \ 207 RUN_TEST(FNC(1.l), RET) && \ 208 RUN_TEST(FNC(ld), RET) && \ 209 n_long_double == 2 && \ 210 RUN_TEST(FNC(1.), RET) && \ 211 RUN_TEST(FNC(d), RET) && \ 212 RUN_TEST(FNC(1ull), RET) && \ 213 RUN_TEST(FNC(ull), RET) && \ 214 RUN_TEST(FNC(1), RET) && \ 215 RUN_TEST(FNC(i), RET) && \ 216 RUN_TEST(FNC((_Bool)0), RET) && \ 217 RUN_TEST(FNC(b), RET) && \ 218 n_double == 8 && \ 219 RUN_TEST(FNC(1.f), RET) && \ 220 RUN_TEST(FNC(f), RET) && \ 221 n_float == 2 222 223 #define PASS_REAL_FIXED_ARG_REAL_RET(FNC, ARG2) \ 224 CLEAR_COUNTERS && \ 225 RUN_TEST(FNC(1.l, ARG2), long double) && \ 226 RUN_TEST(FNC(ld, ARG2), long double) && \ 227 n_long_double == 2 && \ 228 RUN_TEST(FNC(1., ARG2), double) && \ 229 RUN_TEST(FNC(d, ARG2), double) && \ 230 RUN_TEST(FNC(1ull, ARG2), double) && \ 231 RUN_TEST(FNC(ull, ARG2), double) && \ 232 RUN_TEST(FNC(1, ARG2), double) && \ 233 RUN_TEST(FNC(i, ARG2), double) && \ 234 RUN_TEST(FNC((_Bool)0, ARG2), double) && \ 235 RUN_TEST(FNC(b, ARG2), double) && \ 236 n_double == 8 && \ 237 RUN_TEST(FNC(1.f, ARG2), float) && \ 238 RUN_TEST(FNC(f, ARG2), float) && \ 239 n_float == 2 240 241 #define PASS_REAL_REAL_ARG_REAL_RET(FNC) \ 242 CLEAR_COUNTERS && \ 243 RUN_TEST(FNC(1.l, 1.l), long double) && \ 244 RUN_TEST(FNC(1.l, 1.), long double) && \ 245 RUN_TEST(FNC(1.l, 1.f), long double) && \ 246 RUN_TEST(FNC(1.l, 1), long double) && \ 247 RUN_TEST(FNC(1.l, (_Bool)0), long double) && \ 248 RUN_TEST(FNC(1.l, ld), long double) && \ 249 RUN_TEST(FNC(1., ld), long double) && \ 250 RUN_TEST(FNC(1.f, ld), long double) && \ 251 RUN_TEST(FNC(1, ld), long double) && \ 252 RUN_TEST(FNC((_Bool)0, ld), long double) && \ 253 n_long_double == 10 && \ 254 RUN_TEST(FNC(d, 1.), double) && \ 255 RUN_TEST(FNC(d, 1.f), double) && \ 256 RUN_TEST(FNC(d, 1l), double) && \ 257 RUN_TEST(FNC(d, (_Bool)0), double) && \ 258 RUN_TEST(FNC(1., 1.), double) && \ 259 RUN_TEST(FNC(1.f, 1.), double) && \ 260 RUN_TEST(FNC(1l, 1.), double) && \ 261 RUN_TEST(FNC((_Bool)0, 1.), double) && \ 262 RUN_TEST(FNC(1ull, f), double) && \ 263 RUN_TEST(FNC(1.f, ull), double) && \ 264 RUN_TEST(FNC(1, 1l), double) && \ 265 RUN_TEST(FNC(1u, i), double) && \ 266 RUN_TEST(FNC((_Bool)0, 1.f), double) && \ 267 RUN_TEST(FNC(1.f, b), double) && \ 268 n_double == 14 && \ 269 RUN_TEST(FNC(1.f, 1.f), float) && \ 270 RUN_TEST(FNC(1.f, 1.f), float) && \ 271 RUN_TEST(FNC(f, 1.f), float) && \ 272 RUN_TEST(FNC(f, f), float) && \ 273 n_float == 4 274 275 #define PASS_REAL_REAL_FIXED_ARG_REAL_RET(FNC, ARG3) \ 276 CLEAR_COUNTERS && \ 277 RUN_TEST(FNC(1.l, 1.l, ARG3), long double) && \ 278 RUN_TEST(FNC(1.l, 1., ARG3), long double) && \ 279 RUN_TEST(FNC(1.l, 1.f, ARG3), long double) && \ 280 RUN_TEST(FNC(1.l, 1, ARG3), long double) && \ 281 RUN_TEST(FNC(1.l, (_Bool)0, ARG3), long double) && \ 282 RUN_TEST(FNC(1.l, ld, ARG3), long double) && \ 283 RUN_TEST(FNC(1., ld, ARG3), long double) && \ 284 RUN_TEST(FNC(1.f, ld, ARG3), long double) && \ 285 RUN_TEST(FNC(1, ld, ARG3), long double) && \ 286 RUN_TEST(FNC((_Bool)0, ld, ARG3), long double) && \ 287 n_long_double == 10 && \ 288 RUN_TEST(FNC(d, 1., ARG3), double) && \ 289 RUN_TEST(FNC(d, 1.f, ARG3), double) && \ 290 RUN_TEST(FNC(d, 1l, ARG3), double) && \ 291 RUN_TEST(FNC(d, (_Bool)0, ARG3), double) && \ 292 RUN_TEST(FNC(1., 1., ARG3), double) && \ 293 RUN_TEST(FNC(1.f, 1., ARG3), double) && \ 294 RUN_TEST(FNC(1l, 1., ARG3), double) && \ 295 RUN_TEST(FNC((_Bool)0, 1., ARG3), double) && \ 296 RUN_TEST(FNC(1ull, f, ARG3), double) && \ 297 RUN_TEST(FNC(1.f, ull, ARG3), double) && \ 298 RUN_TEST(FNC(1, 1l, ARG3), double) && \ 299 RUN_TEST(FNC(1u, i, ARG3), double) && \ 300 RUN_TEST(FNC((_Bool)0, 1.f, ARG3), double) && \ 301 RUN_TEST(FNC(1.f, b, ARG3), double) && \ 302 n_double == 14 && \ 303 RUN_TEST(FNC(1.f, 1.f, ARG3), float) && \ 304 RUN_TEST(FNC(1.f, 1.f, ARG3), float) && \ 305 RUN_TEST(FNC(f, 1.f, ARG3), float) && \ 306 RUN_TEST(FNC(f, f, ARG3), float) && \ 307 n_float == 4 308 309 #define PASS_REAL_REAL_REAL_ARG_REAL_RET(FNC) \ 310 CLEAR_COUNTERS && \ 311 RUN_TEST(FNC(ld, d, f), long double) && \ 312 RUN_TEST(FNC(1, ld, ld), long double) && \ 313 RUN_TEST(FNC(1, d, ld), long double) && \ 314 n_long_double == 3 && \ 315 RUN_TEST(FNC(1, f, 1.f), double) && \ 316 RUN_TEST(FNC(f, d, 1.f), double) && \ 317 RUN_TEST(FNC(f, 1.f, 1.), double) && \ 318 n_double == 3 && \ 319 RUN_TEST(FNC(f, 1.f, f), float) && \ 320 n_float == 1 321 322 #define PASS_REAL_ARG_COMPLEX_RET(FNC) \ 323 CLEAR_COUNTERS && \ 324 RUN_TEST(FNC(1.l), long double complex) && \ 325 RUN_TEST(FNC(ld), long double complex) && \ 326 n_long_double_complex == 2 && \ 327 RUN_TEST(FNC(1.), double complex) && \ 328 RUN_TEST(FNC(d), double complex) && \ 329 RUN_TEST(FNC(1l), double complex) && \ 330 RUN_TEST(FNC(i), double complex) && \ 331 RUN_TEST(FNC(b), double complex) && \ 332 n_double_complex == 5 && \ 333 RUN_TEST(FNC(1.f), float complex) && \ 334 RUN_TEST(FNC(f), float complex) && \ 335 n_float_complex == 2 336 337 #define PASS_COMPLEX_ARG_COMPLEX_RET(FNC) \ 338 CLEAR_COUNTERS && \ 339 RUN_TEST(FNC(ldc), long double complex) && \ 340 n_long_double_complex == 1 && \ 341 RUN_TEST(FNC(dc), double complex) && \ 342 n_double_complex == 1 && \ 343 RUN_TEST(FNC(fc), float complex) && \ 344 RUN_TEST(FNC(I), float complex) && \ 345 n_float_complex == 2 346 347 #define PASS_COMPLEX_ARG_REAL_RET(FNC) \ 348 CLEAR_COUNTERS && \ 349 RUN_TEST(FNC(ldc), long double) && \ 350 n_long_double_complex == 1 && \ 351 RUN_TEST(FNC(dc), double) && \ 352 n_double_complex == 1 && \ 353 RUN_TEST(FNC(fc), float) && \ 354 RUN_TEST(FNC(I), float) && \ 355 n_float_complex == 2 356 357 #define PASS_COMPLEX_COMPLEX_ARG_COMPLEX_RET(FNC) \ 358 CLEAR_COUNTERS && \ 359 RUN_TEST(FNC(ldc, ldc), long double complex) && \ 360 RUN_TEST(FNC(ldc, dc), long double complex) && \ 361 RUN_TEST(FNC(ldc, fc), long double complex) && \ 362 RUN_TEST(FNC(ldc, ld), long double complex) && \ 363 RUN_TEST(FNC(ldc, d), long double complex) && \ 364 RUN_TEST(FNC(ldc, f), long double complex) && \ 365 RUN_TEST(FNC(ldc, i), long double complex) && \ 366 RUN_TEST(FNC(dc, ldc), long double complex) && \ 367 RUN_TEST(FNC(I, ldc), long double complex) && \ 368 RUN_TEST(FNC(1.l, ldc), long double complex) && \ 369 RUN_TEST(FNC(1., ldc), long double complex) && \ 370 RUN_TEST(FNC(1.f, ldc), long double complex) && \ 371 RUN_TEST(FNC(1, ldc), long double complex) && \ 372 RUN_TEST(FNC(ld, dc), long double complex) && \ 373 RUN_TEST(FNC(ld, fc), long double complex) && \ 374 RUN_TEST(FNC(I, 1.l), long double complex) && \ 375 RUN_TEST(FNC(dc, 1.l), long double complex) && \ 376 n_long_double_complex == 17 && \ 377 RUN_TEST(FNC(dc, dc), double complex) && \ 378 RUN_TEST(FNC(dc, fc), double complex) && \ 379 RUN_TEST(FNC(dc, d), double complex) && \ 380 RUN_TEST(FNC(dc, f), double complex) && \ 381 RUN_TEST(FNC(dc, ull), double complex) && \ 382 RUN_TEST(FNC(I, dc), double complex) && \ 383 RUN_TEST(FNC(1., dc), double complex) && \ 384 RUN_TEST(FNC(1, dc), double complex) && \ 385 RUN_TEST(FNC(fc, d), double complex) && \ 386 RUN_TEST(FNC(1, I), double complex) && \ 387 n_double_complex == 10 && \ 388 RUN_TEST(FNC(fc, fc), float complex) && \ 389 RUN_TEST(FNC(fc, I), float complex) && \ 390 RUN_TEST(FNC(1.f, fc), float complex) && \ 391 n_float_complex == 3 392 393 int failed = 0; 394 #define PRINT(STR, X) do { \ 395 currtest++; \ 396 int result = (X); \ 397 if (!result) \ 398 failed = 1; \ 399 printf("%s %d - %s\n", result ? "ok" : "not ok", currtest, (STR)); \ 400 fflush(stdout); \ 401 } while (0) 402 403 int 404 main(void) 405 { 406 printf("1..60\n"); 407 408 /* 7.22#4 */ 409 PRINT("acos", 410 PASS_REAL_ARG_REAL_RET(acos) && 411 PASS_COMPLEX_ARG_COMPLEX_RET(acos)); 412 413 PRINT("asin", 414 PASS_REAL_ARG_REAL_RET(asin) && 415 PASS_COMPLEX_ARG_COMPLEX_RET(asin)); 416 417 PRINT("atan", 418 PASS_REAL_ARG_REAL_RET(atan) && 419 PASS_COMPLEX_ARG_COMPLEX_RET(atan)); 420 421 PRINT("acosh", 422 PASS_REAL_ARG_REAL_RET(acosh) && 423 PASS_COMPLEX_ARG_COMPLEX_RET(acosh)); 424 425 PRINT("asinh", 426 PASS_REAL_ARG_REAL_RET(asinh) && 427 PASS_COMPLEX_ARG_COMPLEX_RET(asinh)); 428 429 PRINT("atanh", 430 PASS_REAL_ARG_REAL_RET(atanh) && 431 PASS_COMPLEX_ARG_COMPLEX_RET(atanh)); 432 433 PRINT("cos", 434 PASS_REAL_ARG_REAL_RET(cos) && 435 PASS_COMPLEX_ARG_COMPLEX_RET(cos)); 436 437 PRINT("sin", 438 PASS_REAL_ARG_REAL_RET(sin) && 439 PASS_COMPLEX_ARG_COMPLEX_RET(sin)); 440 441 PRINT("tan", 442 PASS_REAL_ARG_REAL_RET(tan) && 443 PASS_COMPLEX_ARG_COMPLEX_RET(tan)); 444 445 PRINT("cosh", 446 PASS_REAL_ARG_REAL_RET(cosh) && 447 PASS_COMPLEX_ARG_COMPLEX_RET(cosh)); 448 449 PRINT("sinh", 450 PASS_REAL_ARG_REAL_RET(sinh) && 451 PASS_COMPLEX_ARG_COMPLEX_RET(sinh)); 452 453 PRINT("tanh", 454 PASS_REAL_ARG_REAL_RET(tanh) && 455 PASS_COMPLEX_ARG_COMPLEX_RET(tanh)); 456 457 PRINT("exp", 458 PASS_REAL_ARG_REAL_RET(exp) && 459 PASS_COMPLEX_ARG_COMPLEX_RET(exp)); 460 461 PRINT("log", 462 PASS_REAL_ARG_REAL_RET(log) && 463 PASS_COMPLEX_ARG_COMPLEX_RET(log)); 464 465 PRINT("pow", 466 PASS_REAL_REAL_ARG_REAL_RET(pow) && 467 PASS_COMPLEX_COMPLEX_ARG_COMPLEX_RET(pow)); 468 469 PRINT("sqrt", 470 PASS_REAL_ARG_REAL_RET(sqrt) && 471 PASS_COMPLEX_ARG_COMPLEX_RET(sqrt)); 472 473 PRINT("fabs", 474 PASS_REAL_ARG_REAL_RET(fabs) && 475 PASS_COMPLEX_ARG_REAL_RET(fabs)); 476 477 /* 7.22#5 */ 478 PRINT("atan2", 479 PASS_REAL_REAL_ARG_REAL_RET(atan2)); 480 481 PRINT("cbrt", 482 PASS_REAL_ARG_REAL_RET(cbrt)); 483 484 PRINT("ceil", 485 PASS_REAL_ARG_REAL_RET(ceil)); 486 487 PRINT("copysign", 488 PASS_REAL_REAL_ARG_REAL_RET(copysign)); 489 490 PRINT("erf", 491 PASS_REAL_ARG_REAL_RET(erf)); 492 493 PRINT("erfc", 494 PASS_REAL_ARG_REAL_RET(erfc)); 495 496 PRINT("exp2", 497 PASS_REAL_ARG_REAL_RET(exp2)); 498 499 PRINT("expm1", 500 PASS_REAL_ARG_REAL_RET(expm1)); 501 502 PRINT("fdim", 503 PASS_REAL_REAL_ARG_REAL_RET(fdim)); 504 505 PRINT("floor", 506 PASS_REAL_ARG_REAL_RET(floor)); 507 508 PRINT("fma", 509 PASS_REAL_REAL_REAL_ARG_REAL_RET(fma)); 510 511 PRINT("fmax", 512 PASS_REAL_REAL_ARG_REAL_RET(fmax)); 513 514 PRINT("fmin", 515 PASS_REAL_REAL_ARG_REAL_RET(fmin)); 516 517 PRINT("fmod", 518 PASS_REAL_REAL_ARG_REAL_RET(fmod)); 519 520 PRINT("frexp", 521 PASS_REAL_FIXED_ARG_REAL_RET(frexp, &i)); 522 523 PRINT("hypot", 524 PASS_REAL_REAL_ARG_REAL_RET(hypot)); 525 526 PRINT("ilogb", 527 PASS_REAL_ARG_FIXED_RET(ilogb, int)); 528 529 PRINT("ldexp", 530 PASS_REAL_FIXED_ARG_REAL_RET(ldexp, 1) && 531 PASS_REAL_FIXED_ARG_REAL_RET(ldexp, ld) && 532 PASS_REAL_FIXED_ARG_REAL_RET(ldexp, ldc)); 533 534 PRINT("lgamma", 535 PASS_REAL_ARG_REAL_RET(lgamma)); 536 537 PRINT("llrint", 538 PASS_REAL_ARG_FIXED_RET(llrint, long long)); 539 540 PRINT("llround", 541 PASS_REAL_ARG_FIXED_RET(llround, long long)); 542 543 PRINT("log10", 544 PASS_REAL_ARG_REAL_RET(log10)); 545 546 PRINT("log1p", 547 PASS_REAL_ARG_REAL_RET(log1p)); 548 549 PRINT("log2", 550 PASS_REAL_ARG_REAL_RET(log2)); 551 552 PRINT("logb", 553 PASS_REAL_ARG_REAL_RET(logb)); 554 555 PRINT("lrint", 556 PASS_REAL_ARG_FIXED_RET(lrint, long)); 557 558 PRINT("lround", 559 PASS_REAL_ARG_FIXED_RET(lround, long)); 560 561 PRINT("nearbyint", 562 PASS_REAL_ARG_REAL_RET(nearbyint)); 563 564 PRINT("nextafter", 565 PASS_REAL_REAL_ARG_REAL_RET(nextafter)); 566 567 PRINT("nexttoward", 568 PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, 1) && 569 PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, ull) && 570 PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, d) && 571 PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, fc)); 572 573 PRINT("remainder", 574 PASS_REAL_REAL_ARG_REAL_RET(remainder)); 575 576 PRINT("remquo", 577 PASS_REAL_REAL_FIXED_ARG_REAL_RET(remquo, &i)); 578 579 PRINT("rint", 580 PASS_REAL_ARG_REAL_RET(rint)); 581 582 PRINT("round", 583 PASS_REAL_ARG_REAL_RET(round)); 584 585 PRINT("scalbn", 586 PASS_REAL_FIXED_ARG_REAL_RET(scalbn, 1) && 587 PASS_REAL_FIXED_ARG_REAL_RET(scalbn, b) && 588 PASS_REAL_FIXED_ARG_REAL_RET(scalbn, I)); 589 590 PRINT("scalbln", 591 PASS_REAL_FIXED_ARG_REAL_RET(scalbln, i) && 592 PASS_REAL_FIXED_ARG_REAL_RET(scalbln, 1.l) && 593 PASS_REAL_FIXED_ARG_REAL_RET(scalbln, dc)); 594 595 PRINT("tgamma", 596 PASS_REAL_ARG_REAL_RET(tgamma)); 597 598 PRINT("trunc", 599 PASS_REAL_ARG_REAL_RET(trunc)); 600 601 /* 7.22#6 */ 602 PRINT("carg", 603 PASS_REAL_ARG_REAL_RET_(carg, _complex) && 604 PASS_COMPLEX_ARG_REAL_RET(carg)); 605 606 PRINT("cimag", 607 PASS_REAL_ARG_REAL_RET_(cimag, _complex) && 608 PASS_COMPLEX_ARG_REAL_RET(cimag)); 609 610 PRINT("conj", 611 PASS_REAL_ARG_COMPLEX_RET(conj) && 612 PASS_COMPLEX_ARG_COMPLEX_RET(conj)); 613 614 PRINT("cproj", 615 PASS_REAL_ARG_COMPLEX_RET(cproj) && 616 PASS_COMPLEX_ARG_COMPLEX_RET(cproj)); 617 618 PRINT("creal", 619 PASS_REAL_ARG_REAL_RET_(creal, _complex) && 620 PASS_COMPLEX_ARG_REAL_RET(creal)); 621 } 622