blob: 493f3aff7e48dacb63613d65166fa79b0ed60546 [file] [log] [blame]
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001/*
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
Elliott Hughes1b37ba22014-11-03 17:03:20 -080017#define _GNU_SOURCE 1
18#include <math.h>
19
Narayan Kamath5f6f4a92014-02-19 15:42:58 +000020// 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.
Narayan Kamath5f6f4a92014-02-19 15:42:58 +000035
36namespace {
37template<typename T> inline int test_capture_signbit(const T in) {
38 return signbit(in);
39}
40template<typename T> inline int test_capture_isfinite(const T in) {
41 return isfinite(in);
42}
43template<typename T> inline int test_capture_isnan(const T in) {
44 return isnan(in);
45}
46template<typename T> inline int test_capture_isinf(const T in) {
47 return isinf(in);
48}
49}
50
Elliott Hughes1b37ba22014-11-03 17:03:20 -080051#include "math_data_test.h"
52
Elliott Hughesa0ee0782013-01-30 19:06:37 -080053#include <gtest/gtest.h>
54
55#include <fenv.h>
Brian Carlstrom133bd092014-03-24 16:45:18 -070056#include <float.h>
Elliott Hughesa0ee0782013-01-30 19:06:37 -080057#include <limits.h>
Elliott Hughesa0ee0782013-01-30 19:06:37 -080058#include <stdint.h>
Colin Cross4c5595c2021-08-16 15:51:59 -070059#include <sys/cdefs.h>
Elliott Hughesa0ee0782013-01-30 19:06:37 -080060
Tom Cherry98f016f2017-04-05 16:20:29 -070061#include <android-base/scopeguard.h>
Dmitriy Ivanov7b956ed2014-09-04 12:47:07 -070062
Elliott Hughes50cda382017-09-14 15:30:08 -070063static float float_subnormal() {
Elliott Hughesa0ee0782013-01-30 19:06:37 -080064 union {
65 float f;
66 uint32_t i;
67 } u;
68 u.i = 0x007fffff;
69 return u.f;
70}
71
Elliott Hughes50cda382017-09-14 15:30:08 -070072static double double_subnormal() {
Elliott Hughesa0ee0782013-01-30 19:06:37 -080073 union {
74 double d;
75 uint64_t i;
76 } u;
Elliott Hughes52276632013-02-12 20:18:49 -080077 u.i = 0x000fffffffffffffLL;
Elliott Hughesa0ee0782013-01-30 19:06:37 -080078 return u.d;
79}
80
Elliott Hughes50cda382017-09-14 15:30:08 -070081static long double ldouble_subnormal() {
Calin Juravle4d77c112014-03-14 17:56:46 +000082 union {
83 long double e;
84 unsigned char c[sizeof(long double)];
85 } u;
86
87 // Subnormals must have a zero exponent and non zero significand.
88 // On all supported representation the 17 bit (counting from either sides)
89 // is part of the significand so it should be enough to set that.
90 // It also applies for the case sizeof(double) = sizeof(long double)
91 for (unsigned int i = 0; i < sizeof(long double); i++) {
92 u.c[i] = 0x00;
93 }
94 u.c[sizeof(long double) - 3] = 0x80;
95 u.c[2] = 0x80;
96
97 return u.e;
98}
99
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000100TEST(math_h, fpclassify) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800101 ASSERT_EQ(FP_INFINITE, fpclassify(INFINITY));
102 ASSERT_EQ(FP_INFINITE, fpclassify(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700103 ASSERT_EQ(FP_INFINITE, fpclassify(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800104 ASSERT_EQ(FP_INFINITE, fpclassify(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700105 ASSERT_EQ(FP_INFINITE, fpclassify(-HUGE_VAL));
Calin Juravle4d77c112014-03-14 17:56:46 +0000106 ASSERT_EQ(FP_INFINITE, fpclassify(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700107 ASSERT_EQ(FP_INFINITE, fpclassify(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800108
109 ASSERT_EQ(FP_NAN, fpclassify(nanf("")));
110 ASSERT_EQ(FP_NAN, fpclassify(nan("")));
Calin Juravle4d77c112014-03-14 17:56:46 +0000111 ASSERT_EQ(FP_NAN, fpclassify(nanl("")));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800112
113 ASSERT_EQ(FP_NORMAL, fpclassify(1.0f));
114 ASSERT_EQ(FP_NORMAL, fpclassify(1.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100115 ASSERT_EQ(FP_NORMAL, fpclassify(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800116
117 ASSERT_EQ(FP_SUBNORMAL, fpclassify(float_subnormal()));
118 ASSERT_EQ(FP_SUBNORMAL, fpclassify(double_subnormal()));
Calin Juravle4d77c112014-03-14 17:56:46 +0000119 ASSERT_EQ(FP_SUBNORMAL, fpclassify(ldouble_subnormal()));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800120
121 ASSERT_EQ(FP_ZERO, fpclassify(0.0f));
122 ASSERT_EQ(FP_ZERO, fpclassify(0.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100123 ASSERT_EQ(FP_ZERO, fpclassify(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800124}
125
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000126TEST(math_h, isfinite) {
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000127 ASSERT_TRUE(test_capture_isfinite(123.0f));
128 ASSERT_TRUE(test_capture_isfinite(123.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100129 ASSERT_TRUE(test_capture_isfinite(123.0L));
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000130 ASSERT_FALSE(test_capture_isfinite(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700131 ASSERT_FALSE(test_capture_isfinite(-HUGE_VALF));
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000132 ASSERT_FALSE(test_capture_isfinite(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700133 ASSERT_FALSE(test_capture_isfinite(-HUGE_VAL));
Calin Juravle4d77c112014-03-14 17:56:46 +0000134 ASSERT_FALSE(test_capture_isfinite(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700135 ASSERT_FALSE(test_capture_isfinite(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800136}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800137
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000138TEST(math_h, isinf) {
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000139 ASSERT_FALSE(test_capture_isinf(123.0f));
140 ASSERT_FALSE(test_capture_isinf(123.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100141 ASSERT_FALSE(test_capture_isinf(123.0L));
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000142 ASSERT_TRUE(test_capture_isinf(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700143 ASSERT_TRUE(test_capture_isinf(-HUGE_VALF));
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000144 ASSERT_TRUE(test_capture_isinf(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700145 ASSERT_TRUE(test_capture_isinf(-HUGE_VAL));
Calin Juravle4d77c112014-03-14 17:56:46 +0000146 ASSERT_TRUE(test_capture_isinf(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700147 ASSERT_TRUE(test_capture_isinf(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800148}
149
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000150TEST(math_h, isnan) {
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000151 ASSERT_FALSE(test_capture_isnan(123.0f));
152 ASSERT_FALSE(test_capture_isnan(123.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100153 ASSERT_FALSE(test_capture_isnan(123.0L));
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000154 ASSERT_TRUE(test_capture_isnan(nanf("")));
155 ASSERT_TRUE(test_capture_isnan(nan("")));
Calin Juravle4d77c112014-03-14 17:56:46 +0000156 ASSERT_TRUE(test_capture_isnan(nanl("")));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800157}
158
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000159TEST(math_h, isnormal) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800160 ASSERT_TRUE(isnormal(123.0f));
161 ASSERT_TRUE(isnormal(123.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100162 ASSERT_TRUE(isnormal(123.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800163 ASSERT_FALSE(isnormal(float_subnormal()));
164 ASSERT_FALSE(isnormal(double_subnormal()));
Calin Juravle4d77c112014-03-14 17:56:46 +0000165 ASSERT_FALSE(isnormal(ldouble_subnormal()));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800166}
167
168// TODO: isgreater, isgreaterequals, isless, islessequal, islessgreater, isunordered
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000169TEST(math_h, signbit) {
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000170 ASSERT_EQ(0, test_capture_signbit(0.0f));
171 ASSERT_EQ(0, test_capture_signbit(0.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100172 ASSERT_EQ(0, test_capture_signbit(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800173
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000174 ASSERT_EQ(0, test_capture_signbit(1.0f));
175 ASSERT_EQ(0, test_capture_signbit(1.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100176 ASSERT_EQ(0, test_capture_signbit(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800177
Narayan Kamath5f6f4a92014-02-19 15:42:58 +0000178 ASSERT_NE(0, test_capture_signbit(-1.0f));
179 ASSERT_NE(0, test_capture_signbit(-1.0));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100180 ASSERT_NE(0, test_capture_signbit(-1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800181}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800182
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700183// Historical BSD cruft that isn't exposed in <math.h> any more.
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700184extern "C" int __fpclassify(double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700185extern "C" int __fpclassifyd(double);
186extern "C" int __fpclassifyf(float);
187extern "C" int __fpclassifyl(long double);
188
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000189TEST(math_h, __fpclassify) {
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700190 ASSERT_EQ(FP_INFINITE, __fpclassify(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700191 ASSERT_EQ(FP_INFINITE, __fpclassify(-HUGE_VAL));
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700192 ASSERT_EQ(FP_NAN, __fpclassify(nan("")));
193 ASSERT_EQ(FP_NORMAL, __fpclassify(1.0));
194 ASSERT_EQ(FP_SUBNORMAL, __fpclassify(double_subnormal()));
195 ASSERT_EQ(FP_ZERO, __fpclassify(0.0));
196}
197
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000198TEST(math_h, __fpclassifyd) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700199#if defined(__GLIBC__) || defined(ANDROID_HOST_MUSL)
Elliott Hughes1b37ba22014-11-03 17:03:20 -0800200#define __fpclassifyd __fpclassify
201#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800202 ASSERT_EQ(FP_INFINITE, __fpclassifyd(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700203 ASSERT_EQ(FP_INFINITE, __fpclassifyd(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800204 ASSERT_EQ(FP_NAN, __fpclassifyd(nan("")));
205 ASSERT_EQ(FP_NORMAL, __fpclassifyd(1.0));
206 ASSERT_EQ(FP_SUBNORMAL, __fpclassifyd(double_subnormal()));
207 ASSERT_EQ(FP_ZERO, __fpclassifyd(0.0));
208}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800209
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000210TEST(math_h, __fpclassifyf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800211 ASSERT_EQ(FP_INFINITE, __fpclassifyf(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700212 ASSERT_EQ(FP_INFINITE, __fpclassifyf(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800213 ASSERT_EQ(FP_NAN, __fpclassifyf(nanf("")));
214 ASSERT_EQ(FP_NORMAL, __fpclassifyf(1.0f));
215 ASSERT_EQ(FP_SUBNORMAL, __fpclassifyf(float_subnormal()));
216 ASSERT_EQ(FP_ZERO, __fpclassifyf(0.0f));
217}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800218
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000219TEST(math_h, __fpclassifyl) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800220 EXPECT_EQ(FP_INFINITE, __fpclassifyl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700221 EXPECT_EQ(FP_INFINITE, __fpclassifyl(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800222 EXPECT_EQ(FP_NAN, __fpclassifyl(nanl("")));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100223 EXPECT_EQ(FP_NORMAL, __fpclassifyl(1.0L));
Calin Juravle4d77c112014-03-14 17:56:46 +0000224 EXPECT_EQ(FP_SUBNORMAL, __fpclassifyl(ldouble_subnormal()));
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100225 EXPECT_EQ(FP_ZERO, __fpclassifyl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800226}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800227
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000228TEST(math_h, finitef) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800229 ASSERT_TRUE(finitef(123.0f));
230 ASSERT_FALSE(finitef(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700231 ASSERT_FALSE(finitef(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800232}
233
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700234// Historical BSD cruft that isn't exposed in <math.h> any more.
235extern "C" int __isfinite(double);
236extern "C" int __isfinitef(float);
Elliott Hughesef40d252017-12-20 23:01:26 -0800237extern "C" int isfinitef(float);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700238extern "C" int __isfinitel(long double);
Elliott Hughesef40d252017-12-20 23:01:26 -0800239extern "C" int isfinitel(long double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700240
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000241TEST(math_h, __isfinite) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -0800242#if defined(__GLIBC__)
243#define __isfinite __finite
Colin Cross4c5595c2021-08-16 15:51:59 -0700244#elif defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700245#define __isfinite isfinite
Elliott Hughes1b37ba22014-11-03 17:03:20 -0800246#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800247 ASSERT_TRUE(__isfinite(123.0));
248 ASSERT_FALSE(__isfinite(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700249 ASSERT_FALSE(__isfinite(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800250}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800251
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000252TEST(math_h, __isfinitef) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -0800253#if defined(__GLIBC__)
254#define __isfinitef __finitef
Colin Cross4c5595c2021-08-16 15:51:59 -0700255#elif defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700256#define __isfinitef isfinite
Elliott Hughes1b37ba22014-11-03 17:03:20 -0800257#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800258 ASSERT_TRUE(__isfinitef(123.0f));
259 ASSERT_FALSE(__isfinitef(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700260 ASSERT_FALSE(__isfinitef(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800261}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800262
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000263TEST(math_h, isfinitef) {
Elliott Hughesef40d252017-12-20 23:01:26 -0800264#if defined(__GLIBC__)
265#define isfinitef __finitef
Colin Cross4c5595c2021-08-16 15:51:59 -0700266#elif defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700267#define isfinitef isfinite
Elliott Hughesef40d252017-12-20 23:01:26 -0800268#endif
269 ASSERT_TRUE(isfinitef(123.0f));
270 ASSERT_FALSE(isfinitef(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700271 ASSERT_FALSE(isfinitef(-HUGE_VALF));
Elliott Hughesef40d252017-12-20 23:01:26 -0800272}
273
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000274TEST(math_h, __isfinitel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -0800275#if defined(__GLIBC__)
276#define __isfinitel __finitel
Colin Cross4c5595c2021-08-16 15:51:59 -0700277#elif defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700278#define __isfinitel isfinite
Elliott Hughes1b37ba22014-11-03 17:03:20 -0800279#endif
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100280 ASSERT_TRUE(__isfinitel(123.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800281 ASSERT_FALSE(__isfinitel(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700282 ASSERT_FALSE(__isfinitel(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800283}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800284
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000285TEST(math_h, isfinitel) {
Elliott Hughesef40d252017-12-20 23:01:26 -0800286#if defined(__GLIBC__)
287#define isfinitel __finitel
Colin Cross4c5595c2021-08-16 15:51:59 -0700288#elif defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700289#define isfinitel isfinite
Elliott Hughesef40d252017-12-20 23:01:26 -0800290#endif
291 ASSERT_TRUE(isfinitel(123.0L));
292 ASSERT_FALSE(isfinitel(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700293 ASSERT_FALSE(isfinitel(-HUGE_VALL));
Elliott Hughesef40d252017-12-20 23:01:26 -0800294}
295
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000296TEST(math_h, finite) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800297 ASSERT_TRUE(finite(123.0));
298 ASSERT_FALSE(finite(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700299 ASSERT_FALSE(finite(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800300}
301
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000302TEST(math_h, isinf_function) {
Elliott Hughes02c78a32014-04-11 17:02:20 -0700303 // The isinf macro deals with all three types; the isinf function is for doubles.
304 ASSERT_FALSE((isinf)(123.0));
305 ASSERT_TRUE((isinf)(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700306 ASSERT_TRUE((isinf)(-HUGE_VAL));
Elliott Hughes02c78a32014-04-11 17:02:20 -0700307}
308
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700309// Historical BSD cruft that isn't exposed in <math.h> any more.
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700310extern "C" int __isinf(double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700311extern "C" int __isinff(float);
Elliott Hughesef40d252017-12-20 23:01:26 -0800312extern "C" int isinff(float);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700313extern "C" int __isinfl(long double);
Elliott Hughesef40d252017-12-20 23:01:26 -0800314extern "C" int isinfl(long double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700315
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000316TEST(math_h, __isinf) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700317#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700318#define __isinf isinf
319#endif
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700320 ASSERT_FALSE(__isinf(123.0));
321 ASSERT_TRUE(__isinf(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700322 ASSERT_TRUE(__isinf(-HUGE_VAL));
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700323}
324
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000325TEST(math_h, __isinff) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700326#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700327#define __isinff isinf
328#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800329 ASSERT_FALSE(__isinff(123.0f));
330 ASSERT_TRUE(__isinff(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700331 ASSERT_TRUE(__isinff(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800332}
333
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000334TEST(math_h, isinff) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700335#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700336#define isinff isinf
337#endif
Elliott Hughesef40d252017-12-20 23:01:26 -0800338 ASSERT_FALSE(isinff(123.0f));
339 ASSERT_TRUE(isinff(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700340 ASSERT_TRUE(isinff(-HUGE_VALF));
Elliott Hughesef40d252017-12-20 23:01:26 -0800341}
342
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000343TEST(math_h, __isinfl) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700344#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700345#define __isinfl isinf
346#endif
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100347 ASSERT_FALSE(__isinfl(123.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800348 ASSERT_TRUE(__isinfl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700349 ASSERT_TRUE(__isinfl(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800350}
351
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000352TEST(math_h, isinfl) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700353#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700354#define isinfl isinf
355#endif
Elliott Hughesef40d252017-12-20 23:01:26 -0800356 ASSERT_FALSE(isinfl(123.0L));
357 ASSERT_TRUE(isinfl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700358 ASSERT_TRUE(isinfl(-HUGE_VALL));
Elliott Hughesef40d252017-12-20 23:01:26 -0800359}
360
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000361TEST(math_h, isnan_function) {
Elliott Hughes02c78a32014-04-11 17:02:20 -0700362 // The isnan macro deals with all three types; the isnan function is for doubles.
363 ASSERT_FALSE((isnan)(123.0));
364 ASSERT_TRUE((isnan)(nan("")));
365}
366
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700367// Historical BSD cruft that isn't exposed in <math.h> any more.
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700368extern "C" int __isnan(double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700369extern "C" int __isnanf(float);
Elliott Hughesef40d252017-12-20 23:01:26 -0800370extern "C" int isnanf(float);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700371extern "C" int __isnanl(long double);
Elliott Hughesef40d252017-12-20 23:01:26 -0800372extern "C" int isnanl(long double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700373
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000374TEST(math_h, __isnan) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700375#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700376#define __isnan isnan
377#endif
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700378 ASSERT_FALSE(__isnan(123.0));
379 ASSERT_TRUE(__isnan(nan("")));
380}
381
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000382TEST(math_h, __isnanf) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700383#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700384#define __isnanf isnan
385#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800386 ASSERT_FALSE(__isnanf(123.0f));
387 ASSERT_TRUE(__isnanf(nanf("")));
388}
389
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000390TEST(math_h, isnanf) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700391#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700392#define isnanf isnan
393#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800394 ASSERT_FALSE(isnanf(123.0f));
395 ASSERT_TRUE(isnanf(nanf("")));
396}
397
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000398TEST(math_h, __isnanl) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700399#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700400#define __isnanl isnan
401#endif
Elliott Hughesef40d252017-12-20 23:01:26 -0800402 ASSERT_FALSE(__isnanl(123.0L));
403 ASSERT_TRUE(__isnanl(nanl("")));
404}
405
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000406TEST(math_h, isnanl) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700407#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700408#define isnanl isnan
409#endif
Elliott Hughesef40d252017-12-20 23:01:26 -0800410 ASSERT_FALSE(isnanl(123.0L));
411 ASSERT_TRUE(isnanl(nanl("")));
412}
413
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700414// Historical BSD cruft that isn't exposed in <math.h> any more.
415extern "C" int __isnormal(double);
416extern "C" int __isnormalf(float);
Elliott Hughesef40d252017-12-20 23:01:26 -0800417extern "C" int isnormalf(float);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700418extern "C" int __isnormall(long double);
Elliott Hughesef40d252017-12-20 23:01:26 -0800419extern "C" int isnormall(long double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700420
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000421TEST(math_h, __isnormal) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800422#if defined(__BIONIC__)
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800423 ASSERT_TRUE(__isnormal(123.0));
424 ASSERT_FALSE(__isnormal(double_subnormal()));
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800425#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800426 GTEST_SKIP() << "glibc doesn't have __isnormal";
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800427#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800428}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800429
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000430TEST(math_h, __isnormalf) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800431#if defined(__BIONIC__)
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800432 ASSERT_TRUE(__isnormalf(123.0f));
433 ASSERT_FALSE(__isnormalf(float_subnormal()));
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800434#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800435 GTEST_SKIP() << "glibc doesn't have __isnormalf";
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800436#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800437}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800438
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000439TEST(math_h, isnormalf) {
Elliott Hughesef40d252017-12-20 23:01:26 -0800440#if defined(__BIONIC__)
441 ASSERT_TRUE(isnormalf(123.0f));
442 ASSERT_FALSE(isnormalf(float_subnormal()));
443#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800444 GTEST_SKIP() << "glibc doesn't have isnormalf";
Elliott Hughesef40d252017-12-20 23:01:26 -0800445#endif // __BIONIC__
446}
447
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000448TEST(math_h, __isnormall) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800449#if defined(__BIONIC__)
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100450 ASSERT_TRUE(__isnormall(123.0L));
Calin Juravle4d77c112014-03-14 17:56:46 +0000451 ASSERT_FALSE(__isnormall(ldouble_subnormal()));
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800452#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800453 GTEST_SKIP() << "glibc doesn't have __isnormall";
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800454#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800455}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800456
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000457TEST(math_h, isnormall) {
Elliott Hughesef40d252017-12-20 23:01:26 -0800458#if defined(__BIONIC__)
459 ASSERT_TRUE(isnormall(123.0L));
460 ASSERT_FALSE(isnormall(ldouble_subnormal()));
461#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800462 GTEST_SKIP() << "glibc doesn't have isnormall";
Elliott Hughesef40d252017-12-20 23:01:26 -0800463#endif // __BIONIC__
464}
465
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700466// Historical BSD cruft that isn't exposed in <math.h> any more.
467extern "C" int __signbit(double);
468extern "C" int __signbitf(float);
469extern "C" int __signbitl(long double);
470
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000471TEST(math_h, __signbit) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800472 ASSERT_EQ(0, __signbit(0.0));
473 ASSERT_EQ(0, __signbit(1.0));
474 ASSERT_NE(0, __signbit(-1.0));
475}
476
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000477TEST(math_h, __signbitf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800478 ASSERT_EQ(0, __signbitf(0.0f));
479 ASSERT_EQ(0, __signbitf(1.0f));
480 ASSERT_NE(0, __signbitf(-1.0f));
481}
482
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000483TEST(math_h, __signbitl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100484 ASSERT_EQ(0L, __signbitl(0.0L));
485 ASSERT_EQ(0L, __signbitl(1.0L));
486 ASSERT_NE(0L, __signbitl(-1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800487}
488
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000489TEST(math_h, acos) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000490 ASSERT_DOUBLE_EQ(M_PI/2.0, acos(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800491}
492
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000493TEST(math_h, acosf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800494 ASSERT_FLOAT_EQ(static_cast<float>(M_PI)/2.0f, acosf(0.0f));
495}
496
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000497TEST(math_h, acosl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100498 ASSERT_DOUBLE_EQ(M_PI/2.0L, acosl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800499}
500
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000501TEST(math_h, asin) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000502 ASSERT_DOUBLE_EQ(0.0, asin(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800503}
504
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000505TEST(math_h, asinf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800506 ASSERT_FLOAT_EQ(0.0f, asinf(0.0f));
507}
508
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000509TEST(math_h, asinl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100510 ASSERT_DOUBLE_EQ(0.0L, asinl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800511}
512
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000513TEST(math_h, atan) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000514 ASSERT_DOUBLE_EQ(0.0, atan(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800515}
516
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000517TEST(math_h, atanf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800518 ASSERT_FLOAT_EQ(0.0f, atanf(0.0f));
519}
520
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000521TEST(math_h, atanl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100522 ASSERT_DOUBLE_EQ(0.0L, atanl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800523}
524
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000525TEST(math_h, atan2) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000526 ASSERT_DOUBLE_EQ(0.0, atan2(0.0, 0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800527}
528
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000529TEST(math_h, atan2f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800530 ASSERT_FLOAT_EQ(0.0f, atan2f(0.0f, 0.0f));
531}
532
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000533TEST(math_h, atan2l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100534 ASSERT_DOUBLE_EQ(0.0L, atan2l(0.0L, 0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800535}
536
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000537TEST(math_h, cos) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000538 ASSERT_DOUBLE_EQ(1.0, cos(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800539}
540
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000541TEST(math_h, cosf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800542 ASSERT_FLOAT_EQ(1.0f, cosf(0.0f));
543}
544
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000545TEST(math_h, cosl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100546 ASSERT_DOUBLE_EQ(1.0L, cosl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800547}
548
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000549TEST(math_h, sin) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100550 ASSERT_DOUBLE_EQ(0.0, sin(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800551}
552
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000553TEST(math_h, sinf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800554 ASSERT_FLOAT_EQ(0.0f, sinf(0.0f));
555}
556
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000557TEST(math_h, sinl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100558 ASSERT_DOUBLE_EQ(0.0L, sinl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800559}
560
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000561TEST(math_h, sincos) {
Elliott Hughese9719f32016-09-26 09:35:04 -0700562 double s, c;
563 sincos(0.0, &s, &c);
564 ASSERT_DOUBLE_EQ(0.0, s);
565 ASSERT_DOUBLE_EQ(1.0, c);
566}
567
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000568TEST(math_h, sincosf) {
Elliott Hughese9719f32016-09-26 09:35:04 -0700569 float s, c;
570 sincosf(0.0f, &s, &c);
571 ASSERT_FLOAT_EQ(0.0f, s);
572 ASSERT_FLOAT_EQ(1.0f, c);
573}
574
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000575TEST(math_h, sincosl) {
Elliott Hughese9719f32016-09-26 09:35:04 -0700576 long double s, c;
577 sincosl(0.0L, &s, &c);
578 ASSERT_DOUBLE_EQ(0.0L, s);
579 ASSERT_DOUBLE_EQ(1.0L, c);
580}
581
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000582TEST(math_h, tan) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000583 ASSERT_DOUBLE_EQ(0.0, tan(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800584}
585
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000586TEST(math_h, tanf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800587 ASSERT_FLOAT_EQ(0.0f, tanf(0.0f));
588}
589
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000590TEST(math_h, tanl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100591 ASSERT_DOUBLE_EQ(0.0L, tanl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800592}
593
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000594TEST(math_h, acosh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000595 ASSERT_DOUBLE_EQ(0.0, acosh(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800596}
597
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000598TEST(math_h, acoshf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800599 ASSERT_FLOAT_EQ(0.0f, acoshf(1.0f));
600}
601
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000602TEST(math_h, acoshl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100603 ASSERT_DOUBLE_EQ(0.0L, acoshl(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800604}
605
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000606TEST(math_h, asinh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000607 ASSERT_DOUBLE_EQ(0.0, asinh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800608}
609
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000610TEST(math_h, asinhf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800611 ASSERT_FLOAT_EQ(0.0f, asinhf(0.0f));
612}
613
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000614TEST(math_h, asinhl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100615 ASSERT_DOUBLE_EQ(0.0L, asinhl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800616}
617
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000618TEST(math_h, atanh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000619 ASSERT_DOUBLE_EQ(0.0, atanh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800620}
621
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000622TEST(math_h, atanhf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800623 ASSERT_FLOAT_EQ(0.0f, atanhf(0.0f));
624}
625
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000626TEST(math_h, atanhl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100627 ASSERT_DOUBLE_EQ(0.0L, atanhl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800628}
629
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000630TEST(math_h, cosh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000631 ASSERT_DOUBLE_EQ(1.0, cosh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800632}
633
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000634TEST(math_h, coshf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800635 ASSERT_FLOAT_EQ(1.0f, coshf(0.0f));
636}
637
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000638TEST(math_h, coshl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100639 ASSERT_DOUBLE_EQ(1.0L, coshl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800640}
641
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000642TEST(math_h, sinh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000643 ASSERT_DOUBLE_EQ(0.0, sinh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800644}
645
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000646TEST(math_h, sinhf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800647 ASSERT_FLOAT_EQ(0.0f, sinhf(0.0f));
648}
649
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000650TEST(math_h, sinhl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100651 ASSERT_DOUBLE_EQ(0.0L, sinhl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800652}
653
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000654TEST(math_h, tanh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000655 ASSERT_DOUBLE_EQ(0.0, tanh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800656}
657
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000658TEST(math_h, tanhf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800659 ASSERT_FLOAT_EQ(0.0f, tanhf(0.0f));
660}
661
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000662TEST(math_h, tanhl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100663 ASSERT_DOUBLE_EQ(0.0L, tanhl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800664}
665
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000666TEST(math_h, log) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000667 ASSERT_DOUBLE_EQ(1.0, log(M_E));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800668}
669
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000670TEST(math_h, logf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800671 ASSERT_FLOAT_EQ(1.0f, logf(static_cast<float>(M_E)));
672}
673
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000674TEST(math_h, logl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100675 ASSERT_DOUBLE_EQ(1.0L, logl(M_E));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800676}
677
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000678TEST(math_h, log2) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000679 ASSERT_DOUBLE_EQ(12.0, log2(4096.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800680}
681
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000682TEST(math_h, log2f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800683 ASSERT_FLOAT_EQ(12.0f, log2f(4096.0f));
684}
685
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000686TEST(math_h, log2l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100687 ASSERT_DOUBLE_EQ(12.0L, log2l(4096.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800688}
689
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000690TEST(math_h, log10) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000691 ASSERT_DOUBLE_EQ(3.0, log10(1000.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800692}
693
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000694TEST(math_h, log10f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800695 ASSERT_FLOAT_EQ(3.0f, log10f(1000.0f));
696}
697
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000698TEST(math_h, log10l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100699 ASSERT_DOUBLE_EQ(3.0L, log10l(1000.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800700}
701
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000702TEST(math_h, cbrt) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000703 ASSERT_DOUBLE_EQ(3.0, cbrt(27.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800704}
705
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000706TEST(math_h, cbrtf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800707 ASSERT_FLOAT_EQ(3.0f, cbrtf(27.0f));
708}
709
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000710TEST(math_h, cbrtl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100711 ASSERT_DOUBLE_EQ(3.0L, cbrtl(27.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800712}
713
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000714TEST(math_h, sqrt) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000715 ASSERT_DOUBLE_EQ(2.0, sqrt(4.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800716}
717
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000718TEST(math_h, sqrtf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800719 ASSERT_FLOAT_EQ(2.0f, sqrtf(4.0f));
720}
721
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000722TEST(math_h, sqrtl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100723 ASSERT_DOUBLE_EQ(2.0L, sqrtl(4.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800724}
725
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000726TEST(math_h, exp) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000727 ASSERT_DOUBLE_EQ(1.0, exp(0.0));
728 ASSERT_DOUBLE_EQ(M_E, exp(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800729}
730
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000731TEST(math_h, expf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800732 ASSERT_FLOAT_EQ(1.0f, expf(0.0f));
733 ASSERT_FLOAT_EQ(static_cast<float>(M_E), expf(1.0f));
734}
735
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000736TEST(math_h, expl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100737 ASSERT_DOUBLE_EQ(1.0L, expl(0.0L));
738 ASSERT_DOUBLE_EQ(M_E, expl(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800739}
740
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000741TEST(math_h, exp2) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000742 ASSERT_DOUBLE_EQ(8.0, exp2(3.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800743}
744
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000745TEST(math_h, exp2f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800746 ASSERT_FLOAT_EQ(8.0f, exp2f(3.0f));
747}
748
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000749TEST(math_h, exp2l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100750 ASSERT_DOUBLE_EQ(8.0L, exp2l(3.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800751}
752
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000753TEST(math_h, expm1) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000754 ASSERT_DOUBLE_EQ(M_E - 1.0, expm1(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800755}
756
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000757TEST(math_h, expm1f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800758 ASSERT_FLOAT_EQ(static_cast<float>(M_E) - 1.0f, expm1f(1.0f));
759}
760
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000761TEST(math_h, expm1l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100762 ASSERT_DOUBLE_EQ(M_E - 1.0L, expm1l(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800763}
764
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000765TEST(math_h, pow) {
Elliott Hughes6a8f00d2013-11-13 13:29:23 -0800766 ASSERT_TRUE(isnan(pow(nan(""), 3.0)));
Calin Juravle4d77c112014-03-14 17:56:46 +0000767 ASSERT_DOUBLE_EQ(1.0, (pow(1.0, nan(""))));
Elliott Hughes6a8f00d2013-11-13 13:29:23 -0800768 ASSERT_TRUE(isnan(pow(2.0, nan(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +0000769 ASSERT_DOUBLE_EQ(8.0, pow(2.0, 3.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800770}
771
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000772TEST(math_h, powf) {
Elliott Hughes6a8f00d2013-11-13 13:29:23 -0800773 ASSERT_TRUE(isnanf(powf(nanf(""), 3.0f)));
Narayan Kamathaf64dad2013-11-18 18:47:48 +0000774 ASSERT_FLOAT_EQ(1.0f, (powf(1.0f, nanf(""))));
Elliott Hughes6a8f00d2013-11-13 13:29:23 -0800775 ASSERT_TRUE(isnanf(powf(2.0f, nanf(""))));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800776 ASSERT_FLOAT_EQ(8.0f, powf(2.0f, 3.0f));
777}
778
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000779TEST(math_h, powl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100780 ASSERT_TRUE(__isnanl(powl(nanl(""), 3.0L)));
781 ASSERT_DOUBLE_EQ(1.0L, (powl(1.0L, nanl(""))));
782 ASSERT_TRUE(__isnanl(powl(2.0L, nanl(""))));
783 ASSERT_DOUBLE_EQ(8.0L, powl(2.0L, 3.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800784}
785
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000786TEST(math_h, ceil) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000787 ASSERT_DOUBLE_EQ(1.0, ceil(0.9));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800788}
789
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000790TEST(math_h, ceilf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800791 ASSERT_FLOAT_EQ(1.0f, ceilf(0.9f));
792}
793
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000794TEST(math_h, ceill) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100795 ASSERT_DOUBLE_EQ(1.0L, ceill(0.9L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800796}
797
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000798TEST(math_h, floor) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000799 ASSERT_DOUBLE_EQ(1.0, floor(1.1));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800800}
801
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000802TEST(math_h, floorf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800803 ASSERT_FLOAT_EQ(1.0f, floorf(1.1f));
804}
805
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000806TEST(math_h, floorl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100807 ASSERT_DOUBLE_EQ(1.0L, floorl(1.1L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800808}
809
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000810TEST(math_h, fabs) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000811 ASSERT_DOUBLE_EQ(1.0, fabs(-1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800812}
813
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000814TEST(math_h, fabsf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800815 ASSERT_FLOAT_EQ(1.0f, fabsf(-1.0f));
816}
817
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000818TEST(math_h, fabsl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100819 ASSERT_DOUBLE_EQ(1.0L, fabsl(-1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800820}
821
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000822TEST(math_h, ldexp) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000823 ASSERT_DOUBLE_EQ(16.0, ldexp(2.0, 3.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800824}
825
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000826TEST(math_h, ldexpf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800827 ASSERT_FLOAT_EQ(16.0f, ldexpf(2.0f, 3.0f));
828}
829
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000830TEST(math_h, ldexpl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100831 ASSERT_DOUBLE_EQ(16.0L, ldexpl(2.0L, 3.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800832}
833
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000834TEST(math_h, fmod) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000835 ASSERT_DOUBLE_EQ(2.0, fmod(12.0, 10.0));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700836
837 // If x is an infinity, NaN is returned.
838 ASSERT_TRUE(isnan(fmod(HUGE_VAL, 10.0f)));
839 ASSERT_TRUE(isnan(fmod(-HUGE_VAL, 10.0f)));
840
841 // If x or y is a NaN, NaN is returned.
842 ASSERT_TRUE(isnan(fmod(nan(""), 10.0)));
843 ASSERT_TRUE(isnan(fmod(12.0, nan(""))));
844
845 // If y is 0, NaN is returned.
846 ASSERT_TRUE(isnan(fmod(3.0, 0.0)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800847}
848
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000849TEST(math_h, fmodf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800850 ASSERT_FLOAT_EQ(2.0f, fmodf(12.0f, 10.0f));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700851
852 // If x is an infinity, NaN is returned.
853 ASSERT_TRUE(isnanf(fmodf(HUGE_VALF, 10.0f)));
854 ASSERT_TRUE(isnanf(fmodf(-HUGE_VALF, 10.0f)));
855
856 // If x or y is a NaN, NaN is returned.
857 ASSERT_TRUE(isnanf(fmodf(nanf(""), 10.0f)));
858 ASSERT_TRUE(isnanf(fmodf(12.0f, nan(""))));
859
860 // If y is 0, NaN is returned.
861 ASSERT_TRUE(isnanf(fmodf(3.0f, 0.0f)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800862}
863
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000864TEST(math_h, fmodl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100865 ASSERT_DOUBLE_EQ(2.0L, fmodl(12.0L, 10.0L));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700866
867 // If x is an infinity, NaN is returned.
868 ASSERT_TRUE(isnanl(fmodl(HUGE_VALL, 10.0L)));
869 ASSERT_TRUE(isnanl(fmodl(-HUGE_VALL, 10.0L)));
870
871 // If x or y is a NaN, NaN is returned.
872 ASSERT_TRUE(isnanl(fmodl(nanl(""), 10.0L)));
873 ASSERT_TRUE(isnanl(fmodl(12.0L, nanl(""))));
874
875 // If y is 0, NaN is returned.
876 ASSERT_TRUE(isnanl(fmodl(3.0L, 0.0L)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800877}
878
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000879TEST(math_h, remainder) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000880 ASSERT_DOUBLE_EQ(2.0, remainder(12.0, 10.0));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700881
882 // If x or y is a NaN, NaN is returned.
883 ASSERT_TRUE(isnan(remainder(nan(""), 10.0)));
884 ASSERT_TRUE(isnan(remainder(12.0, nan(""))));
885
886 // If x is an infinity, NaN is returned.
887 ASSERT_TRUE(isnan(remainder(HUGE_VAL, 10.0)));
888 ASSERT_TRUE(isnan(remainder(-HUGE_VAL, 10.0)));
889
890 // If y is 0, NaN is returned.
891 ASSERT_TRUE(isnan(remainder(12.0, 0.0)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800892}
893
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000894TEST(math_h, remainderf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800895 ASSERT_FLOAT_EQ(2.0f, remainderf(12.0f, 10.0f));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700896
897 // If x or y is a NaN, NaN is returned.
898 ASSERT_TRUE(isnanf(remainderf(nanf(""), 10.0f)));
899 ASSERT_TRUE(isnanf(remainderf(12.0f, nanf(""))));
900
901 // If x is an infinity, NaN is returned.
902 ASSERT_TRUE(isnanf(remainderf(HUGE_VALF, 10.0f)));
903 ASSERT_TRUE(isnanf(remainderf(-HUGE_VALF, 10.0f)));
904
905 // If y is 0, NaN is returned.
906 ASSERT_TRUE(isnanf(remainderf(12.0f, 0.0f)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800907}
908
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000909TEST(math_h, remainderl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100910 ASSERT_DOUBLE_EQ(2.0L, remainderl(12.0L, 10.0L));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700911
912 // If x or y is a NaN, NaN is returned.
913 ASSERT_TRUE(isnanl(remainderl(nanl(""), 10.0L)));
914 ASSERT_TRUE(isnanl(remainderl(12.0L, nanl(""))));
915
916 // If x is an infinity, NaN is returned.
917 ASSERT_TRUE(isnanl(remainderl(HUGE_VALL, 10.0L)));
918 ASSERT_TRUE(isnanl(remainderl(-HUGE_VALL, 10.0L)));
919
920 // If y is 0, NaN is returned.
921 ASSERT_TRUE(isnanl(remainderl(12.0L, 0.0L)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800922}
923
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000924TEST(math_h, drem) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000925 ASSERT_DOUBLE_EQ(2.0, drem(12.0, 10.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800926}
927
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000928TEST(math_h, dremf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800929 ASSERT_FLOAT_EQ(2.0f, dremf(12.0f, 10.0f));
930}
931
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000932TEST(math_h, fmax) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000933 ASSERT_DOUBLE_EQ(12.0, fmax(12.0, 10.0));
934 ASSERT_DOUBLE_EQ(12.0, fmax(12.0, nan("")));
935 ASSERT_DOUBLE_EQ(12.0, fmax(nan(""), 12.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800936}
937
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000938TEST(math_h, fmaxf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800939 ASSERT_FLOAT_EQ(12.0f, fmaxf(12.0f, 10.0f));
940 ASSERT_FLOAT_EQ(12.0f, fmaxf(12.0f, nanf("")));
941 ASSERT_FLOAT_EQ(12.0f, fmaxf(nanf(""), 12.0f));
942}
943
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000944TEST(math_h, fmaxl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100945 ASSERT_DOUBLE_EQ(12.0L, fmaxl(12.0L, 10.0L));
946 ASSERT_DOUBLE_EQ(12.0L, fmaxl(12.0L, nanl("")));
947 ASSERT_DOUBLE_EQ(12.0L, fmaxl(nanl(""), 12.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800948}
949
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000950TEST(math_h, fmin) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000951 ASSERT_DOUBLE_EQ(10.0, fmin(12.0, 10.0));
952 ASSERT_DOUBLE_EQ(12.0, fmin(12.0, nan("")));
953 ASSERT_DOUBLE_EQ(12.0, fmin(nan(""), 12.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800954}
955
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000956TEST(math_h, fminf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800957 ASSERT_FLOAT_EQ(10.0f, fminf(12.0f, 10.0f));
958 ASSERT_FLOAT_EQ(12.0f, fminf(12.0f, nanf("")));
959 ASSERT_FLOAT_EQ(12.0f, fminf(nanf(""), 12.0f));
960}
961
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000962TEST(math_h, fminl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100963 ASSERT_DOUBLE_EQ(10.0L, fminl(12.0L, 10.0L));
964 ASSERT_DOUBLE_EQ(12.0L, fminl(12.0L, nanl("")));
965 ASSERT_DOUBLE_EQ(12.0L, fminl(nanl(""), 12.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800966}
967
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000968TEST(math_h, fma) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000969 ASSERT_DOUBLE_EQ(10.0, fma(2.0, 3.0, 4.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800970}
971
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000972TEST(math_h, fmaf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800973 ASSERT_FLOAT_EQ(10.0f, fmaf(2.0f, 3.0f, 4.0f));
974}
975
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000976TEST(math_h, fmal) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100977 ASSERT_DOUBLE_EQ(10.0L, fmal(2.0L, 3.0L, 4.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800978}
979
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000980TEST(math_h, hypot) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000981 ASSERT_DOUBLE_EQ(5.0, hypot(3.0, 4.0));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700982
983 // If x or y is an infinity, returns positive infinity.
984 ASSERT_EQ(HUGE_VAL, hypot(3.0, HUGE_VAL));
985 ASSERT_EQ(HUGE_VAL, hypot(3.0, -HUGE_VAL));
986 ASSERT_EQ(HUGE_VAL, hypot(HUGE_VAL, 4.0));
987 ASSERT_EQ(HUGE_VAL, hypot(-HUGE_VAL, 4.0));
988
989 // If x or y is a NaN, returns NaN.
990 ASSERT_TRUE(isnan(hypot(3.0, nan(""))));
991 ASSERT_TRUE(isnan(hypot(nan(""), 4.0)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800992}
993
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000994TEST(math_h, hypotf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800995 ASSERT_FLOAT_EQ(5.0f, hypotf(3.0f, 4.0f));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700996
997 // If x or y is an infinity, returns positive infinity.
998 ASSERT_EQ(HUGE_VALF, hypotf(3.0f, HUGE_VALF));
999 ASSERT_EQ(HUGE_VALF, hypotf(3.0f, -HUGE_VALF));
1000 ASSERT_EQ(HUGE_VALF, hypotf(HUGE_VALF, 4.0f));
1001 ASSERT_EQ(HUGE_VALF, hypotf(-HUGE_VALF, 4.0f));
1002
1003 // If x or y is a NaN, returns NaN.
1004 ASSERT_TRUE(isnanf(hypotf(3.0f, nanf(""))));
1005 ASSERT_TRUE(isnanf(hypotf(nanf(""), 4.0f)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001006}
1007
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001008TEST(math_h, hypotl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001009 ASSERT_DOUBLE_EQ(5.0L, hypotl(3.0L, 4.0L));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001010
1011 // If x or y is an infinity, returns positive infinity.
1012 ASSERT_EQ(HUGE_VALL, hypotl(3.0L, HUGE_VALL));
1013 ASSERT_EQ(HUGE_VALL, hypotl(3.0L, -HUGE_VALL));
1014 ASSERT_EQ(HUGE_VALL, hypotl(HUGE_VALL, 4.0L));
1015 ASSERT_EQ(HUGE_VALL, hypotl(-HUGE_VALL, 4.0L));
1016
1017 // If x or y is a NaN, returns NaN.
1018 ASSERT_TRUE(isnanl(hypotl(3.0L, nanl(""))));
1019 ASSERT_TRUE(isnanl(hypotl(nanl(""), 4.0L)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001020}
1021
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001022TEST(math_h, erf) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001023 ASSERT_DOUBLE_EQ(0.84270079294971489, erf(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001024}
1025
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001026TEST(math_h, erff) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001027 ASSERT_FLOAT_EQ(0.84270078f, erff(1.0f));
1028}
1029
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001030TEST(math_h, erfl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001031 ASSERT_DOUBLE_EQ(0.84270079294971489L, erfl(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001032}
1033
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001034TEST(math_h, erfc) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001035 ASSERT_DOUBLE_EQ(0.15729920705028513, erfc(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001036}
1037
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001038TEST(math_h, erfcf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001039 ASSERT_FLOAT_EQ(0.15729921f, erfcf(1.0f));
1040}
1041
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001042TEST(math_h, erfcl) {
Chih-Hung Hsiehc2edae32018-12-11 15:16:24 -08001043 ASSERT_DOUBLE_EQ(0.15729920705028513L, erfcl(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001044}
1045
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001046TEST(math_h, lrint) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001047 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Dmitriy Ivanov7b956ed2014-09-04 12:47:07 -07001048
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001049 fesetround(FE_UPWARD); // lrint/lrintf/lrintl obey the rounding mode.
Elliott Hughes4ceb3472022-10-25 22:27:10 +00001050 EXPECT_EQ(1235, lrint(1234.01));
1051 EXPECT_EQ(1235, lrintf(1234.01f));
1052 EXPECT_EQ(1235, lrintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001053 fesetround(FE_TOWARDZERO); // lrint/lrintf/lrintl obey the rounding mode.
Elliott Hughes4ceb3472022-10-25 22:27:10 +00001054 EXPECT_EQ(1234, lrint(1234.01));
1055 EXPECT_EQ(1234, lrintf(1234.01f));
1056 EXPECT_EQ(1234, lrintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001057
1058 fesetround(FE_UPWARD); // llrint/llrintf/llrintl obey the rounding mode.
Elliott Hughes4ceb3472022-10-25 22:27:10 +00001059 EXPECT_EQ(1235L, llrint(1234.01));
1060 EXPECT_EQ(1235L, llrintf(1234.01f));
1061 EXPECT_EQ(1235L, llrintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001062 fesetround(FE_TOWARDZERO); // llrint/llrintf/llrintl obey the rounding mode.
Elliott Hughes4ceb3472022-10-25 22:27:10 +00001063 EXPECT_EQ(1234L, llrint(1234.01));
1064 EXPECT_EQ(1234L, llrintf(1234.01f));
1065 EXPECT_EQ(1234L, llrintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001066}
1067
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001068TEST(math_h, rint) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001069 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Dmitriy Ivanov7b956ed2014-09-04 12:47:07 -07001070
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001071 fesetround(FE_UPWARD); // rint/rintf/rintl obey the rounding mode.
1072 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
1073 ASSERT_EQ(1234.0, rint(1234.0));
1074 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1075 ASSERT_EQ(1235.0, rint(1234.01));
1076 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
1077
1078 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
1079 ASSERT_EQ(1234.0f, rintf(1234.0f));
1080 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1081 ASSERT_EQ(1235.0f, rintf(1234.01f));
1082 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
1083
1084 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001085 ASSERT_EQ(1234.0, rintl(1234.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001086 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001087 ASSERT_EQ(1235.0, rintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001088 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
1089
1090 fesetround(FE_TOWARDZERO); // rint/rintf obey the rounding mode.
1091 ASSERT_EQ(1234.0, rint(1234.01));
1092 ASSERT_EQ(1234.0f, rintf(1234.01f));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001093 ASSERT_EQ(1234.0, rintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001094}
1095
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001096TEST(math_h, nearbyint) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001097 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001098 fesetround(FE_UPWARD); // nearbyint/nearbyintf/nearbyintl obey the rounding mode.
1099 feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag.
1100 ASSERT_EQ(1234.0, nearbyint(1234.0));
1101 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1102 ASSERT_EQ(1235.0, nearbyint(1234.01));
1103 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1104
1105 feclearexcept(FE_ALL_EXCEPT);
1106 ASSERT_EQ(1234.0f, nearbyintf(1234.0f));
1107 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1108 ASSERT_EQ(1235.0f, nearbyintf(1234.01f));
1109 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1110
1111 feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag.
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001112 ASSERT_EQ(1234.0, nearbyintl(1234.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001113 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001114 ASSERT_EQ(1235.0, nearbyintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001115 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1116
1117 fesetround(FE_TOWARDZERO); // nearbyint/nearbyintf/nearbyintl obey the rounding mode.
1118 ASSERT_EQ(1234.0, nearbyint(1234.01));
1119 ASSERT_EQ(1234.0f, nearbyintf(1234.01f));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001120 ASSERT_EQ(1234.0, nearbyintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001121}
1122
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001123TEST(math_h, lround) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001124 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001125 fesetround(FE_UPWARD); // lround ignores the rounding mode.
1126 ASSERT_EQ(1234, lround(1234.01));
1127 ASSERT_EQ(1234, lroundf(1234.01f));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001128 ASSERT_EQ(1234, lroundl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001129}
1130
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001131TEST(math_h, llround) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001132 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001133 fesetround(FE_UPWARD); // llround ignores the rounding mode.
1134 ASSERT_EQ(1234L, llround(1234.01));
1135 ASSERT_EQ(1234L, llroundf(1234.01f));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001136 ASSERT_EQ(1234L, llroundl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001137}
1138
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001139TEST(math_h, ilogb) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001140 ASSERT_EQ(FP_ILOGB0, ilogb(0.0));
1141 ASSERT_EQ(FP_ILOGBNAN, ilogb(nan("")));
1142 ASSERT_EQ(INT_MAX, ilogb(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001143 ASSERT_EQ(INT_MAX, ilogb(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001144 ASSERT_EQ(0, ilogb(1.0));
1145 ASSERT_EQ(3, ilogb(10.0));
1146}
1147
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001148TEST(math_h, ilogbf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001149 ASSERT_EQ(FP_ILOGB0, ilogbf(0.0f));
1150 ASSERT_EQ(FP_ILOGBNAN, ilogbf(nanf("")));
1151 ASSERT_EQ(INT_MAX, ilogbf(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001152 ASSERT_EQ(INT_MAX, ilogbf(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001153 ASSERT_EQ(0, ilogbf(1.0f));
1154 ASSERT_EQ(3, ilogbf(10.0f));
1155}
1156
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001157TEST(math_h, ilogbl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001158 ASSERT_EQ(FP_ILOGB0, ilogbl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001159 ASSERT_EQ(FP_ILOGBNAN, ilogbl(nanl("")));
1160 ASSERT_EQ(INT_MAX, ilogbl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001161 ASSERT_EQ(INT_MAX, ilogbl(-HUGE_VALL));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001162 ASSERT_EQ(0L, ilogbl(1.0L));
1163 ASSERT_EQ(3L, ilogbl(10.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001164}
1165
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001166TEST(math_h, logb) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001167 ASSERT_EQ(-HUGE_VAL, logb(0.0));
1168 ASSERT_TRUE(isnan(logb(nan(""))));
1169 ASSERT_TRUE(isinf(logb(HUGE_VAL)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001170 ASSERT_TRUE(isinf(logb(-HUGE_VAL)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001171 ASSERT_EQ(0.0, logb(1.0));
1172 ASSERT_EQ(3.0, logb(10.0));
1173}
1174
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001175TEST(math_h, logbf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001176 ASSERT_EQ(-HUGE_VALF, logbf(0.0f));
1177 ASSERT_TRUE(isnanf(logbf(nanf(""))));
Elliott Hughesef40d252017-12-20 23:01:26 -08001178 ASSERT_TRUE(isinff(logbf(HUGE_VALF)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001179 ASSERT_TRUE(isinff(logbf(-HUGE_VALF)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001180 ASSERT_EQ(0.0f, logbf(1.0f));
1181 ASSERT_EQ(3.0f, logbf(10.0f));
1182}
1183
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001184TEST(math_h, logbl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001185 ASSERT_EQ(-HUGE_VAL, logbl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001186 ASSERT_TRUE(isnan(logbl(nanl(""))));
1187 ASSERT_TRUE(isinf(logbl(HUGE_VALL)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001188 ASSERT_TRUE(isinf(logbl(-HUGE_VALL)));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001189 ASSERT_EQ(0.0L, logbl(1.0L));
1190 ASSERT_EQ(3.0L, logbl(10.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001191}
1192
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001193TEST(math_h, log1p) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001194 ASSERT_EQ(-HUGE_VAL, log1p(-1.0));
1195 ASSERT_TRUE(isnan(log1p(nan(""))));
1196 ASSERT_TRUE(isinf(log1p(HUGE_VAL)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001197 ASSERT_TRUE(isnan(log1p(-HUGE_VAL)));
Calin Juravle4d77c112014-03-14 17:56:46 +00001198 ASSERT_DOUBLE_EQ(1.0, log1p(M_E - 1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001199}
1200
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001201TEST(math_h, log1pf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001202 ASSERT_EQ(-HUGE_VALF, log1pf(-1.0f));
1203 ASSERT_TRUE(isnanf(log1pf(nanf(""))));
Elliott Hughesef40d252017-12-20 23:01:26 -08001204 ASSERT_TRUE(isinff(log1pf(HUGE_VALF)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001205 ASSERT_TRUE(isnanf(log1pf(-HUGE_VALF)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001206 ASSERT_FLOAT_EQ(1.0f, log1pf(static_cast<float>(M_E) - 1.0f));
1207}
1208
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001209TEST(math_h, log1pl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001210 ASSERT_EQ(-HUGE_VALL, log1pl(-1.0L));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001211 ASSERT_TRUE(isnanl(log1pl(nanl(""))));
1212 ASSERT_TRUE(isinfl(log1pl(HUGE_VALL)));
1213 ASSERT_TRUE(isnanl(log1pl(-HUGE_VALL)));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001214 ASSERT_DOUBLE_EQ(1.0L, log1pl(M_E - 1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001215}
1216
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001217TEST(math_h, fdim) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001218 ASSERT_DOUBLE_EQ(0.0, fdim(1.0, 1.0));
1219 ASSERT_DOUBLE_EQ(1.0, fdim(2.0, 1.0));
1220 ASSERT_DOUBLE_EQ(0.0, fdim(1.0, 2.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001221}
1222
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001223TEST(math_h, fdimf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001224 ASSERT_FLOAT_EQ(0.0f, fdimf(1.0f, 1.0f));
1225 ASSERT_FLOAT_EQ(1.0f, fdimf(2.0f, 1.0f));
1226 ASSERT_FLOAT_EQ(0.0f, fdimf(1.0f, 2.0f));
1227}
1228
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001229TEST(math_h, fdiml) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001230 ASSERT_DOUBLE_EQ(0.0L, fdiml(1.0L, 1.0L));
1231 ASSERT_DOUBLE_EQ(1.0L, fdiml(2.0L, 1.0L));
1232 ASSERT_DOUBLE_EQ(0.0L, fdiml(1.0L, 2.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001233}
1234
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001235TEST(math_h, round) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001236 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001237 fesetround(FE_TOWARDZERO); // round ignores the rounding mode and always rounds away from zero.
Calin Juravle4d77c112014-03-14 17:56:46 +00001238 ASSERT_DOUBLE_EQ(1.0, round(0.5));
1239 ASSERT_DOUBLE_EQ(-1.0, round(-0.5));
1240 ASSERT_DOUBLE_EQ(0.0, round(0.0));
1241 ASSERT_DOUBLE_EQ(-0.0, round(-0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001242 ASSERT_TRUE(isnan(round(nan(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +00001243 ASSERT_DOUBLE_EQ(HUGE_VAL, round(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001244 ASSERT_DOUBLE_EQ(-HUGE_VAL, round(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001245}
1246
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001247TEST(math_h, roundf) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001248 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001249 fesetround(FE_TOWARDZERO); // roundf ignores the rounding mode and always rounds away from zero.
1250 ASSERT_FLOAT_EQ(1.0f, roundf(0.5f));
1251 ASSERT_FLOAT_EQ(-1.0f, roundf(-0.5f));
1252 ASSERT_FLOAT_EQ(0.0f, roundf(0.0f));
1253 ASSERT_FLOAT_EQ(-0.0f, roundf(-0.0f));
1254 ASSERT_TRUE(isnanf(roundf(nanf(""))));
1255 ASSERT_FLOAT_EQ(HUGE_VALF, roundf(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001256 ASSERT_FLOAT_EQ(-HUGE_VALF, roundf(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001257}
1258
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001259TEST(math_h, roundl) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001260 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001261 fesetround(FE_TOWARDZERO); // roundl ignores the rounding mode and always rounds away from zero.
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001262 ASSERT_DOUBLE_EQ(1.0L, roundl(0.5L));
1263 ASSERT_DOUBLE_EQ(-1.0L, roundl(-0.5L));
1264 ASSERT_DOUBLE_EQ(0.0L, roundl(0.0L));
1265 ASSERT_DOUBLE_EQ(-0.0L, roundl(-0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001266 ASSERT_TRUE(isnan(roundl(nanl(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +00001267 ASSERT_DOUBLE_EQ(HUGE_VALL, roundl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001268 ASSERT_DOUBLE_EQ(-HUGE_VALL, roundl(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001269}
1270
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001271TEST(math_h, trunc) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001272 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001273 fesetround(FE_UPWARD); // trunc ignores the rounding mode and always rounds toward zero.
Calin Juravle4d77c112014-03-14 17:56:46 +00001274 ASSERT_DOUBLE_EQ(1.0, trunc(1.5));
1275 ASSERT_DOUBLE_EQ(-1.0, trunc(-1.5));
1276 ASSERT_DOUBLE_EQ(0.0, trunc(0.0));
1277 ASSERT_DOUBLE_EQ(-0.0, trunc(-0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001278 ASSERT_TRUE(isnan(trunc(nan(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +00001279 ASSERT_DOUBLE_EQ(HUGE_VAL, trunc(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001280 ASSERT_DOUBLE_EQ(-HUGE_VAL, trunc(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001281}
1282
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001283TEST(math_h, truncf) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001284 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001285 fesetround(FE_UPWARD); // truncf ignores the rounding mode and always rounds toward zero.
1286 ASSERT_FLOAT_EQ(1.0f, truncf(1.5f));
1287 ASSERT_FLOAT_EQ(-1.0f, truncf(-1.5f));
1288 ASSERT_FLOAT_EQ(0.0f, truncf(0.0f));
1289 ASSERT_FLOAT_EQ(-0.0f, truncf(-0.0f));
1290 ASSERT_TRUE(isnan(truncf(nanf(""))));
1291 ASSERT_FLOAT_EQ(HUGE_VALF, truncf(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001292 ASSERT_FLOAT_EQ(-HUGE_VALF, truncf(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001293}
1294
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001295TEST(math_h, truncl) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001296 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001297 fesetround(FE_UPWARD); // truncl ignores the rounding mode and always rounds toward zero.
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001298 ASSERT_DOUBLE_EQ(1.0L, truncl(1.5L));
1299 ASSERT_DOUBLE_EQ(-1.0L, truncl(-1.5L));
1300 ASSERT_DOUBLE_EQ(0.0L, truncl(0.0L));
1301 ASSERT_DOUBLE_EQ(-0.0L, truncl(-0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001302 ASSERT_TRUE(isnan(truncl(nan(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +00001303 ASSERT_DOUBLE_EQ(HUGE_VALL, truncl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001304 ASSERT_DOUBLE_EQ(-HUGE_VALL, truncl(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001305}
1306
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001307TEST(math_h, nextafter) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001308 ASSERT_DOUBLE_EQ(0.0, nextafter(0.0, 0.0));
1309 ASSERT_DOUBLE_EQ(4.9406564584124654e-324, nextafter(0.0, 1.0));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001310 ASSERT_DOUBLE_EQ(-4.9406564584124654e-324, nextafter(0.0, -1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001311}
1312
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001313TEST(math_h, nextafterf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001314 ASSERT_FLOAT_EQ(0.0f, nextafterf(0.0f, 0.0f));
1315 ASSERT_FLOAT_EQ(1.4012985e-45f, nextafterf(0.0f, 1.0f));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001316 ASSERT_FLOAT_EQ(-1.4012985e-45f, nextafterf(0.0f, -1.0f));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001317}
1318
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001319TEST(math_h, nextafterl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001320 ASSERT_DOUBLE_EQ(0.0L, nextafterl(0.0L, 0.0L));
Calin Juravle4d77c112014-03-14 17:56:46 +00001321 // Use a runtime value to accomodate the case when
1322 // sizeof(double) == sizeof(long double)
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001323 long double smallest_positive = ldexpl(1.0L, LDBL_MIN_EXP - LDBL_MANT_DIG);
1324 ASSERT_DOUBLE_EQ(smallest_positive, nextafterl(0.0L, 1.0L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001325 ASSERT_DOUBLE_EQ(-smallest_positive, nextafterl(0.0L, -1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001326}
1327
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001328TEST(math_h, nexttoward) {
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001329 ASSERT_DOUBLE_EQ(0.0, nexttoward(0.0, 0.0L));
1330 ASSERT_DOUBLE_EQ(4.9406564584124654e-324, nexttoward(0.0, 1.0L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001331 ASSERT_DOUBLE_EQ(-4.9406564584124654e-324, nexttoward(0.0, -1.0L));
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001332}
1333
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001334TEST(math_h, nexttowardf) {
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001335 ASSERT_FLOAT_EQ(0.0f, nexttowardf(0.0f, 0.0L));
1336 ASSERT_FLOAT_EQ(1.4012985e-45f, nexttowardf(0.0f, 1.0L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001337 ASSERT_FLOAT_EQ(-1.4012985e-45f, nexttowardf(0.0f, -1.0L));
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001338}
1339
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001340TEST(math_h, nexttowardl) {
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001341 ASSERT_DOUBLE_EQ(0.0L, nexttowardl(0.0L, 0.0L));
1342 // Use a runtime value to accomodate the case when
1343 // sizeof(double) == sizeof(long double)
1344 long double smallest_positive = ldexpl(1.0L, LDBL_MIN_EXP - LDBL_MANT_DIG);
1345 ASSERT_DOUBLE_EQ(smallest_positive, nexttowardl(0.0L, 1.0L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001346 ASSERT_DOUBLE_EQ(-smallest_positive, nexttowardl(0.0L, -1.0L));
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001347}
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001348
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001349TEST(math_h, copysign) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001350 ASSERT_DOUBLE_EQ(0.0, copysign(0.0, 1.0));
1351 ASSERT_DOUBLE_EQ(-0.0, copysign(0.0, -1.0));
1352 ASSERT_DOUBLE_EQ(2.0, copysign(2.0, 1.0));
1353 ASSERT_DOUBLE_EQ(-2.0, copysign(2.0, -1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001354}
1355
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001356TEST(math_h, copysignf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001357 ASSERT_FLOAT_EQ(0.0f, copysignf(0.0f, 1.0f));
1358 ASSERT_FLOAT_EQ(-0.0f, copysignf(0.0f, -1.0f));
1359 ASSERT_FLOAT_EQ(2.0f, copysignf(2.0f, 1.0f));
1360 ASSERT_FLOAT_EQ(-2.0f, copysignf(2.0f, -1.0f));
1361}
1362
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001363TEST(math_h, copysignl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001364 ASSERT_DOUBLE_EQ(0.0L, copysignl(0.0L, 1.0L));
1365 ASSERT_DOUBLE_EQ(-0.0L, copysignl(0.0L, -1.0L));
1366 ASSERT_DOUBLE_EQ(2.0L, copysignl(2.0L, 1.0L));
1367 ASSERT_DOUBLE_EQ(-2.0L, copysignl(2.0L, -1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001368}
1369
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001370TEST(math_h, significand) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001371 ASSERT_DOUBLE_EQ(0.0, significand(0.0));
1372 ASSERT_DOUBLE_EQ(1.2, significand(1.2));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001373 ASSERT_DOUBLE_EQ(1.53125, significand(12.25));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001374}
1375
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001376TEST(math_h, significandf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001377 ASSERT_FLOAT_EQ(0.0f, significandf(0.0f));
1378 ASSERT_FLOAT_EQ(1.2f, significandf(1.2f));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001379 ASSERT_FLOAT_EQ(1.53125f, significandf(12.25f));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001380}
1381
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001382TEST(math_h, significandl) {
Colin Cross4c5595c2021-08-16 15:51:59 -07001383#if !defined(ANDROID_HOST_MUSL)
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001384 ASSERT_DOUBLE_EQ(0.0L, significandl(0.0L));
1385 ASSERT_DOUBLE_EQ(1.2L, significandl(1.2L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001386 ASSERT_DOUBLE_EQ(1.53125L, significandl(12.25L));
Colin Cross7da20342021-07-28 11:18:11 -07001387#else
1388 GTEST_SKIP() << "musl doesn't have significandl";
1389#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001390}
1391
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001392TEST(math_h, scalb) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001393 ASSERT_DOUBLE_EQ(12.0, scalb(3.0, 2.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001394}
1395
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001396TEST(math_h, scalbf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001397 ASSERT_FLOAT_EQ(12.0f, scalbf(3.0f, 2.0f));
1398}
1399
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001400TEST(math_h, scalbln) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001401 ASSERT_DOUBLE_EQ(12.0, scalbln(3.0, 2L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001402}
1403
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001404TEST(math_h, scalblnf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001405 ASSERT_FLOAT_EQ(12.0f, scalblnf(3.0f, 2L));
1406}
1407
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001408TEST(math_h, scalblnl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001409 ASSERT_DOUBLE_EQ(12.0L, scalblnl(3.0L, 2L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001410}
1411
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001412TEST(math_h, scalbn) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001413 ASSERT_DOUBLE_EQ(12.0, scalbn(3.0, 2));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001414}
1415
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001416TEST(math_h, scalbnf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001417 ASSERT_FLOAT_EQ(12.0f, scalbnf(3.0f, 2));
1418}
1419
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001420TEST(math_h, scalbnl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001421 ASSERT_DOUBLE_EQ(12.0L, scalbnl(3.0L, 2));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001422}
1423
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001424TEST(math_h, gamma) {
Colin Cross4c5595c2021-08-16 15:51:59 -07001425#if !defined(ANDROID_HOST_MUSL)
Calin Juravle4d77c112014-03-14 17:56:46 +00001426 ASSERT_DOUBLE_EQ(log(24.0), gamma(5.0));
Colin Cross7da20342021-07-28 11:18:11 -07001427#else
1428 GTEST_SKIP() << "musl doesn't have gamma";
1429#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001430}
1431
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001432TEST(math_h, gammaf) {
Colin Cross4c5595c2021-08-16 15:51:59 -07001433#if !defined(ANDROID_HOST_MUSL)
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001434 ASSERT_FLOAT_EQ(logf(24.0f), gammaf(5.0f));
Colin Cross7da20342021-07-28 11:18:11 -07001435#else
1436 GTEST_SKIP() << "musl doesn't have gammaf";
1437#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001438}
1439
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001440TEST(math_h, gamma_r) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001441#if defined(__BIONIC__)
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001442 int sign;
Calin Juravle4d77c112014-03-14 17:56:46 +00001443 ASSERT_DOUBLE_EQ(log(24.0), gamma_r(5.0, &sign));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001444 ASSERT_EQ(1, sign);
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001445#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -08001446 GTEST_SKIP() << "glibc doesn't have gamma_r";
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001447#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001448}
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001449
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001450TEST(math_h, gammaf_r) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001451#if defined(__BIONIC__)
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001452 int sign;
1453 ASSERT_FLOAT_EQ(logf(24.0f), gammaf_r(5.0f, &sign));
1454 ASSERT_EQ(1, sign);
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001455#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -08001456 GTEST_SKIP() << "glibc doesn't have gammaf_r";
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001457#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001458}
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001459
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001460TEST(math_h, lgamma) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001461 ASSERT_DOUBLE_EQ(log(24.0), lgamma(5.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001462}
1463
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001464TEST(math_h, lgammaf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001465 ASSERT_FLOAT_EQ(logf(24.0f), lgammaf(5.0f));
1466}
1467
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001468TEST(math_h, lgammal) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001469 ASSERT_DOUBLE_EQ(logl(24.0L), lgammal(5.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001470}
1471
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001472TEST(math_h, lgamma_r) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001473 int sign;
Calin Juravle4d77c112014-03-14 17:56:46 +00001474 ASSERT_DOUBLE_EQ(log(24.0), lgamma_r(5.0, &sign));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001475 ASSERT_EQ(1, sign);
1476}
1477
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001478TEST(math_h, lgamma_r_17471883) {
Elliott Hughes75531852014-09-18 11:23:58 -07001479 int sign;
1480
1481 sign = 0;
1482 ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(0.0, &sign));
1483 ASSERT_EQ(1, sign);
1484 sign = 0;
1485 ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(-0.0, &sign));
1486 ASSERT_EQ(-1, sign);
1487}
1488
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001489TEST(math_h, lgammaf_r) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001490 int sign;
1491 ASSERT_FLOAT_EQ(logf(24.0f), lgammaf_r(5.0f, &sign));
1492 ASSERT_EQ(1, sign);
1493}
1494
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001495TEST(math_h, lgammaf_r_17471883) {
Elliott Hughes75531852014-09-18 11:23:58 -07001496 int sign;
1497
1498 sign = 0;
1499 ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(0.0f, &sign));
1500 ASSERT_EQ(1, sign);
1501 sign = 0;
1502 ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(-0.0f, &sign));
1503 ASSERT_EQ(-1, sign);
1504}
1505
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001506TEST(math_h, lgammal_r) {
Elliott Hughes75531852014-09-18 11:23:58 -07001507 int sign;
1508 ASSERT_DOUBLE_EQ(log(24.0L), lgamma_r(5.0L, &sign));
1509 ASSERT_EQ(1, sign);
1510}
1511
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001512TEST(math_h, lgammal_r_17471883) {
Elliott Hughes75531852014-09-18 11:23:58 -07001513 int sign;
1514
1515 sign = 0;
1516 ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(0.0L, &sign));
1517 ASSERT_EQ(1, sign);
1518 sign = 0;
1519 ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(-0.0L, &sign));
1520 ASSERT_EQ(-1, sign);
1521}
1522
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001523TEST(math_h, tgamma_NaN) {
Elliott Hughes88430662021-04-08 20:59:07 -07001524 ASSERT_TRUE(isnan(tgamma(nan(""))));
1525 ASSERT_TRUE(isnanf(tgammaf(nanf(""))));
1526 ASSERT_TRUE(isnanl(tgammal(nanl(""))));
1527}
1528
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001529TEST(math_h, tgamma_inf) {
Elliott Hughes88430662021-04-08 20:59:07 -07001530 ASSERT_TRUE(isinf(tgamma(HUGE_VAL)));
1531 ASSERT_TRUE(isinff(tgammaf(HUGE_VALF)));
1532 ASSERT_TRUE(isinfl(tgammal(HUGE_VALL)));
1533}
1534
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001535TEST(math_h, tgamma_negative) {
Elliott Hughes88430662021-04-08 20:59:07 -07001536 ASSERT_TRUE(isnan(tgamma(-1.0)));
1537 ASSERT_TRUE(isnanf(tgammaf(-1.0f)));
1538 ASSERT_TRUE(isnanl(tgammal(-1.0L)));
1539}
1540
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001541TEST(math_h, tgamma) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001542 ASSERT_DOUBLE_EQ(24.0, tgamma(5.0));
Elliott Hughes88430662021-04-08 20:59:07 -07001543 ASSERT_DOUBLE_EQ(120.0, tgamma(6.0));
1544 ASSERT_TRUE(isinf(tgamma(172.0)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001545}
1546
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001547TEST(math_h, tgammaf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001548 ASSERT_FLOAT_EQ(24.0f, tgammaf(5.0f));
Elliott Hughes88430662021-04-08 20:59:07 -07001549 ASSERT_FLOAT_EQ(120.0f, tgammaf(6.0f));
1550 ASSERT_TRUE(isinff(tgammaf(172.0f)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001551}
1552
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001553TEST(math_h, tgammal) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001554 ASSERT_DOUBLE_EQ(24.0L, tgammal(5.0L));
Elliott Hughes88430662021-04-08 20:59:07 -07001555 ASSERT_DOUBLE_EQ(120.0L, tgammal(6.0L));
1556 ASSERT_TRUE(isinf(tgammal(172.0L)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001557}
1558
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001559TEST(math_h, j0) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001560 ASSERT_DOUBLE_EQ(1.0, j0(0.0));
1561 ASSERT_DOUBLE_EQ(0.76519768655796661, j0(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001562}
1563
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001564TEST(math_h, j0f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001565 ASSERT_FLOAT_EQ(1.0f, j0f(0.0f));
1566 ASSERT_FLOAT_EQ(0.76519769f, j0f(1.0f));
1567}
1568
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001569TEST(math_h, j1) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001570 ASSERT_DOUBLE_EQ(0.0, j1(0.0));
1571 ASSERT_DOUBLE_EQ(0.44005058574493355, j1(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001572}
1573
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001574TEST(math_h, j1f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001575 ASSERT_FLOAT_EQ(0.0f, j1f(0.0f));
1576 ASSERT_FLOAT_EQ(0.44005057f, j1f(1.0f));
1577}
1578
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001579TEST(math_h, jn) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001580 ASSERT_DOUBLE_EQ(0.0, jn(4, 0.0));
1581 ASSERT_DOUBLE_EQ(0.0024766389641099553, jn(4, 1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001582}
1583
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001584TEST(math_h, jnf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001585 ASSERT_FLOAT_EQ(0.0f, jnf(4, 0.0f));
1586 ASSERT_FLOAT_EQ(0.0024766389f, jnf(4, 1.0f));
1587}
1588
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001589TEST(math_h, y0) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001590 ASSERT_DOUBLE_EQ(-HUGE_VAL, y0(0.0));
1591 ASSERT_DOUBLE_EQ(0.08825696421567697, y0(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001592}
1593
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001594TEST(math_h, y0f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001595 ASSERT_FLOAT_EQ(-HUGE_VALF, y0f(0.0f));
1596 ASSERT_FLOAT_EQ(0.088256963f, y0f(1.0f));
1597}
1598
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001599TEST(math_h, y1) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001600 ASSERT_DOUBLE_EQ(-HUGE_VAL, y1(0.0));
1601 ASSERT_DOUBLE_EQ(-0.78121282130028868, y1(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001602}
1603
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001604TEST(math_h, y1f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001605 ASSERT_FLOAT_EQ(-HUGE_VALF, y1f(0.0f));
1606 ASSERT_FLOAT_EQ(-0.78121281f, y1f(1.0f));
1607}
1608
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001609TEST(math_h, yn) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001610 ASSERT_DOUBLE_EQ(-HUGE_VAL, yn(4, 0.0));
1611 ASSERT_DOUBLE_EQ(-33.278423028972114, yn(4, 1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001612}
1613
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001614TEST(math_h, ynf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001615 ASSERT_FLOAT_EQ(-HUGE_VALF, ynf(4, 0.0f));
1616 ASSERT_FLOAT_EQ(-33.278423f, ynf(4, 1.0f));
1617}
1618
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001619TEST(math_h, frexp) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001620 int exp;
1621 double dr = frexp(1024.0, &exp);
Calin Juravle4d77c112014-03-14 17:56:46 +00001622 ASSERT_DOUBLE_EQ(1024.0, scalbn(dr, exp));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001623}
1624
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001625TEST(math_h, frexpf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001626 int exp;
1627 float fr = frexpf(1024.0f, &exp);
1628 ASSERT_FLOAT_EQ(1024.0f, scalbnf(fr, exp));
1629}
1630
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001631TEST(math_h, frexpl) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001632 int exp;
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001633 long double ldr = frexpl(1024.0L, &exp);
1634 ASSERT_DOUBLE_EQ(1024.0L, scalbnl(ldr, exp));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001635}
1636
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001637TEST(math_h, modf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001638 double di;
Calin Juravled8d6fee2014-04-01 16:45:53 +01001639 double df = modf(123.75, &di);
Calin Juravle4d77c112014-03-14 17:56:46 +00001640 ASSERT_DOUBLE_EQ(123.0, di);
Calin Juravled8d6fee2014-04-01 16:45:53 +01001641 ASSERT_DOUBLE_EQ(0.75, df);
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001642}
1643
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001644TEST(math_h, modff) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001645 float fi;
Calin Juravled8d6fee2014-04-01 16:45:53 +01001646 float ff = modff(123.75f, &fi);
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001647 ASSERT_FLOAT_EQ(123.0f, fi);
Calin Juravled8d6fee2014-04-01 16:45:53 +01001648 ASSERT_FLOAT_EQ(0.75f, ff);
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001649}
1650
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001651TEST(math_h, modfl) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001652 long double ldi;
Calin Juravled8d6fee2014-04-01 16:45:53 +01001653 long double ldf = modfl(123.75L, &ldi);
1654 ASSERT_DOUBLE_EQ(123.0L, ldi);
1655 ASSERT_DOUBLE_EQ(0.75L, ldf);
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001656}
1657
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001658TEST(math_h, remquo) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001659 int q;
1660 double d = remquo(13.0, 4.0, &q);
1661 ASSERT_EQ(3, q);
Calin Juravle4d77c112014-03-14 17:56:46 +00001662 ASSERT_DOUBLE_EQ(1.0, d);
Elliott Hughes505ecd62018-07-23 14:25:36 -07001663
1664 // If x or y is a NaN, NaN is returned.
1665 ASSERT_TRUE(isnan(remquo(nan(""), 10.0, &q)));
1666 ASSERT_TRUE(isnan(remquo(12.0, nan(""), &q)));
1667
1668 // If x is an infinity, NaN is returned.
1669 ASSERT_TRUE(isnan(remquo(HUGE_VAL, 10.0, &q)));
1670 ASSERT_TRUE(isnan(remquo(-HUGE_VAL, 10.0, &q)));
1671
1672 // If y is 0, NaN is returned.
1673 ASSERT_TRUE(isnan(remquo(12.0, 0.0, &q)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001674}
1675
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001676TEST(math_h, remquof) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001677 int q;
1678 float f = remquof(13.0f, 4.0f, &q);
1679 ASSERT_EQ(3, q);
1680 ASSERT_FLOAT_EQ(1.0, f);
Elliott Hughes505ecd62018-07-23 14:25:36 -07001681
1682 // If x or y is a NaN, NaN is returned.
1683 ASSERT_TRUE(isnanf(remquof(nanf(""), 10.0f, &q)));
1684 ASSERT_TRUE(isnanf(remquof(12.0f, nanf(""), &q)));
1685
1686 // If x is an infinity, NaN is returned.
1687 ASSERT_TRUE(isnanf(remquof(HUGE_VALF, 10.0f, &q)));
1688 ASSERT_TRUE(isnanf(remquof(-HUGE_VALF, 10.0f, &q)));
1689
1690 // If y is 0, NaN is returned.
1691 ASSERT_TRUE(isnanf(remquof(12.0f, 0.0f, &q)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001692}
1693
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001694TEST(math_h, remquol) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001695 int q;
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001696 long double ld = remquol(13.0L, 4.0L, &q);
1697 ASSERT_DOUBLE_EQ(3L, q);
1698 ASSERT_DOUBLE_EQ(1.0L, ld);
Elliott Hughes505ecd62018-07-23 14:25:36 -07001699
1700 // If x or y is a NaN, NaN is returned.
1701 ASSERT_TRUE(isnanl(remquol(nanl(""), 10.0L, &q)));
1702 ASSERT_TRUE(isnanl(remquol(12.0L, nanl(""), &q)));
1703
1704 // If x is an infinity, NaN is returned.
1705 ASSERT_TRUE(isnanl(remquol(HUGE_VALL, 10.0L, &q)));
1706 ASSERT_TRUE(isnanl(remquol(-HUGE_VALL, 10.0L, &q)));
1707
1708 // If y is 0, NaN is returned.
1709 ASSERT_TRUE(isnanl(remquol(12.0L, 0.0L, &q)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001710}
1711
1712// https://code.google.com/p/android/issues/detail?id=6697
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001713TEST(math_h, frexpf_public_bug_6697) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001714 int exp;
1715 float fr = frexpf(14.1f, &exp);
1716 ASSERT_FLOAT_EQ(14.1f, scalbnf(fr, exp));
1717}
Elliott Hughes18b17e92014-06-06 21:43:33 -07001718
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001719TEST(math_h, exp2_STRICT_ALIGN_OpenBSD_bug) {
Elliott Hughes18b17e92014-06-06 21:43:33 -07001720 // OpenBSD/x86's libm had a bug here, but it was already fixed in FreeBSD:
1721 // http://svnweb.FreeBSD.org/base/head/lib/msun/src/math_private.h?revision=240827&view=markup
1722 ASSERT_DOUBLE_EQ(5.0, exp2(log2(5)));
1723 ASSERT_FLOAT_EQ(5.0f, exp2f(log2f(5)));
1724 ASSERT_DOUBLE_EQ(5.0L, exp2l(log2l(5)));
1725}
1726
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001727TEST(math_h, nextafterl_OpenBSD_bug) {
Elliott Hughes18b17e92014-06-06 21:43:33 -07001728 // OpenBSD/x86's libm had a bug here.
1729 ASSERT_TRUE(nextafter(1.0, 0.0) - 1.0 < 0.0);
1730 ASSERT_TRUE(nextafterf(1.0f, 0.0f) - 1.0f < 0.0f);
1731 ASSERT_TRUE(nextafterl(1.0L, 0.0L) - 1.0L < 0.0L);
1732}
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001733
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001734#include "math_data/acos_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001735TEST(math_h, acos_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001736 DoMathDataTest<1>(g_acos_intel_data, acos);
1737}
1738
1739#include "math_data/acosf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001740TEST(math_h, acosf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001741 DoMathDataTest<1>(g_acosf_intel_data, acosf);
1742}
1743
1744#include "math_data/acosh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001745TEST(math_h, acosh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001746 DoMathDataTest<2>(g_acosh_intel_data, acosh);
1747}
1748
1749#include "math_data/acoshf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001750TEST(math_h, acoshf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001751 DoMathDataTest<2>(g_acoshf_intel_data, acoshf);
1752}
1753
1754#include "math_data/asin_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001755TEST(math_h, asin_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001756 DoMathDataTest<1>(g_asin_intel_data, asin);
1757}
1758
1759#include "math_data/asinf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001760TEST(math_h, asinf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001761 DoMathDataTest<1>(g_asinf_intel_data, asinf);
1762}
1763
1764#include "math_data/asinh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001765TEST(math_h, asinh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001766 DoMathDataTest<2>(g_asinh_intel_data, asinh);
1767}
1768
1769#include "math_data/asinhf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001770TEST(math_h, asinhf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001771 DoMathDataTest<2>(g_asinhf_intel_data, asinhf);
1772}
1773
1774#include "math_data/atan2_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001775TEST(math_h, atan2_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001776 DoMathDataTest<2>(g_atan2_intel_data, atan2);
1777}
1778
1779#include "math_data/atan2f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001780TEST(math_h, atan2f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001781 DoMathDataTest<2>(g_atan2f_intel_data, atan2f);
1782}
1783
1784#include "math_data/atan_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001785TEST(math_h, atan_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001786 DoMathDataTest<1>(g_atan_intel_data, atan);
1787}
1788
1789#include "math_data/atanf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001790TEST(math_h, atanf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001791 DoMathDataTest<1>(g_atanf_intel_data, atanf);
1792}
1793
1794#include "math_data/atanh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001795TEST(math_h, atanh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001796 DoMathDataTest<2>(g_atanh_intel_data, atanh);
1797}
1798
1799#include "math_data/atanhf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001800TEST(math_h, atanhf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001801 DoMathDataTest<2>(g_atanhf_intel_data, atanhf);
1802}
1803
1804#include "math_data/cbrt_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001805TEST(math_h, cbrt_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001806 DoMathDataTest<1>(g_cbrt_intel_data, cbrt);
1807}
1808
1809#include "math_data/cbrtf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001810TEST(math_h, cbrtf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001811 DoMathDataTest<1>(g_cbrtf_intel_data, cbrtf);
1812}
1813
1814#include "math_data/ceil_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001815TEST(math_h, ceil_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001816 DoMathDataTest<1>(g_ceil_intel_data, ceil);
1817}
1818
1819#include "math_data/ceilf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001820TEST(math_h, ceilf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001821 DoMathDataTest<1>(g_ceilf_intel_data, ceilf);
1822}
1823
1824#include "math_data/copysign_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001825TEST(math_h, copysign_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001826 DoMathDataTest<1>(g_copysign_intel_data, copysign);
1827}
1828
1829#include "math_data/copysignf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001830TEST(math_h, copysignf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001831 DoMathDataTest<1>(g_copysignf_intel_data, copysignf);
1832}
1833
1834#include "math_data/cos_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001835TEST(math_h, cos_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001836 DoMathDataTest<1>(g_cos_intel_data, cos);
1837}
1838
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001839#include "math_data/cosf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001840TEST(math_h, cosf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001841 DoMathDataTest<1>(g_cosf_intel_data, cosf);
1842}
1843
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001844#include "math_data/cosh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001845TEST(math_h, cosh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001846 DoMathDataTest<2>(g_cosh_intel_data, cosh);
1847}
1848
1849#include "math_data/coshf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001850TEST(math_h, coshf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001851 DoMathDataTest<2>(g_coshf_intel_data, coshf);
1852}
1853
1854#include "math_data/exp_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001855TEST(math_h, exp_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001856 DoMathDataTest<1>(g_exp_intel_data, exp);
1857}
1858
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001859#include "math_data/expf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001860TEST(math_h, expf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001861 DoMathDataTest<1>(g_expf_intel_data, expf);
1862}
1863
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001864#include "math_data/exp2_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001865TEST(math_h, exp2_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001866 DoMathDataTest<1>(g_exp2_intel_data, exp2);
1867}
1868
1869#include "math_data/exp2f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001870TEST(math_h, exp2f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001871 DoMathDataTest<1>(g_exp2f_intel_data, exp2f);
1872}
1873
1874#include "math_data/expm1_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001875TEST(math_h, expm1_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001876 DoMathDataTest<1>(g_expm1_intel_data, expm1);
1877}
1878
1879#include "math_data/expm1f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001880TEST(math_h, expm1f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001881 DoMathDataTest<1>(g_expm1f_intel_data, expm1f);
1882}
1883
1884#include "math_data/fabs_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001885TEST(math_h, fabs_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001886 DoMathDataTest<1>(g_fabs_intel_data, fabs);
1887}
1888
1889#include "math_data/fabsf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001890TEST(math_h, fabsf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001891 DoMathDataTest<1>(g_fabsf_intel_data, fabsf);
1892}
1893
1894#include "math_data/fdim_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001895TEST(math_h, fdim_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001896 DoMathDataTest<1>(g_fdim_intel_data, fdim);
1897}
1898
1899#include "math_data/fdimf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001900TEST(math_h, fdimf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001901 DoMathDataTest<1>(g_fdimf_intel_data, fdimf);
1902}
1903
1904#include "math_data/floor_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001905TEST(math_h, floor_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001906 DoMathDataTest<1>(g_floor_intel_data, floor);
1907}
1908
1909#include "math_data/floorf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001910TEST(math_h, floorf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001911 DoMathDataTest<1>(g_floorf_intel_data, floorf);
1912}
1913
1914#include "math_data/fma_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001915TEST(math_h, fma_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001916 DoMathDataTest<1>(g_fma_intel_data, fma);
1917}
1918
1919#include "math_data/fmaf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001920TEST(math_h, fmaf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001921 DoMathDataTest<1>(g_fmaf_intel_data, fmaf);
1922}
1923
1924#include "math_data/fmax_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001925TEST(math_h, fmax_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001926 DoMathDataTest<1>(g_fmax_intel_data, fmax);
1927}
1928
1929#include "math_data/fmaxf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001930TEST(math_h, fmaxf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001931 DoMathDataTest<1>(g_fmaxf_intel_data, fmaxf);
1932}
1933
1934#include "math_data/fmin_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001935TEST(math_h, fmin_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001936 DoMathDataTest<1>(g_fmin_intel_data, fmin);
1937}
1938
1939#include "math_data/fminf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001940TEST(math_h, fminf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001941 DoMathDataTest<1>(g_fminf_intel_data, fminf);
1942}
1943
1944#include "math_data/fmod_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001945TEST(math_h, fmod_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001946 DoMathDataTest<1>(g_fmod_intel_data, fmod);
1947}
1948
1949#include "math_data/fmodf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001950TEST(math_h, fmodf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001951 DoMathDataTest<1>(g_fmodf_intel_data, fmodf);
1952}
1953
1954#include "math_data/frexp_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001955TEST(math_h, frexp_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001956 DoMathDataTest<1>(g_frexp_intel_data, frexp);
1957}
1958
1959#include "math_data/frexpf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001960TEST(math_h, frexpf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001961 DoMathDataTest<1>(g_frexpf_intel_data, frexpf);
1962}
1963
1964#include "math_data/hypot_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001965TEST(math_h, hypot_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001966 DoMathDataTest<1>(g_hypot_intel_data, hypot);
1967}
1968
1969#include "math_data/hypotf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001970TEST(math_h, hypotf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001971 DoMathDataTest<1>(g_hypotf_intel_data, hypotf);
1972}
1973
1974#include "math_data/ilogb_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001975TEST(math_h, ilogb_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001976 DoMathDataTest<1>(g_ilogb_intel_data, ilogb);
1977}
1978
1979#include "math_data/ilogbf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001980TEST(math_h, ilogbf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001981 DoMathDataTest<1>(g_ilogbf_intel_data, ilogbf);
1982}
1983
1984#include "math_data/ldexp_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001985TEST(math_h, ldexp_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001986 DoMathDataTest<1>(g_ldexp_intel_data, ldexp);
1987}
1988
1989#include "math_data/ldexpf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001990TEST(math_h, ldexpf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001991 DoMathDataTest<1>(g_ldexpf_intel_data, ldexpf);
1992}
1993
jzha136f3ea0932015-06-12 09:15:02 -07001994#include "math_data/llrint_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001995TEST(math_h, llrint_intel) {
jzha136f3ea0932015-06-12 09:15:02 -07001996 DoMathDataTest<1>(g_llrint_intel_data, llrint);
1997}
1998
1999#include "math_data/llrintf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002000TEST(math_h, llrintf_intel) {
jzha136f3ea0932015-06-12 09:15:02 -07002001 DoMathDataTest<1>(g_llrintf_intel_data, llrintf);
2002}
2003
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002004#include "math_data/log_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002005TEST(math_h, log_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002006 DoMathDataTest<1>(g_log_intel_data, log);
2007}
2008
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002009#include "math_data/logf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002010TEST(math_h, logf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002011 DoMathDataTest<1>(g_logf_intel_data, logf);
2012}
2013
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002014#include "math_data/log10_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002015TEST(math_h, log10_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002016 DoMathDataTest<1>(g_log10_intel_data, log10);
2017}
2018
2019#include "math_data/log10f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002020TEST(math_h, log10f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002021 DoMathDataTest<1>(g_log10f_intel_data, log10f);
2022}
2023
2024#include "math_data/log1p_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002025TEST(math_h, log1p_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002026 DoMathDataTest<1>(g_log1p_intel_data, log1p);
2027}
2028
2029#include "math_data/log1pf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002030TEST(math_h, log1pf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002031 DoMathDataTest<1>(g_log1pf_intel_data, log1pf);
2032}
2033
2034#include "math_data/log2_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002035TEST(math_h, log2_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002036 DoMathDataTest<1>(g_log2_intel_data, log2);
2037}
2038
2039#include "math_data/log2f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002040TEST(math_h, log2f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002041 DoMathDataTest<1>(g_log2f_intel_data, log2f);
2042}
2043
2044#include "math_data/logb_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002045TEST(math_h, logb_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002046 DoMathDataTest<1>(g_logb_intel_data, logb);
2047}
2048
2049#include "math_data/logbf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002050TEST(math_h, logbf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002051 DoMathDataTest<1>(g_logbf_intel_data, logbf);
2052}
2053
jzha136f3ea0932015-06-12 09:15:02 -07002054#include "math_data/lrint_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002055TEST(math_h, lrint_intel) {
jzha136f3ea0932015-06-12 09:15:02 -07002056 DoMathDataTest<1>(g_lrint_intel_data, lrint);
2057}
2058
2059#include "math_data/lrintf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002060TEST(math_h, lrintf_intel) {
jzha136f3ea0932015-06-12 09:15:02 -07002061 DoMathDataTest<1>(g_lrintf_intel_data, lrintf);
2062}
2063
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002064#include "math_data/modf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002065TEST(math_h, modf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002066 DoMathDataTest<1>(g_modf_intel_data, modf);
2067}
2068
2069#include "math_data/modff_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002070TEST(math_h, modff_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002071 DoMathDataTest<1>(g_modff_intel_data, modff);
2072}
2073
2074#include "math_data/nearbyint_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002075TEST(math_h, nearbyint_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002076 DoMathDataTest<1>(g_nearbyint_intel_data, nearbyint);
2077}
2078
2079#include "math_data/nearbyintf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002080TEST(math_h, nearbyintf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002081 DoMathDataTest<1>(g_nearbyintf_intel_data, nearbyintf);
2082}
2083
2084#include "math_data/nextafter_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002085TEST(math_h, nextafter_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002086 DoMathDataTest<1>(g_nextafter_intel_data, nextafter);
2087}
2088
2089#include "math_data/nextafterf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002090TEST(math_h, nextafterf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002091 DoMathDataTest<1>(g_nextafterf_intel_data, nextafterf);
2092}
2093
2094#include "math_data/pow_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002095TEST(math_h, pow_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002096 DoMathDataTest<1>(g_pow_intel_data, pow);
2097}
2098
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002099#include "math_data/powf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002100TEST(math_h, powf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002101 DoMathDataTest<1>(g_powf_intel_data, powf);
2102}
2103
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002104#include "math_data/remainder_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002105TEST(math_h, remainder_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002106 DoMathDataTest<1>(g_remainder_intel_data, remainder);
2107}
2108
2109#include "math_data/remainderf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002110TEST(math_h, remainderf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002111 DoMathDataTest<1>(g_remainderf_intel_data, remainderf);
2112}
2113
2114#include "math_data/remquo_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002115TEST(math_h, remquo_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002116 DoMathDataTest<1>(g_remquo_intel_data, remquo);
2117}
2118
2119#include "math_data/remquof_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002120TEST(math_h, remquof_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002121 DoMathDataTest<1>(g_remquof_intel_data, remquof);
2122}
2123
2124#include "math_data/rint_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002125TEST(math_h, rint_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002126 DoMathDataTest<1>(g_rint_intel_data, rint);
2127}
2128
2129#include "math_data/rintf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002130TEST(math_h, rintf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002131 DoMathDataTest<1>(g_rintf_intel_data, rintf);
2132}
2133
2134#include "math_data/round_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002135TEST(math_h, round_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002136 DoMathDataTest<1>(g_round_intel_data, round);
2137}
2138
2139#include "math_data/roundf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002140TEST(math_h, roundf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002141 DoMathDataTest<1>(g_roundf_intel_data, roundf);
2142}
2143
2144#include "math_data/scalb_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002145TEST(math_h, scalb_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002146 DoMathDataTest<1>(g_scalb_intel_data, scalb);
2147}
2148
2149#include "math_data/scalbf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002150TEST(math_h, scalbf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002151 DoMathDataTest<1>(g_scalbf_intel_data, scalbf);
2152}
2153
2154#include "math_data/scalbn_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002155TEST(math_h, scalbn_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002156 DoMathDataTest<1>(g_scalbn_intel_data, scalbn);
2157}
2158
2159#include "math_data/scalbnf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002160TEST(math_h, scalbnf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002161 DoMathDataTest<1>(g_scalbnf_intel_data, scalbnf);
2162}
2163
2164#include "math_data/significand_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002165TEST(math_h, significand_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002166 DoMathDataTest<1>(g_significand_intel_data, significand);
2167}
2168
2169#include "math_data/significandf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002170TEST(math_h, significandf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002171 DoMathDataTest<1>(g_significandf_intel_data, significandf);
2172}
2173
2174#include "math_data/sin_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002175TEST(math_h, sin_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002176 DoMathDataTest<1>(g_sin_intel_data, sin);
2177}
2178
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002179#include "math_data/sinf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002180TEST(math_h, sinf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002181 DoMathDataTest<1>(g_sinf_intel_data, sinf);
2182}
2183
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002184#include "math_data/sinh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002185TEST(math_h, sinh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002186 DoMathDataTest<2>(g_sinh_intel_data, sinh);
2187}
2188
2189#include "math_data/sinhf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002190TEST(math_h, sinhf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002191 DoMathDataTest<2>(g_sinhf_intel_data, sinhf);
2192}
2193
2194#include "math_data/sincos_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002195TEST(math_h, sincos_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002196 DoMathDataTest<1>(g_sincos_intel_data, sincos);
2197}
2198
2199#include "math_data/sincosf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002200TEST(math_h, sincosf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002201 DoMathDataTest<1>(g_sincosf_intel_data, sincosf);
2202}
2203
2204#include "math_data/sqrt_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002205TEST(math_h, sqrt_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002206 DoMathDataTest<1>(g_sqrt_intel_data, sqrt);
2207}
2208
2209#include "math_data/sqrtf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002210TEST(math_h, sqrtf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002211 DoMathDataTest<1>(g_sqrtf_intel_data, sqrtf);
2212}
2213
2214#include "math_data/tan_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002215TEST(math_h, tan_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002216 DoMathDataTest<1>(g_tan_intel_data, tan);
2217}
2218
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002219#include "math_data/tanf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002220TEST(math_h, tanf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002221 DoMathDataTest<1>(g_tanf_intel_data, tanf);
2222}
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002223
2224#include "math_data/tanh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002225TEST(math_h, tanh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002226 DoMathDataTest<2>(g_tanh_intel_data, tanh);
2227}
2228
2229#include "math_data/tanhf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002230TEST(math_h, tanhf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002231 DoMathDataTest<2>(g_tanhf_intel_data, tanhf);
2232}
2233
2234#include "math_data/trunc_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002235TEST(math_h, trunc_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002236 DoMathDataTest<1>(g_trunc_intel_data, trunc);
2237}
2238
2239#include "math_data/truncf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002240TEST(math_h, truncf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002241 DoMathDataTest<1>(g_truncf_intel_data, truncf);
2242}