1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #define _GNU_SOURCE 1 18 #include <math.h> 19 20 // This include (and the associated definition of __test_capture_signbit) 21 // must be placed before any files that include <cmath> (gtest.h in this case). 22 // 23 // <math.h> is required to define generic macros signbit, isfinite and 24 // several other such functions. 25 // 26 // <cmath> is required to undef declarations of these macros in the global 27 // namespace and make equivalent functions available in namespace std. Our 28 // stlport implementation does this only for signbit, isfinite, isinf and 29 // isnan. 30 // 31 // NOTE: We don't write our test using std::signbit because we want to be 32 // sure that we're testing the bionic version of signbit. The C++ libraries 33 // are free to reimplement signbit or delegate to compiler builtins if they 34 // please. 35 36 namespace { 37 template<typename T> inline int test_capture_signbit(const T in) { 38 return signbit(in); 39 } 40 template<typename T> inline int test_capture_isfinite(const T in) { 41 return isfinite(in); 42 } 43 template<typename T> inline int test_capture_isnan(const T in) { 44 return isnan(in); 45 } 46 template<typename T> inline int test_capture_isinf(const T in) { 47 return isinf(in); 48 } 49 } 50 51 #include "math_data_test.h" 52 53 #include <gtest/gtest.h> 54 55 #include <fenv.h> 56 #include <float.h> 57 #include <limits.h> 58 #include <stdint.h> 59 60 #include <android-base/scopeguard.h> 61 62 float float_subnormal() { 63 union { 64 float f; 65 uint32_t i; 66 } u; 67 u.i = 0x007fffff; 68 return u.f; 69 } 70 71 double double_subnormal() { 72 union { 73 double d; 74 uint64_t i; 75 } u; 76 u.i = 0x000fffffffffffffLL; 77 return u.d; 78 } 79 80 long double ldouble_subnormal() { 81 union { 82 long double e; 83 unsigned char c[sizeof(long double)]; 84 } u; 85 86 // Subnormals must have a zero exponent and non zero significand. 87 // On all supported representation the 17 bit (counting from either sides) 88 // is part of the significand so it should be enough to set that. 89 // It also applies for the case sizeof(double) = sizeof(long double) 90 for (unsigned int i = 0; i < sizeof(long double); i++) { 91 u.c[i] = 0x00; 92 } 93 u.c[sizeof(long double) - 3] = 0x80; 94 u.c[2] = 0x80; 95 96 return u.e; 97 } 98 99 TEST(math, fpclassify) { 100 ASSERT_EQ(FP_INFINITE, fpclassify(INFINITY)); 101 ASSERT_EQ(FP_INFINITE, fpclassify(HUGE_VALF)); 102 ASSERT_EQ(FP_INFINITE, fpclassify(HUGE_VAL)); 103 ASSERT_EQ(FP_INFINITE, fpclassify(HUGE_VALL)); 104 105 ASSERT_EQ(FP_NAN, fpclassify(nanf(""))); 106 ASSERT_EQ(FP_NAN, fpclassify(nan(""))); 107 ASSERT_EQ(FP_NAN, fpclassify(nanl(""))); 108 109 ASSERT_EQ(FP_NORMAL, fpclassify(1.0f)); 110 ASSERT_EQ(FP_NORMAL, fpclassify(1.0)); 111 ASSERT_EQ(FP_NORMAL, fpclassify(1.0L)); 112 113 ASSERT_EQ(FP_SUBNORMAL, fpclassify(float_subnormal())); 114 ASSERT_EQ(FP_SUBNORMAL, fpclassify(double_subnormal())); 115 ASSERT_EQ(FP_SUBNORMAL, fpclassify(ldouble_subnormal())); 116 117 ASSERT_EQ(FP_ZERO, fpclassify(0.0f)); 118 ASSERT_EQ(FP_ZERO, fpclassify(0.0)); 119 ASSERT_EQ(FP_ZERO, fpclassify(0.0L)); 120 } 121 122 TEST(math, isfinite) { 123 ASSERT_TRUE(test_capture_isfinite(123.0f)); 124 ASSERT_TRUE(test_capture_isfinite(123.0)); 125 ASSERT_TRUE(test_capture_isfinite(123.0L)); 126 ASSERT_FALSE(test_capture_isfinite(HUGE_VALF)); 127 ASSERT_FALSE(test_capture_isfinite(HUGE_VAL)); 128 ASSERT_FALSE(test_capture_isfinite(HUGE_VALL)); 129 } 130 131 TEST(math, isinf) { 132 ASSERT_FALSE(test_capture_isinf(123.0f)); 133 ASSERT_FALSE(test_capture_isinf(123.0)); 134 ASSERT_FALSE(test_capture_isinf(123.0L)); 135 ASSERT_TRUE(test_capture_isinf(HUGE_VALF)); 136 ASSERT_TRUE(test_capture_isinf(HUGE_VAL)); 137 ASSERT_TRUE(test_capture_isinf(HUGE_VALL)); 138 } 139 140 TEST(math, isnan) { 141 ASSERT_FALSE(test_capture_isnan(123.0f)); 142 ASSERT_FALSE(test_capture_isnan(123.0)); 143 ASSERT_FALSE(test_capture_isnan(123.0L)); 144 ASSERT_TRUE(test_capture_isnan(nanf(""))); 145 ASSERT_TRUE(test_capture_isnan(nan(""))); 146 ASSERT_TRUE(test_capture_isnan(nanl(""))); 147 } 148 149 TEST(math, isnormal) { 150 ASSERT_TRUE(isnormal(123.0f)); 151 ASSERT_TRUE(isnormal(123.0)); 152 ASSERT_TRUE(isnormal(123.0L)); 153 ASSERT_FALSE(isnormal(float_subnormal())); 154 ASSERT_FALSE(isnormal(double_subnormal())); 155 ASSERT_FALSE(isnormal(ldouble_subnormal())); 156 } 157 158 // TODO: isgreater, isgreaterequals, isless, islessequal, islessgreater, isunordered 159 TEST(math, signbit) { 160 ASSERT_EQ(0, test_capture_signbit(0.0f)); 161 ASSERT_EQ(0, test_capture_signbit(0.0)); 162 ASSERT_EQ(0, test_capture_signbit(0.0L)); 163 164 ASSERT_EQ(0, test_capture_signbit(1.0f)); 165 ASSERT_EQ(0, test_capture_signbit(1.0)); 166 ASSERT_EQ(0, test_capture_signbit(1.0L)); 167 168 ASSERT_NE(0, test_capture_signbit(-1.0f)); 169 ASSERT_NE(0, test_capture_signbit(-1.0)); 170 ASSERT_NE(0, test_capture_signbit(-1.0L)); 171 } 172 173 TEST(math, __fpclassifyd) { 174 #if defined(__GLIBC__) 175 #define __fpclassifyd __fpclassify 176 #endif 177 ASSERT_EQ(FP_INFINITE, __fpclassifyd(HUGE_VAL)); 178 ASSERT_EQ(FP_NAN, __fpclassifyd(nan(""))); 179 ASSERT_EQ(FP_NORMAL, __fpclassifyd(1.0)); 180 ASSERT_EQ(FP_SUBNORMAL, __fpclassifyd(double_subnormal())); 181 ASSERT_EQ(FP_ZERO, __fpclassifyd(0.0)); 182 } 183 184 TEST(math, __fpclassifyf) { 185 ASSERT_EQ(FP_INFINITE, __fpclassifyf(HUGE_VALF)); 186 ASSERT_EQ(FP_NAN, __fpclassifyf(nanf(""))); 187 ASSERT_EQ(FP_NORMAL, __fpclassifyf(1.0f)); 188 ASSERT_EQ(FP_SUBNORMAL, __fpclassifyf(float_subnormal())); 189 ASSERT_EQ(FP_ZERO, __fpclassifyf(0.0f)); 190 } 191 192 TEST(math, __fpclassifyl) { 193 EXPECT_EQ(FP_INFINITE, __fpclassifyl(HUGE_VALL)); 194 EXPECT_EQ(FP_NAN, __fpclassifyl(nanl(""))); 195 EXPECT_EQ(FP_NORMAL, __fpclassifyl(1.0L)); 196 EXPECT_EQ(FP_SUBNORMAL, __fpclassifyl(ldouble_subnormal())); 197 EXPECT_EQ(FP_ZERO, __fpclassifyl(0.0L)); 198 } 199 200 TEST(math, finitef) { 201 ASSERT_TRUE(finitef(123.0f)); 202 ASSERT_FALSE(finitef(HUGE_VALF)); 203 } 204 205 TEST(math, __isfinite) { 206 #if defined(__GLIBC__) 207 #define __isfinite __finite 208 #endif 209 ASSERT_TRUE(__isfinite(123.0)); 210 ASSERT_FALSE(__isfinite(HUGE_VAL)); 211 } 212 213 TEST(math, __isfinitef) { 214 #if defined(__GLIBC__) 215 #define __isfinitef __finitef 216 #endif 217 ASSERT_TRUE(__isfinitef(123.0f)); 218 ASSERT_FALSE(__isfinitef(HUGE_VALF)); 219 } 220 221 TEST(math, __isfinitel) { 222 #if defined(__GLIBC__) 223 #define __isfinitel __finitel 224 #endif 225 ASSERT_TRUE(__isfinitel(123.0L)); 226 ASSERT_FALSE(__isfinitel(HUGE_VALL)); 227 } 228 229 TEST(math, finite) { 230 ASSERT_TRUE(finite(123.0)); 231 ASSERT_FALSE(finite(HUGE_VAL)); 232 } 233 234 TEST(math, isinf_function) { 235 // The isinf macro deals with all three types; the isinf function is for doubles. 236 ASSERT_FALSE((isinf)(123.0)); 237 ASSERT_TRUE((isinf)(HUGE_VAL)); 238 } 239 240 TEST(math, __isinff) { 241 ASSERT_FALSE(__isinff(123.0f)); 242 ASSERT_TRUE(__isinff(HUGE_VALF)); 243 } 244 245 TEST(math, __isinfl) { 246 ASSERT_FALSE(__isinfl(123.0L)); 247 ASSERT_TRUE(__isinfl(HUGE_VALL)); 248 } 249 250 TEST(math, isnan_function) { 251 // The isnan macro deals with all three types; the isnan function is for doubles. 252 ASSERT_FALSE((isnan)(123.0)); 253 ASSERT_TRUE((isnan)(nan(""))); 254 } 255 256 TEST(math, __isnanf) { 257 ASSERT_FALSE(__isnanf(123.0f)); 258 ASSERT_TRUE(__isnanf(nanf(""))); 259 } 260 261 TEST(math, __isnanl) { 262 ASSERT_FALSE(__isnanl(123.0L)); 263 ASSERT_TRUE(__isnanl(nanl(""))); 264 } 265 266 TEST(math, isnanf) { 267 ASSERT_FALSE(isnanf(123.0f)); 268 ASSERT_TRUE(isnanf(nanf(""))); 269 } 270 271 TEST(math, __isnormal) { 272 #if defined(__BIONIC__) 273 ASSERT_TRUE(__isnormal(123.0)); 274 ASSERT_FALSE(__isnormal(double_subnormal())); 275 #else // __BIONIC__ 276 GTEST_LOG_(INFO) << "glibc doesn't have __isnormal.\n"; 277 #endif // __BIONIC__ 278 } 279 280 TEST(math, __isnormalf) { 281 #if defined(__BIONIC__) 282 ASSERT_TRUE(__isnormalf(123.0f)); 283 ASSERT_FALSE(__isnormalf(float_subnormal())); 284 #else // __BIONIC__ 285 GTEST_LOG_(INFO) << "glibc doesn't have __isnormalf.\n"; 286 #endif // __BIONIC__ 287 } 288 289 TEST(math, __isnormall) { 290 #if defined(__BIONIC__) 291 ASSERT_TRUE(__isnormall(123.0L)); 292 ASSERT_FALSE(__isnormall(ldouble_subnormal())); 293 #else // __BIONIC__ 294 GTEST_LOG_(INFO) << "glibc doesn't have __isnormall.\n"; 295 #endif // __BIONIC__ 296 } 297 298 TEST(math, __signbit) { 299 ASSERT_EQ(0, __signbit(0.0)); 300 ASSERT_EQ(0, __signbit(1.0)); 301 ASSERT_NE(0, __signbit(-1.0)); 302 } 303 304 TEST(math, __signbitf) { 305 ASSERT_EQ(0, __signbitf(0.0f)); 306 ASSERT_EQ(0, __signbitf(1.0f)); 307 ASSERT_NE(0, __signbitf(-1.0f)); 308 } 309 310 TEST(math, __signbitl) { 311 ASSERT_EQ(0L, __signbitl(0.0L)); 312 ASSERT_EQ(0L, __signbitl(1.0L)); 313 ASSERT_NE(0L, __signbitl(-1.0L)); 314 } 315 316 TEST(math, acos) { 317 ASSERT_DOUBLE_EQ(M_PI/2.0, acos(0.0)); 318 } 319 320 TEST(math, acosf) { 321 ASSERT_FLOAT_EQ(static_cast<float>(M_PI)/2.0f, acosf(0.0f)); 322 } 323 324 TEST(math, acosl) { 325 ASSERT_DOUBLE_EQ(M_PI/2.0L, acosl(0.0L)); 326 } 327 328 TEST(math, asin) { 329 ASSERT_DOUBLE_EQ(0.0, asin(0.0)); 330 } 331 332 TEST(math, asinf) { 333 ASSERT_FLOAT_EQ(0.0f, asinf(0.0f)); 334 } 335 336 TEST(math, asinl) { 337 ASSERT_DOUBLE_EQ(0.0L, asinl(0.0L)); 338 } 339 340 TEST(math, atan) { 341 ASSERT_DOUBLE_EQ(0.0, atan(0.0)); 342 } 343 344 TEST(math, atanf) { 345 ASSERT_FLOAT_EQ(0.0f, atanf(0.0f)); 346 } 347 348 TEST(math, atanl) { 349 ASSERT_DOUBLE_EQ(0.0L, atanl(0.0L)); 350 } 351 352 TEST(math, atan2) { 353 ASSERT_DOUBLE_EQ(0.0, atan2(0.0, 0.0)); 354 } 355 356 TEST(math, atan2f) { 357 ASSERT_FLOAT_EQ(0.0f, atan2f(0.0f, 0.0f)); 358 } 359 360 TEST(math, atan2l) { 361 ASSERT_DOUBLE_EQ(0.0L, atan2l(0.0L, 0.0L)); 362 } 363 364 TEST(math, cos) { 365 ASSERT_DOUBLE_EQ(1.0, cos(0.0)); 366 } 367 368 TEST(math, cosf) { 369 ASSERT_FLOAT_EQ(1.0f, cosf(0.0f)); 370 } 371 372 TEST(math, cosl) { 373 ASSERT_DOUBLE_EQ(1.0L, cosl(0.0L)); 374 } 375 376 TEST(math, sin) { 377 ASSERT_DOUBLE_EQ(0.0, sin(0.0)); 378 } 379 380 TEST(math, sinf) { 381 ASSERT_FLOAT_EQ(0.0f, sinf(0.0f)); 382 } 383 384 TEST(math, sinl) { 385 ASSERT_DOUBLE_EQ(0.0L, sinl(0.0L)); 386 } 387 388 TEST(math, sincos) { 389 double s, c; 390 sincos(0.0, &s, &c); 391 ASSERT_DOUBLE_EQ(0.0, s); 392 ASSERT_DOUBLE_EQ(1.0, c); 393 } 394 395 TEST(math, sincosf) { 396 float s, c; 397 sincosf(0.0f, &s, &c); 398 ASSERT_FLOAT_EQ(0.0f, s); 399 ASSERT_FLOAT_EQ(1.0f, c); 400 } 401 402 TEST(math, sincosl) { 403 long double s, c; 404 sincosl(0.0L, &s, &c); 405 ASSERT_DOUBLE_EQ(0.0L, s); 406 ASSERT_DOUBLE_EQ(1.0L, c); 407 } 408 409 TEST(math, tan) { 410 ASSERT_DOUBLE_EQ(0.0, tan(0.0)); 411 } 412 413 TEST(math, tanf) { 414 ASSERT_FLOAT_EQ(0.0f, tanf(0.0f)); 415 } 416 417 TEST(math, tanl) { 418 ASSERT_DOUBLE_EQ(0.0L, tanl(0.0L)); 419 } 420 421 TEST(math, acosh) { 422 ASSERT_DOUBLE_EQ(0.0, acosh(1.0)); 423 } 424 425 TEST(math, acoshf) { 426 ASSERT_FLOAT_EQ(0.0f, acoshf(1.0f)); 427 } 428 429 TEST(math, acoshl) { 430 ASSERT_DOUBLE_EQ(0.0L, acoshl(1.0L)); 431 } 432 433 TEST(math, asinh) { 434 ASSERT_DOUBLE_EQ(0.0, asinh(0.0)); 435 } 436 437 TEST(math, asinhf) { 438 ASSERT_FLOAT_EQ(0.0f, asinhf(0.0f)); 439 } 440 441 TEST(math, asinhl) { 442 ASSERT_DOUBLE_EQ(0.0L, asinhl(0.0L)); 443 } 444 445 TEST(math, atanh) { 446 ASSERT_DOUBLE_EQ(0.0, atanh(0.0)); 447 } 448 449 TEST(math, atanhf) { 450 ASSERT_FLOAT_EQ(0.0f, atanhf(0.0f)); 451 } 452 453 TEST(math, atanhl) { 454 ASSERT_DOUBLE_EQ(0.0L, atanhl(0.0L)); 455 } 456 457 TEST(math, cosh) { 458 ASSERT_DOUBLE_EQ(1.0, cosh(0.0)); 459 } 460 461 TEST(math, coshf) { 462 ASSERT_FLOAT_EQ(1.0f, coshf(0.0f)); 463 } 464 465 TEST(math, coshl) { 466 ASSERT_DOUBLE_EQ(1.0L, coshl(0.0L)); 467 } 468 469 TEST(math, sinh) { 470 ASSERT_DOUBLE_EQ(0.0, sinh(0.0)); 471 } 472 473 TEST(math, sinhf) { 474 ASSERT_FLOAT_EQ(0.0f, sinhf(0.0f)); 475 } 476 477 TEST(math, sinhl) { 478 ASSERT_DOUBLE_EQ(0.0L, sinhl(0.0L)); 479 } 480 481 TEST(math, tanh) { 482 ASSERT_DOUBLE_EQ(0.0, tanh(0.0)); 483 } 484 485 TEST(math, tanhf) { 486 ASSERT_FLOAT_EQ(0.0f, tanhf(0.0f)); 487 } 488 489 TEST(math, tanhl) { 490 ASSERT_DOUBLE_EQ(0.0L, tanhl(0.0L)); 491 } 492 493 TEST(math, log) { 494 ASSERT_DOUBLE_EQ(1.0, log(M_E)); 495 } 496 497 TEST(math, logf) { 498 ASSERT_FLOAT_EQ(1.0f, logf(static_cast<float>(M_E))); 499 } 500 501 TEST(math, logl) { 502 ASSERT_DOUBLE_EQ(1.0L, logl(M_E)); 503 } 504 505 TEST(math, log2) { 506 ASSERT_DOUBLE_EQ(12.0, log2(4096.0)); 507 } 508 509 TEST(math, log2f) { 510 ASSERT_FLOAT_EQ(12.0f, log2f(4096.0f)); 511 } 512 513 TEST(math, log2l) { 514 ASSERT_DOUBLE_EQ(12.0L, log2l(4096.0L)); 515 } 516 517 TEST(math, log10) { 518 ASSERT_DOUBLE_EQ(3.0, log10(1000.0)); 519 } 520 521 TEST(math, log10f) { 522 ASSERT_FLOAT_EQ(3.0f, log10f(1000.0f)); 523 } 524 525 TEST(math, log10l) { 526 ASSERT_DOUBLE_EQ(3.0L, log10l(1000.0L)); 527 } 528 529 TEST(math, cbrt) { 530 ASSERT_DOUBLE_EQ(3.0, cbrt(27.0)); 531 } 532 533 TEST(math, cbrtf) { 534 ASSERT_FLOAT_EQ(3.0f, cbrtf(27.0f)); 535 } 536 537 TEST(math, cbrtl) { 538 ASSERT_DOUBLE_EQ(3.0L, cbrtl(27.0L)); 539 } 540 541 TEST(math, sqrt) { 542 ASSERT_DOUBLE_EQ(2.0, sqrt(4.0)); 543 } 544 545 TEST(math, sqrtf) { 546 ASSERT_FLOAT_EQ(2.0f, sqrtf(4.0f)); 547 } 548 549 TEST(math, sqrtl) { 550 ASSERT_DOUBLE_EQ(2.0L, sqrtl(4.0L)); 551 } 552 553 TEST(math, exp) { 554 ASSERT_DOUBLE_EQ(1.0, exp(0.0)); 555 ASSERT_DOUBLE_EQ(M_E, exp(1.0)); 556 } 557 558 TEST(math, expf) { 559 ASSERT_FLOAT_EQ(1.0f, expf(0.0f)); 560 ASSERT_FLOAT_EQ(static_cast<float>(M_E), expf(1.0f)); 561 } 562 563 TEST(math, expl) { 564 ASSERT_DOUBLE_EQ(1.0L, expl(0.0L)); 565 ASSERT_DOUBLE_EQ(M_E, expl(1.0L)); 566 } 567 568 TEST(math, exp2) { 569 ASSERT_DOUBLE_EQ(8.0, exp2(3.0)); 570 } 571 572 TEST(math, exp2f) { 573 ASSERT_FLOAT_EQ(8.0f, exp2f(3.0f)); 574 } 575 576 TEST(math, exp2l) { 577 ASSERT_DOUBLE_EQ(8.0L, exp2l(3.0L)); 578 } 579 580 TEST(math, expm1) { 581 ASSERT_DOUBLE_EQ(M_E - 1.0, expm1(1.0)); 582 } 583 584 TEST(math, expm1f) { 585 ASSERT_FLOAT_EQ(static_cast<float>(M_E) - 1.0f, expm1f(1.0f)); 586 } 587 588 TEST(math, expm1l) { 589 ASSERT_DOUBLE_EQ(M_E - 1.0L, expm1l(1.0L)); 590 } 591 592 TEST(math, pow) { 593 ASSERT_TRUE(isnan(pow(nan(""), 3.0))); 594 ASSERT_DOUBLE_EQ(1.0, (pow(1.0, nan("")))); 595 ASSERT_TRUE(isnan(pow(2.0, nan("")))); 596 ASSERT_DOUBLE_EQ(8.0, pow(2.0, 3.0)); 597 } 598 599 TEST(math, powf) { 600 ASSERT_TRUE(isnanf(powf(nanf(""), 3.0f))); 601 ASSERT_FLOAT_EQ(1.0f, (powf(1.0f, nanf("")))); 602 ASSERT_TRUE(isnanf(powf(2.0f, nanf("")))); 603 ASSERT_FLOAT_EQ(8.0f, powf(2.0f, 3.0f)); 604 } 605 606 TEST(math, powl) { 607 ASSERT_TRUE(__isnanl(powl(nanl(""), 3.0L))); 608 ASSERT_DOUBLE_EQ(1.0L, (powl(1.0L, nanl("")))); 609 ASSERT_TRUE(__isnanl(powl(2.0L, nanl("")))); 610 ASSERT_DOUBLE_EQ(8.0L, powl(2.0L, 3.0L)); 611 } 612 613 TEST(math, ceil) { 614 ASSERT_DOUBLE_EQ(1.0, ceil(0.9)); 615 } 616 617 TEST(math, ceilf) { 618 ASSERT_FLOAT_EQ(1.0f, ceilf(0.9f)); 619 } 620 621 TEST(math, ceill) { 622 ASSERT_DOUBLE_EQ(1.0L, ceill(0.9L)); 623 } 624 625 TEST(math, floor) { 626 ASSERT_DOUBLE_EQ(1.0, floor(1.1)); 627 } 628 629 TEST(math, floorf) { 630 ASSERT_FLOAT_EQ(1.0f, floorf(1.1f)); 631 } 632 633 TEST(math, floorl) { 634 ASSERT_DOUBLE_EQ(1.0L, floorl(1.1L)); 635 } 636 637 TEST(math, fabs) { 638 ASSERT_DOUBLE_EQ(1.0, fabs(-1.0)); 639 } 640 641 TEST(math, fabsf) { 642 ASSERT_FLOAT_EQ(1.0f, fabsf(-1.0f)); 643 } 644 645 TEST(math, fabsl) { 646 ASSERT_DOUBLE_EQ(1.0L, fabsl(-1.0L)); 647 } 648 649 TEST(math, ldexp) { 650 ASSERT_DOUBLE_EQ(16.0, ldexp(2.0, 3.0)); 651 } 652 653 TEST(math, ldexpf) { 654 ASSERT_FLOAT_EQ(16.0f, ldexpf(2.0f, 3.0f)); 655 } 656 657 TEST(math, ldexpl) { 658 ASSERT_DOUBLE_EQ(16.0L, ldexpl(2.0L, 3.0)); 659 } 660 661 TEST(math, fmod) { 662 ASSERT_DOUBLE_EQ(2.0, fmod(12.0, 10.0)); 663 } 664 665 TEST(math, fmodf) { 666 ASSERT_FLOAT_EQ(2.0f, fmodf(12.0f, 10.0f)); 667 } 668 669 TEST(math, fmodl) { 670 ASSERT_DOUBLE_EQ(2.0L, fmodl(12.0L, 10.0L)); 671 } 672 673 TEST(math, remainder) { 674 ASSERT_DOUBLE_EQ(2.0, remainder(12.0, 10.0)); 675 } 676 677 TEST(math, remainderf) { 678 ASSERT_FLOAT_EQ(2.0f, remainderf(12.0f, 10.0f)); 679 } 680 681 TEST(math, remainderl) { 682 ASSERT_DOUBLE_EQ(2.0L, remainderl(12.0L, 10.0L)); 683 } 684 685 TEST(math, drem) { 686 ASSERT_DOUBLE_EQ(2.0, drem(12.0, 10.0)); 687 } 688 689 TEST(math, dremf) { 690 ASSERT_FLOAT_EQ(2.0f, dremf(12.0f, 10.0f)); 691 } 692 693 TEST(math, fmax) { 694 ASSERT_DOUBLE_EQ(12.0, fmax(12.0, 10.0)); 695 ASSERT_DOUBLE_EQ(12.0, fmax(12.0, nan(""))); 696 ASSERT_DOUBLE_EQ(12.0, fmax(nan(""), 12.0)); 697 } 698 699 TEST(math, fmaxf) { 700 ASSERT_FLOAT_EQ(12.0f, fmaxf(12.0f, 10.0f)); 701 ASSERT_FLOAT_EQ(12.0f, fmaxf(12.0f, nanf(""))); 702 ASSERT_FLOAT_EQ(12.0f, fmaxf(nanf(""), 12.0f)); 703 } 704 705 TEST(math, fmaxl) { 706 ASSERT_DOUBLE_EQ(12.0L, fmaxl(12.0L, 10.0L)); 707 ASSERT_DOUBLE_EQ(12.0L, fmaxl(12.0L, nanl(""))); 708 ASSERT_DOUBLE_EQ(12.0L, fmaxl(nanl(""), 12.0L)); 709 } 710 711 TEST(math, fmin) { 712 ASSERT_DOUBLE_EQ(10.0, fmin(12.0, 10.0)); 713 ASSERT_DOUBLE_EQ(12.0, fmin(12.0, nan(""))); 714 ASSERT_DOUBLE_EQ(12.0, fmin(nan(""), 12.0)); 715 } 716 717 TEST(math, fminf) { 718 ASSERT_FLOAT_EQ(10.0f, fminf(12.0f, 10.0f)); 719 ASSERT_FLOAT_EQ(12.0f, fminf(12.0f, nanf(""))); 720 ASSERT_FLOAT_EQ(12.0f, fminf(nanf(""), 12.0f)); 721 } 722 723 TEST(math, fminl) { 724 ASSERT_DOUBLE_EQ(10.0L, fminl(12.0L, 10.0L)); 725 ASSERT_DOUBLE_EQ(12.0L, fminl(12.0L, nanl(""))); 726 ASSERT_DOUBLE_EQ(12.0L, fminl(nanl(""), 12.0L)); 727 } 728 729 TEST(math, fma) { 730 ASSERT_DOUBLE_EQ(10.0, fma(2.0, 3.0, 4.0)); 731 } 732 733 TEST(math, fmaf) { 734 ASSERT_FLOAT_EQ(10.0f, fmaf(2.0f, 3.0f, 4.0f)); 735 } 736 737 TEST(math, fmal) { 738 ASSERT_DOUBLE_EQ(10.0L, fmal(2.0L, 3.0L, 4.0L)); 739 } 740 741 TEST(math, hypot) { 742 ASSERT_DOUBLE_EQ(5.0, hypot(3.0, 4.0)); 743 } 744 745 TEST(math, hypotf) { 746 ASSERT_FLOAT_EQ(5.0f, hypotf(3.0f, 4.0f)); 747 } 748 749 TEST(math, hypotl) { 750 ASSERT_DOUBLE_EQ(5.0L, hypotl(3.0L, 4.0L)); 751 } 752 753 TEST(math, erf) { 754 ASSERT_DOUBLE_EQ(0.84270079294971489, erf(1.0)); 755 } 756 757 TEST(math, erff) { 758 ASSERT_FLOAT_EQ(0.84270078f, erff(1.0f)); 759 } 760 761 TEST(math, erfl) { 762 ASSERT_DOUBLE_EQ(0.84270079294971489L, erfl(1.0L)); 763 } 764 765 TEST(math, erfc) { 766 ASSERT_DOUBLE_EQ(0.15729920705028513, erfc(1.0)); 767 } 768 769 TEST(math, erfcf) { 770 ASSERT_FLOAT_EQ(0.15729921f, erfcf(1.0f)); 771 } 772 773 TEST(math, erfcl) { 774 ASSERT_DOUBLE_EQ(0.15729920705028513l, erfcl(1.0L)); 775 } 776 777 TEST(math, lrint) { 778 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 779 780 fesetround(FE_UPWARD); // lrint/lrintf/lrintl obey the rounding mode. 781 ASSERT_EQ(1235, lrint(1234.01)); 782 ASSERT_EQ(1235, lrintf(1234.01f)); 783 ASSERT_EQ(1235, lrintl(1234.01L)); 784 fesetround(FE_TOWARDZERO); // lrint/lrintf/lrintl obey the rounding mode. 785 ASSERT_EQ(1234, lrint(1234.01)); 786 ASSERT_EQ(1234, lrintf(1234.01f)); 787 ASSERT_EQ(1234, lrintl(1234.01L)); 788 789 fesetround(FE_UPWARD); // llrint/llrintf/llrintl obey the rounding mode. 790 ASSERT_EQ(1235L, llrint(1234.01)); 791 ASSERT_EQ(1235L, llrintf(1234.01f)); 792 ASSERT_EQ(1235L, llrintl(1234.01L)); 793 fesetround(FE_TOWARDZERO); // llrint/llrintf/llrintl obey the rounding mode. 794 ASSERT_EQ(1234L, llrint(1234.01)); 795 ASSERT_EQ(1234L, llrintf(1234.01f)); 796 ASSERT_EQ(1234L, llrintl(1234.01L)); 797 } 798 799 TEST(math, rint) { 800 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 801 802 fesetround(FE_UPWARD); // rint/rintf/rintl obey the rounding mode. 803 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag. 804 ASSERT_EQ(1234.0, rint(1234.0)); 805 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 806 ASSERT_EQ(1235.0, rint(1234.01)); 807 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0); 808 809 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag. 810 ASSERT_EQ(1234.0f, rintf(1234.0f)); 811 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 812 ASSERT_EQ(1235.0f, rintf(1234.01f)); 813 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0); 814 815 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag. 816 ASSERT_EQ(1234.0, rintl(1234.0L)); 817 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 818 ASSERT_EQ(1235.0, rintl(1234.01L)); 819 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0); 820 821 fesetround(FE_TOWARDZERO); // rint/rintf obey the rounding mode. 822 ASSERT_EQ(1234.0, rint(1234.01)); 823 ASSERT_EQ(1234.0f, rintf(1234.01f)); 824 ASSERT_EQ(1234.0, rintl(1234.01L)); 825 } 826 827 TEST(math, nearbyint) { 828 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 829 fesetround(FE_UPWARD); // nearbyint/nearbyintf/nearbyintl obey the rounding mode. 830 feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag. 831 ASSERT_EQ(1234.0, nearbyint(1234.0)); 832 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 833 ASSERT_EQ(1235.0, nearbyint(1234.01)); 834 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 835 836 feclearexcept(FE_ALL_EXCEPT); 837 ASSERT_EQ(1234.0f, nearbyintf(1234.0f)); 838 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 839 ASSERT_EQ(1235.0f, nearbyintf(1234.01f)); 840 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 841 842 feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag. 843 ASSERT_EQ(1234.0, nearbyintl(1234.0L)); 844 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 845 ASSERT_EQ(1235.0, nearbyintl(1234.01L)); 846 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0); 847 848 fesetround(FE_TOWARDZERO); // nearbyint/nearbyintf/nearbyintl obey the rounding mode. 849 ASSERT_EQ(1234.0, nearbyint(1234.01)); 850 ASSERT_EQ(1234.0f, nearbyintf(1234.01f)); 851 ASSERT_EQ(1234.0, nearbyintl(1234.01L)); 852 } 853 854 TEST(math, lround) { 855 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 856 fesetround(FE_UPWARD); // lround ignores the rounding mode. 857 ASSERT_EQ(1234, lround(1234.01)); 858 ASSERT_EQ(1234, lroundf(1234.01f)); 859 ASSERT_EQ(1234, lroundl(1234.01L)); 860 } 861 862 TEST(math, llround) { 863 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 864 fesetround(FE_UPWARD); // llround ignores the rounding mode. 865 ASSERT_EQ(1234L, llround(1234.01)); 866 ASSERT_EQ(1234L, llroundf(1234.01f)); 867 ASSERT_EQ(1234L, llroundl(1234.01L)); 868 } 869 870 TEST(math, ilogb) { 871 ASSERT_EQ(FP_ILOGB0, ilogb(0.0)); 872 ASSERT_EQ(FP_ILOGBNAN, ilogb(nan(""))); 873 ASSERT_EQ(INT_MAX, ilogb(HUGE_VAL)); 874 ASSERT_EQ(0, ilogb(1.0)); 875 ASSERT_EQ(3, ilogb(10.0)); 876 } 877 878 TEST(math, ilogbf) { 879 ASSERT_EQ(FP_ILOGB0, ilogbf(0.0f)); 880 ASSERT_EQ(FP_ILOGBNAN, ilogbf(nanf(""))); 881 ASSERT_EQ(INT_MAX, ilogbf(HUGE_VALF)); 882 ASSERT_EQ(0, ilogbf(1.0f)); 883 ASSERT_EQ(3, ilogbf(10.0f)); 884 } 885 886 TEST(math, ilogbl) { 887 ASSERT_EQ(FP_ILOGB0, ilogbl(0.0L)); 888 ASSERT_EQ(FP_ILOGBNAN, ilogbl(nanl(""))); 889 ASSERT_EQ(INT_MAX, ilogbl(HUGE_VALL)); 890 ASSERT_EQ(0L, ilogbl(1.0L)); 891 ASSERT_EQ(3L, ilogbl(10.0L)); 892 } 893 894 TEST(math, logb) { 895 ASSERT_EQ(-HUGE_VAL, logb(0.0)); 896 ASSERT_TRUE(isnan(logb(nan("")))); 897 ASSERT_TRUE(isinf(logb(HUGE_VAL))); 898 ASSERT_EQ(0.0, logb(1.0)); 899 ASSERT_EQ(3.0, logb(10.0)); 900 } 901 902 TEST(math, logbf) { 903 ASSERT_EQ(-HUGE_VALF, logbf(0.0f)); 904 ASSERT_TRUE(isnanf(logbf(nanf("")))); 905 ASSERT_TRUE(__isinff(logbf(HUGE_VALF))); 906 ASSERT_EQ(0.0f, logbf(1.0f)); 907 ASSERT_EQ(3.0f, logbf(10.0f)); 908 } 909 910 TEST(math, logbl) { 911 ASSERT_EQ(-HUGE_VAL, logbl(0.0L)); 912 ASSERT_TRUE(isnan(logbl(nanl("")))); 913 ASSERT_TRUE(isinf(logbl(HUGE_VALL))); 914 ASSERT_EQ(0.0L, logbl(1.0L)); 915 ASSERT_EQ(3.0L, logbl(10.0L)); 916 } 917 918 TEST(math, log1p) { 919 ASSERT_EQ(-HUGE_VAL, log1p(-1.0)); 920 ASSERT_TRUE(isnan(log1p(nan("")))); 921 ASSERT_TRUE(isinf(log1p(HUGE_VAL))); 922 ASSERT_DOUBLE_EQ(1.0, log1p(M_E - 1.0)); 923 } 924 925 TEST(math, log1pf) { 926 ASSERT_EQ(-HUGE_VALF, log1pf(-1.0f)); 927 ASSERT_TRUE(isnanf(log1pf(nanf("")))); 928 ASSERT_TRUE(__isinff(log1pf(HUGE_VALF))); 929 ASSERT_FLOAT_EQ(1.0f, log1pf(static_cast<float>(M_E) - 1.0f)); 930 } 931 932 TEST(math, log1pl) { 933 ASSERT_EQ(-HUGE_VALL, log1pl(-1.0L)); 934 ASSERT_TRUE(isnan(log1pl(nanl("")))); 935 ASSERT_TRUE(isinf(log1pl(HUGE_VALL))); 936 ASSERT_DOUBLE_EQ(1.0L, log1pl(M_E - 1.0L)); 937 } 938 939 TEST(math, fdim) { 940 ASSERT_DOUBLE_EQ(0.0, fdim(1.0, 1.0)); 941 ASSERT_DOUBLE_EQ(1.0, fdim(2.0, 1.0)); 942 ASSERT_DOUBLE_EQ(0.0, fdim(1.0, 2.0)); 943 } 944 945 TEST(math, fdimf) { 946 ASSERT_FLOAT_EQ(0.0f, fdimf(1.0f, 1.0f)); 947 ASSERT_FLOAT_EQ(1.0f, fdimf(2.0f, 1.0f)); 948 ASSERT_FLOAT_EQ(0.0f, fdimf(1.0f, 2.0f)); 949 } 950 951 TEST(math, fdiml) { 952 ASSERT_DOUBLE_EQ(0.0L, fdiml(1.0L, 1.0L)); 953 ASSERT_DOUBLE_EQ(1.0L, fdiml(2.0L, 1.0L)); 954 ASSERT_DOUBLE_EQ(0.0L, fdiml(1.0L, 2.0L)); 955 } 956 957 TEST(math, round) { 958 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 959 fesetround(FE_TOWARDZERO); // round ignores the rounding mode and always rounds away from zero. 960 ASSERT_DOUBLE_EQ(1.0, round(0.5)); 961 ASSERT_DOUBLE_EQ(-1.0, round(-0.5)); 962 ASSERT_DOUBLE_EQ(0.0, round(0.0)); 963 ASSERT_DOUBLE_EQ(-0.0, round(-0.0)); 964 ASSERT_TRUE(isnan(round(nan("")))); 965 ASSERT_DOUBLE_EQ(HUGE_VAL, round(HUGE_VAL)); 966 } 967 968 TEST(math, roundf) { 969 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 970 fesetround(FE_TOWARDZERO); // roundf ignores the rounding mode and always rounds away from zero. 971 ASSERT_FLOAT_EQ(1.0f, roundf(0.5f)); 972 ASSERT_FLOAT_EQ(-1.0f, roundf(-0.5f)); 973 ASSERT_FLOAT_EQ(0.0f, roundf(0.0f)); 974 ASSERT_FLOAT_EQ(-0.0f, roundf(-0.0f)); 975 ASSERT_TRUE(isnanf(roundf(nanf("")))); 976 ASSERT_FLOAT_EQ(HUGE_VALF, roundf(HUGE_VALF)); 977 } 978 979 TEST(math, roundl) { 980 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 981 fesetround(FE_TOWARDZERO); // roundl ignores the rounding mode and always rounds away from zero. 982 ASSERT_DOUBLE_EQ(1.0L, roundl(0.5L)); 983 ASSERT_DOUBLE_EQ(-1.0L, roundl(-0.5L)); 984 ASSERT_DOUBLE_EQ(0.0L, roundl(0.0L)); 985 ASSERT_DOUBLE_EQ(-0.0L, roundl(-0.0L)); 986 ASSERT_TRUE(isnan(roundl(nanl("")))); 987 ASSERT_DOUBLE_EQ(HUGE_VALL, roundl(HUGE_VALL)); 988 } 989 990 TEST(math, trunc) { 991 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 992 fesetround(FE_UPWARD); // trunc ignores the rounding mode and always rounds toward zero. 993 ASSERT_DOUBLE_EQ(1.0, trunc(1.5)); 994 ASSERT_DOUBLE_EQ(-1.0, trunc(-1.5)); 995 ASSERT_DOUBLE_EQ(0.0, trunc(0.0)); 996 ASSERT_DOUBLE_EQ(-0.0, trunc(-0.0)); 997 ASSERT_TRUE(isnan(trunc(nan("")))); 998 ASSERT_DOUBLE_EQ(HUGE_VAL, trunc(HUGE_VAL)); 999 } 1000 1001 TEST(math, truncf) { 1002 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 1003 fesetround(FE_UPWARD); // truncf ignores the rounding mode and always rounds toward zero. 1004 ASSERT_FLOAT_EQ(1.0f, truncf(1.5f)); 1005 ASSERT_FLOAT_EQ(-1.0f, truncf(-1.5f)); 1006 ASSERT_FLOAT_EQ(0.0f, truncf(0.0f)); 1007 ASSERT_FLOAT_EQ(-0.0f, truncf(-0.0f)); 1008 ASSERT_TRUE(isnan(truncf(nanf("")))); 1009 ASSERT_FLOAT_EQ(HUGE_VALF, truncf(HUGE_VALF)); 1010 } 1011 1012 TEST(math, truncl) { 1013 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); 1014 fesetround(FE_UPWARD); // truncl ignores the rounding mode and always rounds toward zero. 1015 ASSERT_DOUBLE_EQ(1.0L, truncl(1.5L)); 1016 ASSERT_DOUBLE_EQ(-1.0L, truncl(-1.5L)); 1017 ASSERT_DOUBLE_EQ(0.0L, truncl(0.0L)); 1018 ASSERT_DOUBLE_EQ(-0.0L, truncl(-0.0L)); 1019 ASSERT_TRUE(isnan(truncl(nan("")))); 1020 ASSERT_DOUBLE_EQ(HUGE_VALL, truncl(HUGE_VALL)); 1021 } 1022 1023 TEST(math, nextafter) { 1024 ASSERT_DOUBLE_EQ(0.0, nextafter(0.0, 0.0)); 1025 ASSERT_DOUBLE_EQ(4.9406564584124654e-324, nextafter(0.0, 1.0)); 1026 ASSERT_DOUBLE_EQ(-4.9406564584124654e-324, nextafter(0.0, -1.0)); 1027 } 1028 1029 TEST(math, nextafterf) { 1030 ASSERT_FLOAT_EQ(0.0f, nextafterf(0.0f, 0.0f)); 1031 ASSERT_FLOAT_EQ(1.4012985e-45f, nextafterf(0.0f, 1.0f)); 1032 ASSERT_FLOAT_EQ(-1.4012985e-45f, nextafterf(0.0f, -1.0f)); 1033 } 1034 1035 TEST(math, nextafterl) { 1036 ASSERT_DOUBLE_EQ(0.0L, nextafterl(0.0L, 0.0L)); 1037 // Use a runtime value to accomodate the case when 1038 // sizeof(double) == sizeof(long double) 1039 long double smallest_positive = ldexpl(1.0L, LDBL_MIN_EXP - LDBL_MANT_DIG); 1040 ASSERT_DOUBLE_EQ(smallest_positive, nextafterl(0.0L, 1.0L)); 1041 ASSERT_DOUBLE_EQ(-smallest_positive, nextafterl(0.0L, -1.0L)); 1042 } 1043 1044 TEST(math, nexttoward) { 1045 ASSERT_DOUBLE_EQ(0.0, nexttoward(0.0, 0.0L)); 1046 ASSERT_DOUBLE_EQ(4.9406564584124654e-324, nexttoward(0.0, 1.0L)); 1047 ASSERT_DOUBLE_EQ(-4.9406564584124654e-324, nexttoward(0.0, -1.0L)); 1048 } 1049 1050 TEST(math, nexttowardf) { 1051 ASSERT_FLOAT_EQ(0.0f, nexttowardf(0.0f, 0.0L)); 1052 ASSERT_FLOAT_EQ(1.4012985e-45f, nexttowardf(0.0f, 1.0L)); 1053 ASSERT_FLOAT_EQ(-1.4012985e-45f, nexttowardf(0.0f, -1.0L)); 1054 } 1055 1056 TEST(math, nexttowardl) { 1057 ASSERT_DOUBLE_EQ(0.0L, nexttowardl(0.0L, 0.0L)); 1058 // Use a runtime value to accomodate the case when 1059 // sizeof(double) == sizeof(long double) 1060 long double smallest_positive = ldexpl(1.0L, LDBL_MIN_EXP - LDBL_MANT_DIG); 1061 ASSERT_DOUBLE_EQ(smallest_positive, nexttowardl(0.0L, 1.0L)); 1062 ASSERT_DOUBLE_EQ(-smallest_positive, nexttowardl(0.0L, -1.0L)); 1063 } 1064 1065 TEST(math, copysign) { 1066 ASSERT_DOUBLE_EQ(0.0, copysign(0.0, 1.0)); 1067 ASSERT_DOUBLE_EQ(-0.0, copysign(0.0, -1.0)); 1068 ASSERT_DOUBLE_EQ(2.0, copysign(2.0, 1.0)); 1069 ASSERT_DOUBLE_EQ(-2.0, copysign(2.0, -1.0)); 1070 } 1071 1072 TEST(math, copysignf) { 1073 ASSERT_FLOAT_EQ(0.0f, copysignf(0.0f, 1.0f)); 1074 ASSERT_FLOAT_EQ(-0.0f, copysignf(0.0f, -1.0f)); 1075 ASSERT_FLOAT_EQ(2.0f, copysignf(2.0f, 1.0f)); 1076 ASSERT_FLOAT_EQ(-2.0f, copysignf(2.0f, -1.0f)); 1077 } 1078 1079 TEST(math, copysignl) { 1080 ASSERT_DOUBLE_EQ(0.0L, copysignl(0.0L, 1.0L)); 1081 ASSERT_DOUBLE_EQ(-0.0L, copysignl(0.0L, -1.0L)); 1082 ASSERT_DOUBLE_EQ(2.0L, copysignl(2.0L, 1.0L)); 1083 ASSERT_DOUBLE_EQ(-2.0L, copysignl(2.0L, -1.0L)); 1084 } 1085 1086 TEST(math, significand) { 1087 ASSERT_DOUBLE_EQ(0.0, significand(0.0)); 1088 ASSERT_DOUBLE_EQ(1.2, significand(1.2)); 1089 ASSERT_DOUBLE_EQ(1.53125, significand(12.25)); 1090 } 1091 1092 TEST(math, significandf) { 1093 ASSERT_FLOAT_EQ(0.0f, significandf(0.0f)); 1094 ASSERT_FLOAT_EQ(1.2f, significandf(1.2f)); 1095 ASSERT_FLOAT_EQ(1.53125f, significandf(12.25f)); 1096 } 1097 1098 TEST(math, significandl) { 1099 ASSERT_DOUBLE_EQ(0.0L, significandl(0.0L)); 1100 ASSERT_DOUBLE_EQ(1.2L, significandl(1.2L)); 1101 ASSERT_DOUBLE_EQ(1.53125L, significandl(12.25L)); 1102 } 1103 1104 TEST(math, scalb) { 1105 ASSERT_DOUBLE_EQ(12.0, scalb(3.0, 2.0)); 1106 } 1107 1108 TEST(math, scalbf) { 1109 ASSERT_FLOAT_EQ(12.0f, scalbf(3.0f, 2.0f)); 1110 } 1111 1112 TEST(math, scalbln) { 1113 ASSERT_DOUBLE_EQ(12.0, scalbln(3.0, 2L)); 1114 } 1115 1116 TEST(math, scalblnf) { 1117 ASSERT_FLOAT_EQ(12.0f, scalblnf(3.0f, 2L)); 1118 } 1119 1120 TEST(math, scalblnl) { 1121 ASSERT_DOUBLE_EQ(12.0L, scalblnl(3.0L, 2L)); 1122 } 1123 1124 TEST(math, scalbn) { 1125 ASSERT_DOUBLE_EQ(12.0, scalbn(3.0, 2)); 1126 } 1127 1128 TEST(math, scalbnf) { 1129 ASSERT_FLOAT_EQ(12.0f, scalbnf(3.0f, 2)); 1130 } 1131 1132 TEST(math, scalbnl) { 1133 ASSERT_DOUBLE_EQ(12.0L, scalbnl(3.0L, 2)); 1134 } 1135 1136 TEST(math, gamma) { 1137 ASSERT_DOUBLE_EQ(log(24.0), gamma(5.0)); 1138 } 1139 1140 TEST(math, gammaf) { 1141 ASSERT_FLOAT_EQ(logf(24.0f), gammaf(5.0f)); 1142 } 1143 1144 TEST(math, gamma_r) { 1145 #if defined(__BIONIC__) 1146 int sign; 1147 ASSERT_DOUBLE_EQ(log(24.0), gamma_r(5.0, &sign)); 1148 ASSERT_EQ(1, sign); 1149 #else // __BIONIC__ 1150 GTEST_LOG_(INFO) << "glibc doesn't have gamma_r.\n"; 1151 #endif // __BIONIC__ 1152 } 1153 1154 TEST(math, gammaf_r) { 1155 #if defined(__BIONIC__) 1156 int sign; 1157 ASSERT_FLOAT_EQ(logf(24.0f), gammaf_r(5.0f, &sign)); 1158 ASSERT_EQ(1, sign); 1159 #else // __BIONIC__ 1160 GTEST_LOG_(INFO) << "glibc doesn't have gammaf_r.\n"; 1161 #endif // __BIONIC__ 1162 } 1163 1164 TEST(math, lgamma) { 1165 ASSERT_DOUBLE_EQ(log(24.0), lgamma(5.0)); 1166 } 1167 1168 TEST(math, lgammaf) { 1169 ASSERT_FLOAT_EQ(logf(24.0f), lgammaf(5.0f)); 1170 } 1171 1172 TEST(math, lgammal) { 1173 ASSERT_DOUBLE_EQ(logl(24.0L), lgammal(5.0L)); 1174 } 1175 1176 TEST(math, lgamma_r) { 1177 int sign; 1178 ASSERT_DOUBLE_EQ(log(24.0), lgamma_r(5.0, &sign)); 1179 ASSERT_EQ(1, sign); 1180 } 1181 1182 TEST(math, lgamma_r_17471883) { 1183 int sign; 1184 1185 sign = 0; 1186 ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(0.0, &sign)); 1187 ASSERT_EQ(1, sign); 1188 sign = 0; 1189 ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(-0.0, &sign)); 1190 ASSERT_EQ(-1, sign); 1191 } 1192 1193 TEST(math, lgammaf_r) { 1194 int sign; 1195 ASSERT_FLOAT_EQ(logf(24.0f), lgammaf_r(5.0f, &sign)); 1196 ASSERT_EQ(1, sign); 1197 } 1198 1199 TEST(math, lgammaf_r_17471883) { 1200 int sign; 1201 1202 sign = 0; 1203 ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(0.0f, &sign)); 1204 ASSERT_EQ(1, sign); 1205 sign = 0; 1206 ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(-0.0f, &sign)); 1207 ASSERT_EQ(-1, sign); 1208 } 1209 1210 TEST(math, lgammal_r) { 1211 int sign; 1212 ASSERT_DOUBLE_EQ(log(24.0L), lgamma_r(5.0L, &sign)); 1213 ASSERT_EQ(1, sign); 1214 } 1215 1216 TEST(math, lgammal_r_17471883) { 1217 int sign; 1218 1219 sign = 0; 1220 ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(0.0L, &sign)); 1221 ASSERT_EQ(1, sign); 1222 sign = 0; 1223 ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(-0.0L, &sign)); 1224 ASSERT_EQ(-1, sign); 1225 } 1226 1227 TEST(math, tgamma) { 1228 ASSERT_DOUBLE_EQ(24.0, tgamma(5.0)); 1229 } 1230 1231 TEST(math, tgammaf) { 1232 ASSERT_FLOAT_EQ(24.0f, tgammaf(5.0f)); 1233 } 1234 1235 TEST(math, tgammal) { 1236 ASSERT_DOUBLE_EQ(24.0L, tgammal(5.0L)); 1237 } 1238 1239 TEST(math, j0) { 1240 ASSERT_DOUBLE_EQ(1.0, j0(0.0)); 1241 ASSERT_DOUBLE_EQ(0.76519768655796661, j0(1.0)); 1242 } 1243 1244 TEST(math, j0f) { 1245 ASSERT_FLOAT_EQ(1.0f, j0f(0.0f)); 1246 ASSERT_FLOAT_EQ(0.76519769f, j0f(1.0f)); 1247 } 1248 1249 TEST(math, j1) { 1250 ASSERT_DOUBLE_EQ(0.0, j1(0.0)); 1251 ASSERT_DOUBLE_EQ(0.44005058574493355, j1(1.0)); 1252 } 1253 1254 TEST(math, j1f) { 1255 ASSERT_FLOAT_EQ(0.0f, j1f(0.0f)); 1256 ASSERT_FLOAT_EQ(0.44005057f, j1f(1.0f)); 1257 } 1258 1259 TEST(math, jn) { 1260 ASSERT_DOUBLE_EQ(0.0, jn(4, 0.0)); 1261 ASSERT_DOUBLE_EQ(0.0024766389641099553, jn(4, 1.0)); 1262 } 1263 1264 TEST(math, jnf) { 1265 ASSERT_FLOAT_EQ(0.0f, jnf(4, 0.0f)); 1266 ASSERT_FLOAT_EQ(0.0024766389f, jnf(4, 1.0f)); 1267 } 1268 1269 TEST(math, y0) { 1270 ASSERT_DOUBLE_EQ(-HUGE_VAL, y0(0.0)); 1271 ASSERT_DOUBLE_EQ(0.08825696421567697, y0(1.0)); 1272 } 1273 1274 TEST(math, y0f) { 1275 ASSERT_FLOAT_EQ(-HUGE_VALF, y0f(0.0f)); 1276 ASSERT_FLOAT_EQ(0.088256963f, y0f(1.0f)); 1277 } 1278 1279 TEST(math, y1) { 1280 ASSERT_DOUBLE_EQ(-HUGE_VAL, y1(0.0)); 1281 ASSERT_DOUBLE_EQ(-0.78121282130028868, y1(1.0)); 1282 } 1283 1284 TEST(math, y1f) { 1285 ASSERT_FLOAT_EQ(-HUGE_VALF, y1f(0.0f)); 1286 ASSERT_FLOAT_EQ(-0.78121281f, y1f(1.0f)); 1287 } 1288 1289 TEST(math, yn) { 1290 ASSERT_DOUBLE_EQ(-HUGE_VAL, yn(4, 0.0)); 1291 ASSERT_DOUBLE_EQ(-33.278423028972114, yn(4, 1.0)); 1292 } 1293 1294 TEST(math, ynf) { 1295 ASSERT_FLOAT_EQ(-HUGE_VALF, ynf(4, 0.0f)); 1296 ASSERT_FLOAT_EQ(-33.278423f, ynf(4, 1.0f)); 1297 } 1298 1299 TEST(math, frexp) { 1300 int exp; 1301 double dr = frexp(1024.0, &exp); 1302 ASSERT_DOUBLE_EQ(1024.0, scalbn(dr, exp)); 1303 } 1304 1305 TEST(math, frexpf) { 1306 int exp; 1307 float fr = frexpf(1024.0f, &exp); 1308 ASSERT_FLOAT_EQ(1024.0f, scalbnf(fr, exp)); 1309 } 1310 1311 TEST(math, frexpl) { 1312 int exp; 1313 long double ldr = frexpl(1024.0L, &exp); 1314 ASSERT_DOUBLE_EQ(1024.0L, scalbnl(ldr, exp)); 1315 } 1316 1317 TEST(math, modf) { 1318 double di; 1319 double df = modf(123.75, &di); 1320 ASSERT_DOUBLE_EQ(123.0, di); 1321 ASSERT_DOUBLE_EQ(0.75, df); 1322 } 1323 1324 TEST(math, modff) { 1325 float fi; 1326 float ff = modff(123.75f, &fi); 1327 ASSERT_FLOAT_EQ(123.0f, fi); 1328 ASSERT_FLOAT_EQ(0.75f, ff); 1329 } 1330 1331 TEST(math, modfl) { 1332 long double ldi; 1333 long double ldf = modfl(123.75L, &ldi); 1334 ASSERT_DOUBLE_EQ(123.0L, ldi); 1335 ASSERT_DOUBLE_EQ(0.75L, ldf); 1336 } 1337 1338 TEST(math, remquo) { 1339 int q; 1340 double d = remquo(13.0, 4.0, &q); 1341 ASSERT_EQ(3, q); 1342 ASSERT_DOUBLE_EQ(1.0, d); 1343 } 1344 1345 TEST(math, remquof) { 1346 int q; 1347 float f = remquof(13.0f, 4.0f, &q); 1348 ASSERT_EQ(3, q); 1349 ASSERT_FLOAT_EQ(1.0, f); 1350 } 1351 1352 TEST(math, remquol) { 1353 int q; 1354 long double ld = remquol(13.0L, 4.0L, &q); 1355 ASSERT_DOUBLE_EQ(3L, q); 1356 ASSERT_DOUBLE_EQ(1.0L, ld); 1357 } 1358 1359 // https://code.google.com/p/android/issues/detail?id=6697 1360 TEST(math, frexpf_public_bug_6697) { 1361 int exp; 1362 float fr = frexpf(14.1f, &exp); 1363 ASSERT_FLOAT_EQ(14.1f, scalbnf(fr, exp)); 1364 } 1365 1366 TEST(math, exp2_STRICT_ALIGN_OpenBSD_bug) { 1367 // OpenBSD/x86's libm had a bug here, but it was already fixed in FreeBSD: 1368 // http://svnweb.FreeBSD.org/base/head/lib/msun/src/math_private.h?revision=240827&view=markup 1369 ASSERT_DOUBLE_EQ(5.0, exp2(log2(5))); 1370 ASSERT_FLOAT_EQ(5.0f, exp2f(log2f(5))); 1371 ASSERT_DOUBLE_EQ(5.0L, exp2l(log2l(5))); 1372 } 1373 1374 TEST(math, nextafterl_OpenBSD_bug) { 1375 // OpenBSD/x86's libm had a bug here. 1376 ASSERT_TRUE(nextafter(1.0, 0.0) - 1.0 < 0.0); 1377 ASSERT_TRUE(nextafterf(1.0f, 0.0f) - 1.0f < 0.0f); 1378 ASSERT_TRUE(nextafterl(1.0L, 0.0L) - 1.0L < 0.0L); 1379 } 1380 1381 #include "math_data/acos_intel_data.h" 1382 TEST(math, acos_intel) { 1383 DoMathDataTest<1>(g_acos_intel_data, acos); 1384 } 1385 1386 #include "math_data/acosf_intel_data.h" 1387 TEST(math, acosf_intel) { 1388 DoMathDataTest<1>(g_acosf_intel_data, acosf); 1389 } 1390 1391 #include "math_data/acosh_intel_data.h" 1392 TEST(math, acosh_intel) { 1393 DoMathDataTest<2>(g_acosh_intel_data, acosh); 1394 } 1395 1396 #include "math_data/acoshf_intel_data.h" 1397 TEST(math, acoshf_intel) { 1398 DoMathDataTest<2>(g_acoshf_intel_data, acoshf); 1399 } 1400 1401 #include "math_data/asin_intel_data.h" 1402 TEST(math, asin_intel) { 1403 DoMathDataTest<1>(g_asin_intel_data, asin); 1404 } 1405 1406 #include "math_data/asinf_intel_data.h" 1407 TEST(math, asinf_intel) { 1408 DoMathDataTest<1>(g_asinf_intel_data, asinf); 1409 } 1410 1411 #include "math_data/asinh_intel_data.h" 1412 TEST(math, asinh_intel) { 1413 DoMathDataTest<2>(g_asinh_intel_data, asinh); 1414 } 1415 1416 #include "math_data/asinhf_intel_data.h" 1417 TEST(math, asinhf_intel) { 1418 DoMathDataTest<2>(g_asinhf_intel_data, asinhf); 1419 } 1420 1421 #include "math_data/atan2_intel_data.h" 1422 TEST(math, atan2_intel) { 1423 DoMathDataTest<2>(g_atan2_intel_data, atan2); 1424 } 1425 1426 #include "math_data/atan2f_intel_data.h" 1427 TEST(math, atan2f_intel) { 1428 DoMathDataTest<2>(g_atan2f_intel_data, atan2f); 1429 } 1430 1431 #include "math_data/atan_intel_data.h" 1432 TEST(math, atan_intel) { 1433 DoMathDataTest<1>(g_atan_intel_data, atan); 1434 } 1435 1436 #include "math_data/atanf_intel_data.h" 1437 TEST(math, atanf_intel) { 1438 DoMathDataTest<1>(g_atanf_intel_data, atanf); 1439 } 1440 1441 #include "math_data/atanh_intel_data.h" 1442 TEST(math, atanh_intel) { 1443 DoMathDataTest<2>(g_atanh_intel_data, atanh); 1444 } 1445 1446 #include "math_data/atanhf_intel_data.h" 1447 TEST(math, atanhf_intel) { 1448 DoMathDataTest<2>(g_atanhf_intel_data, atanhf); 1449 } 1450 1451 #include "math_data/cbrt_intel_data.h" 1452 TEST(math, cbrt_intel) { 1453 DoMathDataTest<1>(g_cbrt_intel_data, cbrt); 1454 } 1455 1456 #include "math_data/cbrtf_intel_data.h" 1457 TEST(math, cbrtf_intel) { 1458 DoMathDataTest<1>(g_cbrtf_intel_data, cbrtf); 1459 } 1460 1461 #include "math_data/ceil_intel_data.h" 1462 TEST(math, ceil_intel) { 1463 DoMathDataTest<1>(g_ceil_intel_data, ceil); 1464 } 1465 1466 #include "math_data/ceilf_intel_data.h" 1467 TEST(math, ceilf_intel) { 1468 DoMathDataTest<1>(g_ceilf_intel_data, ceilf); 1469 } 1470 1471 #include "math_data/copysign_intel_data.h" 1472 TEST(math, copysign_intel) { 1473 DoMathDataTest<1>(g_copysign_intel_data, copysign); 1474 } 1475 1476 #include "math_data/copysignf_intel_data.h" 1477 TEST(math, copysignf_intel) { 1478 DoMathDataTest<1>(g_copysignf_intel_data, copysignf); 1479 } 1480 1481 #include "math_data/cos_intel_data.h" 1482 TEST(math, cos_intel) { 1483 DoMathDataTest<1>(g_cos_intel_data, cos); 1484 } 1485 1486 #include "math_data/cosf_intel_data.h" 1487 TEST(math, cosf_intel) { 1488 DoMathDataTest<1>(g_cosf_intel_data, cosf); 1489 } 1490 1491 #include "math_data/cosh_intel_data.h" 1492 TEST(math, cosh_intel) { 1493 DoMathDataTest<2>(g_cosh_intel_data, cosh); 1494 } 1495 1496 #include "math_data/coshf_intel_data.h" 1497 TEST(math, coshf_intel) { 1498 DoMathDataTest<2>(g_coshf_intel_data, coshf); 1499 } 1500 1501 #include "math_data/exp_intel_data.h" 1502 TEST(math, exp_intel) { 1503 DoMathDataTest<1>(g_exp_intel_data, exp); 1504 } 1505 1506 #include "math_data/expf_intel_data.h" 1507 TEST(math, expf_intel) { 1508 DoMathDataTest<1>(g_expf_intel_data, expf); 1509 } 1510 1511 #include "math_data/exp2_intel_data.h" 1512 TEST(math, exp2_intel) { 1513 DoMathDataTest<1>(g_exp2_intel_data, exp2); 1514 } 1515 1516 #include "math_data/exp2f_intel_data.h" 1517 TEST(math, exp2f_intel) { 1518 DoMathDataTest<1>(g_exp2f_intel_data, exp2f); 1519 } 1520 1521 #include "math_data/expm1_intel_data.h" 1522 TEST(math, expm1_intel) { 1523 DoMathDataTest<1>(g_expm1_intel_data, expm1); 1524 } 1525 1526 #include "math_data/expm1f_intel_data.h" 1527 TEST(math, expm1f_intel) { 1528 DoMathDataTest<1>(g_expm1f_intel_data, expm1f); 1529 } 1530 1531 #include "math_data/fabs_intel_data.h" 1532 TEST(math, fabs_intel) { 1533 DoMathDataTest<1>(g_fabs_intel_data, fabs); 1534 } 1535 1536 #include "math_data/fabsf_intel_data.h" 1537 TEST(math, fabsf_intel) { 1538 DoMathDataTest<1>(g_fabsf_intel_data, fabsf); 1539 } 1540 1541 #include "math_data/fdim_intel_data.h" 1542 TEST(math, fdim_intel) { 1543 DoMathDataTest<1>(g_fdim_intel_data, fdim); 1544 } 1545 1546 #include "math_data/fdimf_intel_data.h" 1547 TEST(math, fdimf_intel) { 1548 DoMathDataTest<1>(g_fdimf_intel_data, fdimf); 1549 } 1550 1551 #include "math_data/floor_intel_data.h" 1552 TEST(math, floor_intel) { 1553 DoMathDataTest<1>(g_floor_intel_data, floor); 1554 } 1555 1556 #include "math_data/floorf_intel_data.h" 1557 TEST(math, floorf_intel) { 1558 DoMathDataTest<1>(g_floorf_intel_data, floorf); 1559 } 1560 1561 #include "math_data/fma_intel_data.h" 1562 TEST(math, fma_intel) { 1563 DoMathDataTest<1>(g_fma_intel_data, fma); 1564 } 1565 1566 #include "math_data/fmaf_intel_data.h" 1567 TEST(math, fmaf_intel) { 1568 DoMathDataTest<1>(g_fmaf_intel_data, fmaf); 1569 } 1570 1571 #include "math_data/fmax_intel_data.h" 1572 TEST(math, fmax_intel) { 1573 DoMathDataTest<1>(g_fmax_intel_data, fmax); 1574 } 1575 1576 #include "math_data/fmaxf_intel_data.h" 1577 TEST(math, fmaxf_intel) { 1578 DoMathDataTest<1>(g_fmaxf_intel_data, fmaxf); 1579 } 1580 1581 #include "math_data/fmin_intel_data.h" 1582 TEST(math, fmin_intel) { 1583 DoMathDataTest<1>(g_fmin_intel_data, fmin); 1584 } 1585 1586 #include "math_data/fminf_intel_data.h" 1587 TEST(math, fminf_intel) { 1588 DoMathDataTest<1>(g_fminf_intel_data, fminf); 1589 } 1590 1591 #include "math_data/fmod_intel_data.h" 1592 TEST(math, fmod_intel) { 1593 DoMathDataTest<1>(g_fmod_intel_data, fmod); 1594 } 1595 1596 #include "math_data/fmodf_intel_data.h" 1597 TEST(math, fmodf_intel) { 1598 DoMathDataTest<1>(g_fmodf_intel_data, fmodf); 1599 } 1600 1601 #include "math_data/frexp_intel_data.h" 1602 TEST(math, frexp_intel) { 1603 DoMathDataTest<1>(g_frexp_intel_data, frexp); 1604 } 1605 1606 #include "math_data/frexpf_intel_data.h" 1607 TEST(math, frexpf_intel) { 1608 DoMathDataTest<1>(g_frexpf_intel_data, frexpf); 1609 } 1610 1611 #include "math_data/hypot_intel_data.h" 1612 TEST(math, hypot_intel) { 1613 DoMathDataTest<1>(g_hypot_intel_data, hypot); 1614 } 1615 1616 #include "math_data/hypotf_intel_data.h" 1617 TEST(math, hypotf_intel) { 1618 DoMathDataTest<1>(g_hypotf_intel_data, hypotf); 1619 } 1620 1621 #include "math_data/ilogb_intel_data.h" 1622 TEST(math, ilogb_intel) { 1623 DoMathDataTest<1>(g_ilogb_intel_data, ilogb); 1624 } 1625 1626 #include "math_data/ilogbf_intel_data.h" 1627 TEST(math, ilogbf_intel) { 1628 DoMathDataTest<1>(g_ilogbf_intel_data, ilogbf); 1629 } 1630 1631 #include "math_data/ldexp_intel_data.h" 1632 TEST(math, ldexp_intel) { 1633 DoMathDataTest<1>(g_ldexp_intel_data, ldexp); 1634 } 1635 1636 #include "math_data/ldexpf_intel_data.h" 1637 TEST(math, ldexpf_intel) { 1638 DoMathDataTest<1>(g_ldexpf_intel_data, ldexpf); 1639 } 1640 1641 #include "math_data/llrint_intel_data.h" 1642 TEST(math, llrint_intel) { 1643 DoMathDataTest<1>(g_llrint_intel_data, llrint); 1644 } 1645 1646 #include "math_data/llrintf_intel_data.h" 1647 TEST(math, llrintf_intel) { 1648 DoMathDataTest<1>(g_llrintf_intel_data, llrintf); 1649 } 1650 1651 #include "math_data/log_intel_data.h" 1652 TEST(math, log_intel) { 1653 DoMathDataTest<1>(g_log_intel_data, log); 1654 } 1655 1656 #include "math_data/logf_intel_data.h" 1657 TEST(math, logf_intel) { 1658 DoMathDataTest<1>(g_logf_intel_data, logf); 1659 } 1660 1661 #include "math_data/log10_intel_data.h" 1662 TEST(math, log10_intel) { 1663 DoMathDataTest<1>(g_log10_intel_data, log10); 1664 } 1665 1666 #include "math_data/log10f_intel_data.h" 1667 TEST(math, log10f_intel) { 1668 DoMathDataTest<1>(g_log10f_intel_data, log10f); 1669 } 1670 1671 #include "math_data/log1p_intel_data.h" 1672 TEST(math, log1p_intel) { 1673 DoMathDataTest<1>(g_log1p_intel_data, log1p); 1674 } 1675 1676 #include "math_data/log1pf_intel_data.h" 1677 TEST(math, log1pf_intel) { 1678 DoMathDataTest<1>(g_log1pf_intel_data, log1pf); 1679 } 1680 1681 #include "math_data/log2_intel_data.h" 1682 TEST(math, log2_intel) { 1683 DoMathDataTest<1>(g_log2_intel_data, log2); 1684 } 1685 1686 #include "math_data/log2f_intel_data.h" 1687 TEST(math, log2f_intel) { 1688 DoMathDataTest<1>(g_log2f_intel_data, log2f); 1689 } 1690 1691 #include "math_data/logb_intel_data.h" 1692 TEST(math, logb_intel) { 1693 DoMathDataTest<1>(g_logb_intel_data, logb); 1694 } 1695 1696 #include "math_data/logbf_intel_data.h" 1697 TEST(math, logbf_intel) { 1698 DoMathDataTest<1>(g_logbf_intel_data, logbf); 1699 } 1700 1701 #include "math_data/lrint_intel_data.h" 1702 TEST(math, lrint_intel) { 1703 DoMathDataTest<1>(g_lrint_intel_data, lrint); 1704 } 1705 1706 #include "math_data/lrintf_intel_data.h" 1707 TEST(math, lrintf_intel) { 1708 DoMathDataTest<1>(g_lrintf_intel_data, lrintf); 1709 } 1710 1711 #include "math_data/modf_intel_data.h" 1712 TEST(math, modf_intel) { 1713 DoMathDataTest<1>(g_modf_intel_data, modf); 1714 } 1715 1716 #include "math_data/modff_intel_data.h" 1717 TEST(math, modff_intel) { 1718 DoMathDataTest<1>(g_modff_intel_data, modff); 1719 } 1720 1721 #include "math_data/nearbyint_intel_data.h" 1722 TEST(math, nearbyint_intel) { 1723 DoMathDataTest<1>(g_nearbyint_intel_data, nearbyint); 1724 } 1725 1726 #include "math_data/nearbyintf_intel_data.h" 1727 TEST(math, nearbyintf_intel) { 1728 DoMathDataTest<1>(g_nearbyintf_intel_data, nearbyintf); 1729 } 1730 1731 #include "math_data/nextafter_intel_data.h" 1732 TEST(math, nextafter_intel) { 1733 DoMathDataTest<1>(g_nextafter_intel_data, nextafter); 1734 } 1735 1736 #include "math_data/nextafterf_intel_data.h" 1737 TEST(math, nextafterf_intel) { 1738 DoMathDataTest<1>(g_nextafterf_intel_data, nextafterf); 1739 } 1740 1741 #include "math_data/pow_intel_data.h" 1742 TEST(math, pow_intel) { 1743 DoMathDataTest<1>(g_pow_intel_data, pow); 1744 } 1745 1746 #include "math_data/powf_intel_data.h" 1747 TEST(math, powf_intel) { 1748 DoMathDataTest<1>(g_powf_intel_data, powf); 1749 } 1750 1751 #include "math_data/remainder_intel_data.h" 1752 TEST(math, remainder_intel) { 1753 DoMathDataTest<1>(g_remainder_intel_data, remainder); 1754 } 1755 1756 #include "math_data/remainderf_intel_data.h" 1757 TEST(math, remainderf_intel) { 1758 DoMathDataTest<1>(g_remainderf_intel_data, remainderf); 1759 } 1760 1761 #include "math_data/remquo_intel_data.h" 1762 TEST(math, remquo_intel) { 1763 DoMathDataTest<1>(g_remquo_intel_data, remquo); 1764 } 1765 1766 #include "math_data/remquof_intel_data.h" 1767 TEST(math, remquof_intel) { 1768 DoMathDataTest<1>(g_remquof_intel_data, remquof); 1769 } 1770 1771 #include "math_data/rint_intel_data.h" 1772 TEST(math, rint_intel) { 1773 DoMathDataTest<1>(g_rint_intel_data, rint); 1774 } 1775 1776 #include "math_data/rintf_intel_data.h" 1777 TEST(math, rintf_intel) { 1778 DoMathDataTest<1>(g_rintf_intel_data, rintf); 1779 } 1780 1781 #include "math_data/round_intel_data.h" 1782 TEST(math, round_intel) { 1783 DoMathDataTest<1>(g_round_intel_data, round); 1784 } 1785 1786 #include "math_data/roundf_intel_data.h" 1787 TEST(math, roundf_intel) { 1788 DoMathDataTest<1>(g_roundf_intel_data, roundf); 1789 } 1790 1791 #include "math_data/scalb_intel_data.h" 1792 TEST(math, scalb_intel) { 1793 DoMathDataTest<1>(g_scalb_intel_data, scalb); 1794 } 1795 1796 #include "math_data/scalbf_intel_data.h" 1797 TEST(math, scalbf_intel) { 1798 DoMathDataTest<1>(g_scalbf_intel_data, scalbf); 1799 } 1800 1801 #include "math_data/scalbn_intel_data.h" 1802 TEST(math, scalbn_intel) { 1803 DoMathDataTest<1>(g_scalbn_intel_data, scalbn); 1804 } 1805 1806 #include "math_data/scalbnf_intel_data.h" 1807 TEST(math, scalbnf_intel) { 1808 DoMathDataTest<1>(g_scalbnf_intel_data, scalbnf); 1809 } 1810 1811 #include "math_data/significand_intel_data.h" 1812 TEST(math, significand_intel) { 1813 DoMathDataTest<1>(g_significand_intel_data, significand); 1814 } 1815 1816 #include "math_data/significandf_intel_data.h" 1817 TEST(math, significandf_intel) { 1818 DoMathDataTest<1>(g_significandf_intel_data, significandf); 1819 } 1820 1821 #include "math_data/sin_intel_data.h" 1822 TEST(math, sin_intel) { 1823 DoMathDataTest<1>(g_sin_intel_data, sin); 1824 } 1825 1826 #include "math_data/sinf_intel_data.h" 1827 TEST(math, sinf_intel) { 1828 DoMathDataTest<1>(g_sinf_intel_data, sinf); 1829 } 1830 1831 #include "math_data/sinh_intel_data.h" 1832 TEST(math, sinh_intel) { 1833 DoMathDataTest<2>(g_sinh_intel_data, sinh); 1834 } 1835 1836 #include "math_data/sinhf_intel_data.h" 1837 TEST(math, sinhf_intel) { 1838 DoMathDataTest<2>(g_sinhf_intel_data, sinhf); 1839 } 1840 1841 #include "math_data/sincos_intel_data.h" 1842 TEST(math, sincos_intel) { 1843 DoMathDataTest<1>(g_sincos_intel_data, sincos); 1844 } 1845 1846 #include "math_data/sincosf_intel_data.h" 1847 TEST(math, sincosf_intel) { 1848 DoMathDataTest<1>(g_sincosf_intel_data, sincosf); 1849 } 1850 1851 #include "math_data/sqrt_intel_data.h" 1852 TEST(math, sqrt_intel) { 1853 DoMathDataTest<1>(g_sqrt_intel_data, sqrt); 1854 } 1855 1856 #include "math_data/sqrtf_intel_data.h" 1857 TEST(math, sqrtf_intel) { 1858 DoMathDataTest<1>(g_sqrtf_intel_data, sqrtf); 1859 } 1860 1861 #include "math_data/tan_intel_data.h" 1862 TEST(math, tan_intel) { 1863 DoMathDataTest<1>(g_tan_intel_data, tan); 1864 } 1865 1866 #include "math_data/tanf_intel_data.h" 1867 TEST(math, tanf_intel) { 1868 DoMathDataTest<1>(g_tanf_intel_data, tanf); 1869 } 1870 1871 #include "math_data/tanh_intel_data.h" 1872 TEST(math, tanh_intel) { 1873 DoMathDataTest<2>(g_tanh_intel_data, tanh); 1874 } 1875 1876 #include "math_data/tanhf_intel_data.h" 1877 TEST(math, tanhf_intel) { 1878 DoMathDataTest<2>(g_tanhf_intel_data, tanhf); 1879 } 1880 1881 #include "math_data/trunc_intel_data.h" 1882 TEST(math, trunc_intel) { 1883 DoMathDataTest<1>(g_trunc_intel_data, trunc); 1884 } 1885 1886 #include "math_data/truncf_intel_data.h" 1887 TEST(math, truncf_intel) { 1888 DoMathDataTest<1>(g_truncf_intel_data, truncf); 1889 } 1890