blob: 7ca0e7526187a1e6ad4907acc1cd1dba859bf187 [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);
312extern "C" int __isinfl(long double);
313
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000314TEST(math_h, __isinf) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700315#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700316#define __isinf isinf
317#endif
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700318 ASSERT_FALSE(__isinf(123.0));
319 ASSERT_TRUE(__isinf(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700320 ASSERT_TRUE(__isinf(-HUGE_VAL));
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700321}
322
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000323TEST(math_h, __isinff) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700324#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700325#define __isinff isinf
326#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800327 ASSERT_FALSE(__isinff(123.0f));
328 ASSERT_TRUE(__isinff(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700329 ASSERT_TRUE(__isinff(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800330}
331
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000332TEST(math_h, isinff) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700333#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700334#define isinff isinf
335#endif
Elliott Hughesef40d252017-12-20 23:01:26 -0800336 ASSERT_FALSE(isinff(123.0f));
337 ASSERT_TRUE(isinff(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700338 ASSERT_TRUE(isinff(-HUGE_VALF));
Elliott Hughesef40d252017-12-20 23:01:26 -0800339}
340
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000341TEST(math_h, __isinfl) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700342#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700343#define __isinfl isinf
344#endif
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100345 ASSERT_FALSE(__isinfl(123.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800346 ASSERT_TRUE(__isinfl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700347 ASSERT_TRUE(__isinfl(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800348}
349
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000350TEST(math_h, isinfl) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700351#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700352#define isinfl isinf
353#endif
Elliott Hughesef40d252017-12-20 23:01:26 -0800354 ASSERT_FALSE(isinfl(123.0L));
355 ASSERT_TRUE(isinfl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700356 ASSERT_TRUE(isinfl(-HUGE_VALL));
Elliott Hughesef40d252017-12-20 23:01:26 -0800357}
358
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000359TEST(math_h, isnan_function) {
Elliott Hughes02c78a32014-04-11 17:02:20 -0700360 // The isnan macro deals with all three types; the isnan function is for doubles.
361 ASSERT_FALSE((isnan)(123.0));
362 ASSERT_TRUE((isnan)(nan("")));
363}
364
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700365// Historical BSD cruft that isn't exposed in <math.h> any more.
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700366extern "C" int __isnan(double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700367extern "C" int __isnanf(float);
368extern "C" int __isnanl(long double);
369
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000370TEST(math_h, __isnan) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700371#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700372#define __isnan isnan
373#endif
Elliott Hughes9ecd2cc2017-11-01 22:17:26 -0700374 ASSERT_FALSE(__isnan(123.0));
375 ASSERT_TRUE(__isnan(nan("")));
376}
377
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000378TEST(math_h, __isnanf) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700379#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700380#define __isnanf isnan
381#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800382 ASSERT_FALSE(__isnanf(123.0f));
383 ASSERT_TRUE(__isnanf(nanf("")));
384}
385
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000386TEST(math_h, isnanf) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700387#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700388#define isnanf isnan
389#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800390 ASSERT_FALSE(isnanf(123.0f));
391 ASSERT_TRUE(isnanf(nanf("")));
392}
393
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000394TEST(math_h, __isnanl) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700395#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700396#define __isnanl isnan
397#endif
Elliott Hughesef40d252017-12-20 23:01:26 -0800398 ASSERT_FALSE(__isnanl(123.0L));
399 ASSERT_TRUE(__isnanl(nanl("")));
400}
401
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000402TEST(math_h, isnanl) {
Colin Cross4c5595c2021-08-16 15:51:59 -0700403#if defined(ANDROID_HOST_MUSL)
Colin Cross7da20342021-07-28 11:18:11 -0700404#define isnanl isnan
405#endif
Elliott Hughesef40d252017-12-20 23:01:26 -0800406 ASSERT_FALSE(isnanl(123.0L));
407 ASSERT_TRUE(isnanl(nanl("")));
408}
409
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700410// Historical BSD cruft that isn't exposed in <math.h> any more.
411extern "C" int __isnormal(double);
412extern "C" int __isnormalf(float);
Elliott Hughesef40d252017-12-20 23:01:26 -0800413extern "C" int isnormalf(float);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700414extern "C" int __isnormall(long double);
Elliott Hughesef40d252017-12-20 23:01:26 -0800415extern "C" int isnormall(long double);
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700416
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000417TEST(math_h, __isnormal) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800418#if defined(__BIONIC__)
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800419 ASSERT_TRUE(__isnormal(123.0));
420 ASSERT_FALSE(__isnormal(double_subnormal()));
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800421#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800422 GTEST_SKIP() << "glibc doesn't have __isnormal";
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800423#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800424}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800425
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000426TEST(math_h, __isnormalf) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800427#if defined(__BIONIC__)
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800428 ASSERT_TRUE(__isnormalf(123.0f));
429 ASSERT_FALSE(__isnormalf(float_subnormal()));
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800430#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800431 GTEST_SKIP() << "glibc doesn't have __isnormalf";
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800432#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800433}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800434
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000435TEST(math_h, isnormalf) {
Elliott Hughesef40d252017-12-20 23:01:26 -0800436#if defined(__BIONIC__)
437 ASSERT_TRUE(isnormalf(123.0f));
438 ASSERT_FALSE(isnormalf(float_subnormal()));
439#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800440 GTEST_SKIP() << "glibc doesn't have isnormalf";
Elliott Hughesef40d252017-12-20 23:01:26 -0800441#endif // __BIONIC__
442}
443
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000444TEST(math_h, __isnormall) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800445#if defined(__BIONIC__)
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100446 ASSERT_TRUE(__isnormall(123.0L));
Calin Juravle4d77c112014-03-14 17:56:46 +0000447 ASSERT_FALSE(__isnormall(ldouble_subnormal()));
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800448#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800449 GTEST_SKIP() << "glibc doesn't have __isnormall";
Christopher Ferrisf04935c2013-12-20 18:43:21 -0800450#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800451}
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800452
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000453TEST(math_h, isnormall) {
Elliott Hughesef40d252017-12-20 23:01:26 -0800454#if defined(__BIONIC__)
455 ASSERT_TRUE(isnormall(123.0L));
456 ASSERT_FALSE(isnormall(ldouble_subnormal()));
457#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -0800458 GTEST_SKIP() << "glibc doesn't have isnormall";
Elliott Hughesef40d252017-12-20 23:01:26 -0800459#endif // __BIONIC__
460}
461
Elliott Hughes5c6a7bf2017-10-19 13:56:28 -0700462// Historical BSD cruft that isn't exposed in <math.h> any more.
463extern "C" int __signbit(double);
464extern "C" int __signbitf(float);
465extern "C" int __signbitl(long double);
466
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000467TEST(math_h, __signbit) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800468 ASSERT_EQ(0, __signbit(0.0));
469 ASSERT_EQ(0, __signbit(1.0));
470 ASSERT_NE(0, __signbit(-1.0));
471}
472
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000473TEST(math_h, __signbitf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800474 ASSERT_EQ(0, __signbitf(0.0f));
475 ASSERT_EQ(0, __signbitf(1.0f));
476 ASSERT_NE(0, __signbitf(-1.0f));
477}
478
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000479TEST(math_h, __signbitl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100480 ASSERT_EQ(0L, __signbitl(0.0L));
481 ASSERT_EQ(0L, __signbitl(1.0L));
482 ASSERT_NE(0L, __signbitl(-1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800483}
484
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000485TEST(math_h, acos) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000486 ASSERT_DOUBLE_EQ(M_PI/2.0, acos(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800487}
488
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000489TEST(math_h, acosf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800490 ASSERT_FLOAT_EQ(static_cast<float>(M_PI)/2.0f, acosf(0.0f));
491}
492
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000493TEST(math_h, acosl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100494 ASSERT_DOUBLE_EQ(M_PI/2.0L, acosl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800495}
496
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000497TEST(math_h, asin) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000498 ASSERT_DOUBLE_EQ(0.0, asin(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800499}
500
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000501TEST(math_h, asinf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800502 ASSERT_FLOAT_EQ(0.0f, asinf(0.0f));
503}
504
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000505TEST(math_h, asinl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100506 ASSERT_DOUBLE_EQ(0.0L, asinl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800507}
508
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000509TEST(math_h, atan) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000510 ASSERT_DOUBLE_EQ(0.0, atan(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800511}
512
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000513TEST(math_h, atanf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800514 ASSERT_FLOAT_EQ(0.0f, atanf(0.0f));
515}
516
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000517TEST(math_h, atanl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100518 ASSERT_DOUBLE_EQ(0.0L, atanl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800519}
520
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000521TEST(math_h, atan2) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000522 ASSERT_DOUBLE_EQ(0.0, atan2(0.0, 0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800523}
524
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000525TEST(math_h, atan2f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800526 ASSERT_FLOAT_EQ(0.0f, atan2f(0.0f, 0.0f));
527}
528
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000529TEST(math_h, atan2l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100530 ASSERT_DOUBLE_EQ(0.0L, atan2l(0.0L, 0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800531}
532
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000533TEST(math_h, cos) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000534 ASSERT_DOUBLE_EQ(1.0, cos(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800535}
536
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000537TEST(math_h, cosf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800538 ASSERT_FLOAT_EQ(1.0f, cosf(0.0f));
539}
540
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000541TEST(math_h, cosl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100542 ASSERT_DOUBLE_EQ(1.0L, cosl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800543}
544
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000545TEST(math_h, sin) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100546 ASSERT_DOUBLE_EQ(0.0, sin(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800547}
548
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000549TEST(math_h, sinf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800550 ASSERT_FLOAT_EQ(0.0f, sinf(0.0f));
551}
552
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000553TEST(math_h, sinl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100554 ASSERT_DOUBLE_EQ(0.0L, sinl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800555}
556
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000557TEST(math_h, sincos) {
Elliott Hughese9719f32016-09-26 09:35:04 -0700558 double s, c;
559 sincos(0.0, &s, &c);
560 ASSERT_DOUBLE_EQ(0.0, s);
561 ASSERT_DOUBLE_EQ(1.0, c);
562}
563
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000564TEST(math_h, sincosf) {
Elliott Hughese9719f32016-09-26 09:35:04 -0700565 float s, c;
566 sincosf(0.0f, &s, &c);
567 ASSERT_FLOAT_EQ(0.0f, s);
568 ASSERT_FLOAT_EQ(1.0f, c);
569}
570
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000571TEST(math_h, sincosl) {
Elliott Hughese9719f32016-09-26 09:35:04 -0700572 long double s, c;
573 sincosl(0.0L, &s, &c);
574 ASSERT_DOUBLE_EQ(0.0L, s);
575 ASSERT_DOUBLE_EQ(1.0L, c);
576}
577
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000578TEST(math_h, tan) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000579 ASSERT_DOUBLE_EQ(0.0, tan(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800580}
581
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000582TEST(math_h, tanf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800583 ASSERT_FLOAT_EQ(0.0f, tanf(0.0f));
584}
585
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000586TEST(math_h, tanl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100587 ASSERT_DOUBLE_EQ(0.0L, tanl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800588}
589
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000590TEST(math_h, acosh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000591 ASSERT_DOUBLE_EQ(0.0, acosh(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800592}
593
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000594TEST(math_h, acoshf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800595 ASSERT_FLOAT_EQ(0.0f, acoshf(1.0f));
596}
597
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000598TEST(math_h, acoshl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100599 ASSERT_DOUBLE_EQ(0.0L, acoshl(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800600}
601
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000602TEST(math_h, asinh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000603 ASSERT_DOUBLE_EQ(0.0, asinh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800604}
605
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000606TEST(math_h, asinhf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800607 ASSERT_FLOAT_EQ(0.0f, asinhf(0.0f));
608}
609
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000610TEST(math_h, asinhl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100611 ASSERT_DOUBLE_EQ(0.0L, asinhl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800612}
613
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000614TEST(math_h, atanh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000615 ASSERT_DOUBLE_EQ(0.0, atanh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800616}
617
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000618TEST(math_h, atanhf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800619 ASSERT_FLOAT_EQ(0.0f, atanhf(0.0f));
620}
621
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000622TEST(math_h, atanhl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100623 ASSERT_DOUBLE_EQ(0.0L, atanhl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800624}
625
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000626TEST(math_h, cosh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000627 ASSERT_DOUBLE_EQ(1.0, cosh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800628}
629
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000630TEST(math_h, coshf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800631 ASSERT_FLOAT_EQ(1.0f, coshf(0.0f));
632}
633
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000634TEST(math_h, coshl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100635 ASSERT_DOUBLE_EQ(1.0L, coshl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800636}
637
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000638TEST(math_h, sinh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000639 ASSERT_DOUBLE_EQ(0.0, sinh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800640}
641
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000642TEST(math_h, sinhf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800643 ASSERT_FLOAT_EQ(0.0f, sinhf(0.0f));
644}
645
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000646TEST(math_h, sinhl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100647 ASSERT_DOUBLE_EQ(0.0L, sinhl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800648}
649
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000650TEST(math_h, tanh) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000651 ASSERT_DOUBLE_EQ(0.0, tanh(0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800652}
653
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000654TEST(math_h, tanhf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800655 ASSERT_FLOAT_EQ(0.0f, tanhf(0.0f));
656}
657
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000658TEST(math_h, tanhl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100659 ASSERT_DOUBLE_EQ(0.0L, tanhl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800660}
661
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000662TEST(math_h, log) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000663 ASSERT_DOUBLE_EQ(1.0, log(M_E));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800664}
665
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000666TEST(math_h, logf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800667 ASSERT_FLOAT_EQ(1.0f, logf(static_cast<float>(M_E)));
668}
669
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000670TEST(math_h, logl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100671 ASSERT_DOUBLE_EQ(1.0L, logl(M_E));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800672}
673
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000674TEST(math_h, log2) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000675 ASSERT_DOUBLE_EQ(12.0, log2(4096.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800676}
677
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000678TEST(math_h, log2f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800679 ASSERT_FLOAT_EQ(12.0f, log2f(4096.0f));
680}
681
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000682TEST(math_h, log2l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100683 ASSERT_DOUBLE_EQ(12.0L, log2l(4096.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800684}
685
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000686TEST(math_h, log10) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000687 ASSERT_DOUBLE_EQ(3.0, log10(1000.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800688}
689
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000690TEST(math_h, log10f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800691 ASSERT_FLOAT_EQ(3.0f, log10f(1000.0f));
692}
693
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000694TEST(math_h, log10l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100695 ASSERT_DOUBLE_EQ(3.0L, log10l(1000.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800696}
697
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000698TEST(math_h, cbrt) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000699 ASSERT_DOUBLE_EQ(3.0, cbrt(27.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800700}
701
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000702TEST(math_h, cbrtf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800703 ASSERT_FLOAT_EQ(3.0f, cbrtf(27.0f));
704}
705
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000706TEST(math_h, cbrtl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100707 ASSERT_DOUBLE_EQ(3.0L, cbrtl(27.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800708}
709
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000710TEST(math_h, sqrt) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000711 ASSERT_DOUBLE_EQ(2.0, sqrt(4.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800712}
713
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000714TEST(math_h, sqrtf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800715 ASSERT_FLOAT_EQ(2.0f, sqrtf(4.0f));
716}
717
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000718TEST(math_h, sqrtl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100719 ASSERT_DOUBLE_EQ(2.0L, sqrtl(4.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800720}
721
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000722TEST(math_h, exp) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000723 ASSERT_DOUBLE_EQ(1.0, exp(0.0));
724 ASSERT_DOUBLE_EQ(M_E, exp(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800725}
726
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000727TEST(math_h, expf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800728 ASSERT_FLOAT_EQ(1.0f, expf(0.0f));
729 ASSERT_FLOAT_EQ(static_cast<float>(M_E), expf(1.0f));
730}
731
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000732TEST(math_h, expl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100733 ASSERT_DOUBLE_EQ(1.0L, expl(0.0L));
734 ASSERT_DOUBLE_EQ(M_E, expl(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800735}
736
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000737TEST(math_h, exp2) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000738 ASSERT_DOUBLE_EQ(8.0, exp2(3.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800739}
740
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000741TEST(math_h, exp2f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800742 ASSERT_FLOAT_EQ(8.0f, exp2f(3.0f));
743}
744
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000745TEST(math_h, exp2l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100746 ASSERT_DOUBLE_EQ(8.0L, exp2l(3.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800747}
748
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000749TEST(math_h, expm1) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000750 ASSERT_DOUBLE_EQ(M_E - 1.0, expm1(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800751}
752
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000753TEST(math_h, expm1f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800754 ASSERT_FLOAT_EQ(static_cast<float>(M_E) - 1.0f, expm1f(1.0f));
755}
756
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000757TEST(math_h, expm1l) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100758 ASSERT_DOUBLE_EQ(M_E - 1.0L, expm1l(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800759}
760
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000761TEST(math_h, pow) {
Elliott Hughes6a8f00d2013-11-13 13:29:23 -0800762 ASSERT_TRUE(isnan(pow(nan(""), 3.0)));
Calin Juravle4d77c112014-03-14 17:56:46 +0000763 ASSERT_DOUBLE_EQ(1.0, (pow(1.0, nan(""))));
Elliott Hughes6a8f00d2013-11-13 13:29:23 -0800764 ASSERT_TRUE(isnan(pow(2.0, nan(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +0000765 ASSERT_DOUBLE_EQ(8.0, pow(2.0, 3.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800766}
767
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000768TEST(math_h, powf) {
Elliott Hughes6a8f00d2013-11-13 13:29:23 -0800769 ASSERT_TRUE(isnanf(powf(nanf(""), 3.0f)));
Narayan Kamathaf64dad2013-11-18 18:47:48 +0000770 ASSERT_FLOAT_EQ(1.0f, (powf(1.0f, nanf(""))));
Elliott Hughes6a8f00d2013-11-13 13:29:23 -0800771 ASSERT_TRUE(isnanf(powf(2.0f, nanf(""))));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800772 ASSERT_FLOAT_EQ(8.0f, powf(2.0f, 3.0f));
773}
774
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000775TEST(math_h, powl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100776 ASSERT_TRUE(__isnanl(powl(nanl(""), 3.0L)));
777 ASSERT_DOUBLE_EQ(1.0L, (powl(1.0L, nanl(""))));
778 ASSERT_TRUE(__isnanl(powl(2.0L, nanl(""))));
779 ASSERT_DOUBLE_EQ(8.0L, powl(2.0L, 3.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800780}
781
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000782TEST(math_h, ceil) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000783 ASSERT_DOUBLE_EQ(1.0, ceil(0.9));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800784}
785
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000786TEST(math_h, ceilf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800787 ASSERT_FLOAT_EQ(1.0f, ceilf(0.9f));
788}
789
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000790TEST(math_h, ceill) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100791 ASSERT_DOUBLE_EQ(1.0L, ceill(0.9L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800792}
793
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000794TEST(math_h, floor) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000795 ASSERT_DOUBLE_EQ(1.0, floor(1.1));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800796}
797
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000798TEST(math_h, floorf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800799 ASSERT_FLOAT_EQ(1.0f, floorf(1.1f));
800}
801
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000802TEST(math_h, floorl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100803 ASSERT_DOUBLE_EQ(1.0L, floorl(1.1L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800804}
805
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000806TEST(math_h, fabs) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000807 ASSERT_DOUBLE_EQ(1.0, fabs(-1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800808}
809
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000810TEST(math_h, fabsf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800811 ASSERT_FLOAT_EQ(1.0f, fabsf(-1.0f));
812}
813
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000814TEST(math_h, fabsl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100815 ASSERT_DOUBLE_EQ(1.0L, fabsl(-1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800816}
817
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000818TEST(math_h, ldexp) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000819 ASSERT_DOUBLE_EQ(16.0, ldexp(2.0, 3.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800820}
821
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000822TEST(math_h, ldexpf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800823 ASSERT_FLOAT_EQ(16.0f, ldexpf(2.0f, 3.0f));
824}
825
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000826TEST(math_h, ldexpl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100827 ASSERT_DOUBLE_EQ(16.0L, ldexpl(2.0L, 3.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800828}
829
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000830TEST(math_h, fmod) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000831 ASSERT_DOUBLE_EQ(2.0, fmod(12.0, 10.0));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700832
833 // If x is an infinity, NaN is returned.
834 ASSERT_TRUE(isnan(fmod(HUGE_VAL, 10.0f)));
835 ASSERT_TRUE(isnan(fmod(-HUGE_VAL, 10.0f)));
836
837 // If x or y is a NaN, NaN is returned.
838 ASSERT_TRUE(isnan(fmod(nan(""), 10.0)));
839 ASSERT_TRUE(isnan(fmod(12.0, nan(""))));
840
841 // If y is 0, NaN is returned.
842 ASSERT_TRUE(isnan(fmod(3.0, 0.0)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800843}
844
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000845TEST(math_h, fmodf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800846 ASSERT_FLOAT_EQ(2.0f, fmodf(12.0f, 10.0f));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700847
848 // If x is an infinity, NaN is returned.
849 ASSERT_TRUE(isnanf(fmodf(HUGE_VALF, 10.0f)));
850 ASSERT_TRUE(isnanf(fmodf(-HUGE_VALF, 10.0f)));
851
852 // If x or y is a NaN, NaN is returned.
853 ASSERT_TRUE(isnanf(fmodf(nanf(""), 10.0f)));
854 ASSERT_TRUE(isnanf(fmodf(12.0f, nan(""))));
855
856 // If y is 0, NaN is returned.
857 ASSERT_TRUE(isnanf(fmodf(3.0f, 0.0f)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800858}
859
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000860TEST(math_h, fmodl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100861 ASSERT_DOUBLE_EQ(2.0L, fmodl(12.0L, 10.0L));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700862
863 // If x is an infinity, NaN is returned.
864 ASSERT_TRUE(isnanl(fmodl(HUGE_VALL, 10.0L)));
865 ASSERT_TRUE(isnanl(fmodl(-HUGE_VALL, 10.0L)));
866
867 // If x or y is a NaN, NaN is returned.
868 ASSERT_TRUE(isnanl(fmodl(nanl(""), 10.0L)));
869 ASSERT_TRUE(isnanl(fmodl(12.0L, nanl(""))));
870
871 // If y is 0, NaN is returned.
872 ASSERT_TRUE(isnanl(fmodl(3.0L, 0.0L)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800873}
874
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000875TEST(math_h, remainder) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000876 ASSERT_DOUBLE_EQ(2.0, remainder(12.0, 10.0));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700877
878 // If x or y is a NaN, NaN is returned.
879 ASSERT_TRUE(isnan(remainder(nan(""), 10.0)));
880 ASSERT_TRUE(isnan(remainder(12.0, nan(""))));
881
882 // If x is an infinity, NaN is returned.
883 ASSERT_TRUE(isnan(remainder(HUGE_VAL, 10.0)));
884 ASSERT_TRUE(isnan(remainder(-HUGE_VAL, 10.0)));
885
886 // If y is 0, NaN is returned.
887 ASSERT_TRUE(isnan(remainder(12.0, 0.0)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800888}
889
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000890TEST(math_h, remainderf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800891 ASSERT_FLOAT_EQ(2.0f, remainderf(12.0f, 10.0f));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700892
893 // If x or y is a NaN, NaN is returned.
894 ASSERT_TRUE(isnanf(remainderf(nanf(""), 10.0f)));
895 ASSERT_TRUE(isnanf(remainderf(12.0f, nanf(""))));
896
897 // If x is an infinity, NaN is returned.
898 ASSERT_TRUE(isnanf(remainderf(HUGE_VALF, 10.0f)));
899 ASSERT_TRUE(isnanf(remainderf(-HUGE_VALF, 10.0f)));
900
901 // If y is 0, NaN is returned.
902 ASSERT_TRUE(isnanf(remainderf(12.0f, 0.0f)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800903}
904
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000905TEST(math_h, remainderl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100906 ASSERT_DOUBLE_EQ(2.0L, remainderl(12.0L, 10.0L));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700907
908 // If x or y is a NaN, NaN is returned.
909 ASSERT_TRUE(isnanl(remainderl(nanl(""), 10.0L)));
910 ASSERT_TRUE(isnanl(remainderl(12.0L, nanl(""))));
911
912 // If x is an infinity, NaN is returned.
913 ASSERT_TRUE(isnanl(remainderl(HUGE_VALL, 10.0L)));
914 ASSERT_TRUE(isnanl(remainderl(-HUGE_VALL, 10.0L)));
915
916 // If y is 0, NaN is returned.
917 ASSERT_TRUE(isnanl(remainderl(12.0L, 0.0L)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800918}
919
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000920TEST(math_h, drem) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000921 ASSERT_DOUBLE_EQ(2.0, drem(12.0, 10.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800922}
923
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000924TEST(math_h, dremf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800925 ASSERT_FLOAT_EQ(2.0f, dremf(12.0f, 10.0f));
926}
927
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000928TEST(math_h, fmax) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000929 ASSERT_DOUBLE_EQ(12.0, fmax(12.0, 10.0));
930 ASSERT_DOUBLE_EQ(12.0, fmax(12.0, nan("")));
931 ASSERT_DOUBLE_EQ(12.0, fmax(nan(""), 12.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800932}
933
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000934TEST(math_h, fmaxf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800935 ASSERT_FLOAT_EQ(12.0f, fmaxf(12.0f, 10.0f));
936 ASSERT_FLOAT_EQ(12.0f, fmaxf(12.0f, nanf("")));
937 ASSERT_FLOAT_EQ(12.0f, fmaxf(nanf(""), 12.0f));
938}
939
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000940TEST(math_h, fmaxl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100941 ASSERT_DOUBLE_EQ(12.0L, fmaxl(12.0L, 10.0L));
942 ASSERT_DOUBLE_EQ(12.0L, fmaxl(12.0L, nanl("")));
943 ASSERT_DOUBLE_EQ(12.0L, fmaxl(nanl(""), 12.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800944}
945
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000946TEST(math_h, fmin) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000947 ASSERT_DOUBLE_EQ(10.0, fmin(12.0, 10.0));
948 ASSERT_DOUBLE_EQ(12.0, fmin(12.0, nan("")));
949 ASSERT_DOUBLE_EQ(12.0, fmin(nan(""), 12.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800950}
951
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000952TEST(math_h, fminf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800953 ASSERT_FLOAT_EQ(10.0f, fminf(12.0f, 10.0f));
954 ASSERT_FLOAT_EQ(12.0f, fminf(12.0f, nanf("")));
955 ASSERT_FLOAT_EQ(12.0f, fminf(nanf(""), 12.0f));
956}
957
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000958TEST(math_h, fminl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100959 ASSERT_DOUBLE_EQ(10.0L, fminl(12.0L, 10.0L));
960 ASSERT_DOUBLE_EQ(12.0L, fminl(12.0L, nanl("")));
961 ASSERT_DOUBLE_EQ(12.0L, fminl(nanl(""), 12.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800962}
963
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000964TEST(math_h, fma) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000965 ASSERT_DOUBLE_EQ(10.0, fma(2.0, 3.0, 4.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800966}
967
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000968TEST(math_h, fmaf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800969 ASSERT_FLOAT_EQ(10.0f, fmaf(2.0f, 3.0f, 4.0f));
970}
971
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000972TEST(math_h, fmal) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +0100973 ASSERT_DOUBLE_EQ(10.0L, fmal(2.0L, 3.0L, 4.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800974}
975
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000976TEST(math_h, hypot) {
Calin Juravle4d77c112014-03-14 17:56:46 +0000977 ASSERT_DOUBLE_EQ(5.0, hypot(3.0, 4.0));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700978
979 // If x or y is an infinity, returns positive infinity.
980 ASSERT_EQ(HUGE_VAL, hypot(3.0, HUGE_VAL));
981 ASSERT_EQ(HUGE_VAL, hypot(3.0, -HUGE_VAL));
982 ASSERT_EQ(HUGE_VAL, hypot(HUGE_VAL, 4.0));
983 ASSERT_EQ(HUGE_VAL, hypot(-HUGE_VAL, 4.0));
984
985 // If x or y is a NaN, returns NaN.
986 ASSERT_TRUE(isnan(hypot(3.0, nan(""))));
987 ASSERT_TRUE(isnan(hypot(nan(""), 4.0)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800988}
989
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000990TEST(math_h, hypotf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800991 ASSERT_FLOAT_EQ(5.0f, hypotf(3.0f, 4.0f));
Elliott Hughes505ecd62018-07-23 14:25:36 -0700992
993 // If x or y is an infinity, returns positive infinity.
994 ASSERT_EQ(HUGE_VALF, hypotf(3.0f, HUGE_VALF));
995 ASSERT_EQ(HUGE_VALF, hypotf(3.0f, -HUGE_VALF));
996 ASSERT_EQ(HUGE_VALF, hypotf(HUGE_VALF, 4.0f));
997 ASSERT_EQ(HUGE_VALF, hypotf(-HUGE_VALF, 4.0f));
998
999 // If x or y is a NaN, returns NaN.
1000 ASSERT_TRUE(isnanf(hypotf(3.0f, nanf(""))));
1001 ASSERT_TRUE(isnanf(hypotf(nanf(""), 4.0f)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001002}
1003
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001004TEST(math_h, hypotl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001005 ASSERT_DOUBLE_EQ(5.0L, hypotl(3.0L, 4.0L));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001006
1007 // If x or y is an infinity, returns positive infinity.
1008 ASSERT_EQ(HUGE_VALL, hypotl(3.0L, HUGE_VALL));
1009 ASSERT_EQ(HUGE_VALL, hypotl(3.0L, -HUGE_VALL));
1010 ASSERT_EQ(HUGE_VALL, hypotl(HUGE_VALL, 4.0L));
1011 ASSERT_EQ(HUGE_VALL, hypotl(-HUGE_VALL, 4.0L));
1012
1013 // If x or y is a NaN, returns NaN.
1014 ASSERT_TRUE(isnanl(hypotl(3.0L, nanl(""))));
1015 ASSERT_TRUE(isnanl(hypotl(nanl(""), 4.0L)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001016}
1017
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001018TEST(math_h, erf) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001019 ASSERT_DOUBLE_EQ(0.84270079294971489, erf(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001020}
1021
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001022TEST(math_h, erff) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001023 ASSERT_FLOAT_EQ(0.84270078f, erff(1.0f));
1024}
1025
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001026TEST(math_h, erfl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001027 ASSERT_DOUBLE_EQ(0.84270079294971489L, erfl(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001028}
1029
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001030TEST(math_h, erfc) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001031 ASSERT_DOUBLE_EQ(0.15729920705028513, erfc(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001032}
1033
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001034TEST(math_h, erfcf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001035 ASSERT_FLOAT_EQ(0.15729921f, erfcf(1.0f));
1036}
1037
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001038TEST(math_h, erfcl) {
Chih-Hung Hsiehc2edae32018-12-11 15:16:24 -08001039 ASSERT_DOUBLE_EQ(0.15729920705028513L, erfcl(1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001040}
1041
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001042TEST(math_h, lrint) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001043 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Dmitriy Ivanov7b956ed2014-09-04 12:47:07 -07001044
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001045 fesetround(FE_UPWARD); // lrint/lrintf/lrintl obey the rounding mode.
Elliott Hughes4ceb3472022-10-25 22:27:10 +00001046 EXPECT_EQ(1235, lrint(1234.01));
1047 EXPECT_EQ(1235, lrintf(1234.01f));
1048 EXPECT_EQ(1235, lrintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001049 fesetround(FE_TOWARDZERO); // lrint/lrintf/lrintl obey the rounding mode.
Elliott Hughes4ceb3472022-10-25 22:27:10 +00001050 EXPECT_EQ(1234, lrint(1234.01));
1051 EXPECT_EQ(1234, lrintf(1234.01f));
1052 EXPECT_EQ(1234, lrintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001053
1054 fesetround(FE_UPWARD); // llrint/llrintf/llrintl obey the rounding mode.
Elliott Hughes4ceb3472022-10-25 22:27:10 +00001055 EXPECT_EQ(1235L, llrint(1234.01));
1056 EXPECT_EQ(1235L, llrintf(1234.01f));
1057 EXPECT_EQ(1235L, llrintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001058 fesetround(FE_TOWARDZERO); // llrint/llrintf/llrintl obey the rounding mode.
Elliott Hughes4ceb3472022-10-25 22:27:10 +00001059 EXPECT_EQ(1234L, llrint(1234.01));
1060 EXPECT_EQ(1234L, llrintf(1234.01f));
1061 EXPECT_EQ(1234L, llrintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001062}
1063
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001064TEST(math_h, rint) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001065 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Dmitriy Ivanov7b956ed2014-09-04 12:47:07 -07001066
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001067 fesetround(FE_UPWARD); // rint/rintf/rintl obey the rounding mode.
1068 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
1069 ASSERT_EQ(1234.0, rint(1234.0));
1070 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1071 ASSERT_EQ(1235.0, rint(1234.01));
1072 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
1073
1074 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
1075 ASSERT_EQ(1234.0f, rintf(1234.0f));
1076 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1077 ASSERT_EQ(1235.0f, rintf(1234.01f));
1078 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
1079
1080 feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001081 ASSERT_EQ(1234.0, rintl(1234.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001082 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001083 ASSERT_EQ(1235.0, rintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001084 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
1085
1086 fesetround(FE_TOWARDZERO); // rint/rintf obey the rounding mode.
1087 ASSERT_EQ(1234.0, rint(1234.01));
1088 ASSERT_EQ(1234.0f, rintf(1234.01f));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001089 ASSERT_EQ(1234.0, rintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001090}
1091
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001092TEST(math_h, nearbyint) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001093 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001094 fesetround(FE_UPWARD); // nearbyint/nearbyintf/nearbyintl obey the rounding mode.
1095 feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag.
1096 ASSERT_EQ(1234.0, nearbyint(1234.0));
1097 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1098 ASSERT_EQ(1235.0, nearbyint(1234.01));
1099 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1100
1101 feclearexcept(FE_ALL_EXCEPT);
1102 ASSERT_EQ(1234.0f, nearbyintf(1234.0f));
1103 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1104 ASSERT_EQ(1235.0f, nearbyintf(1234.01f));
1105 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1106
1107 feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag.
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001108 ASSERT_EQ(1234.0, nearbyintl(1234.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001109 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001110 ASSERT_EQ(1235.0, nearbyintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001111 ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
1112
1113 fesetround(FE_TOWARDZERO); // nearbyint/nearbyintf/nearbyintl obey the rounding mode.
1114 ASSERT_EQ(1234.0, nearbyint(1234.01));
1115 ASSERT_EQ(1234.0f, nearbyintf(1234.01f));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001116 ASSERT_EQ(1234.0, nearbyintl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001117}
1118
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001119TEST(math_h, lround) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001120 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001121 fesetround(FE_UPWARD); // lround ignores the rounding mode.
1122 ASSERT_EQ(1234, lround(1234.01));
1123 ASSERT_EQ(1234, lroundf(1234.01f));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001124 ASSERT_EQ(1234, lroundl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001125}
1126
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001127TEST(math_h, llround) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001128 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001129 fesetround(FE_UPWARD); // llround ignores the rounding mode.
1130 ASSERT_EQ(1234L, llround(1234.01));
1131 ASSERT_EQ(1234L, llroundf(1234.01f));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001132 ASSERT_EQ(1234L, llroundl(1234.01L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001133}
1134
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001135TEST(math_h, ilogb) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001136 ASSERT_EQ(FP_ILOGB0, ilogb(0.0));
1137 ASSERT_EQ(FP_ILOGBNAN, ilogb(nan("")));
1138 ASSERT_EQ(INT_MAX, ilogb(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001139 ASSERT_EQ(INT_MAX, ilogb(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001140 ASSERT_EQ(0, ilogb(1.0));
1141 ASSERT_EQ(3, ilogb(10.0));
1142}
1143
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001144TEST(math_h, ilogbf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001145 ASSERT_EQ(FP_ILOGB0, ilogbf(0.0f));
1146 ASSERT_EQ(FP_ILOGBNAN, ilogbf(nanf("")));
1147 ASSERT_EQ(INT_MAX, ilogbf(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001148 ASSERT_EQ(INT_MAX, ilogbf(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001149 ASSERT_EQ(0, ilogbf(1.0f));
1150 ASSERT_EQ(3, ilogbf(10.0f));
1151}
1152
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001153TEST(math_h, ilogbl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001154 ASSERT_EQ(FP_ILOGB0, ilogbl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001155 ASSERT_EQ(FP_ILOGBNAN, ilogbl(nanl("")));
1156 ASSERT_EQ(INT_MAX, ilogbl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001157 ASSERT_EQ(INT_MAX, ilogbl(-HUGE_VALL));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001158 ASSERT_EQ(0L, ilogbl(1.0L));
1159 ASSERT_EQ(3L, ilogbl(10.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001160}
1161
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001162TEST(math_h, logb) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001163 ASSERT_EQ(-HUGE_VAL, logb(0.0));
1164 ASSERT_TRUE(isnan(logb(nan(""))));
1165 ASSERT_TRUE(isinf(logb(HUGE_VAL)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001166 ASSERT_TRUE(isinf(logb(-HUGE_VAL)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001167 ASSERT_EQ(0.0, logb(1.0));
1168 ASSERT_EQ(3.0, logb(10.0));
1169}
1170
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001171TEST(math_h, logbf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001172 ASSERT_EQ(-HUGE_VALF, logbf(0.0f));
1173 ASSERT_TRUE(isnanf(logbf(nanf(""))));
Elliott Hughesef40d252017-12-20 23:01:26 -08001174 ASSERT_TRUE(isinff(logbf(HUGE_VALF)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001175 ASSERT_TRUE(isinff(logbf(-HUGE_VALF)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001176 ASSERT_EQ(0.0f, logbf(1.0f));
1177 ASSERT_EQ(3.0f, logbf(10.0f));
1178}
1179
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001180TEST(math_h, logbl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001181 ASSERT_EQ(-HUGE_VAL, logbl(0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001182 ASSERT_TRUE(isnan(logbl(nanl(""))));
1183 ASSERT_TRUE(isinf(logbl(HUGE_VALL)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001184 ASSERT_TRUE(isinf(logbl(-HUGE_VALL)));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001185 ASSERT_EQ(0.0L, logbl(1.0L));
1186 ASSERT_EQ(3.0L, logbl(10.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001187}
1188
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001189TEST(math_h, log1p) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001190 ASSERT_EQ(-HUGE_VAL, log1p(-1.0));
1191 ASSERT_TRUE(isnan(log1p(nan(""))));
1192 ASSERT_TRUE(isinf(log1p(HUGE_VAL)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001193 ASSERT_TRUE(isnan(log1p(-HUGE_VAL)));
Calin Juravle4d77c112014-03-14 17:56:46 +00001194 ASSERT_DOUBLE_EQ(1.0, log1p(M_E - 1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001195}
1196
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001197TEST(math_h, log1pf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001198 ASSERT_EQ(-HUGE_VALF, log1pf(-1.0f));
1199 ASSERT_TRUE(isnanf(log1pf(nanf(""))));
Elliott Hughesef40d252017-12-20 23:01:26 -08001200 ASSERT_TRUE(isinff(log1pf(HUGE_VALF)));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001201 ASSERT_TRUE(isnanf(log1pf(-HUGE_VALF)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001202 ASSERT_FLOAT_EQ(1.0f, log1pf(static_cast<float>(M_E) - 1.0f));
1203}
1204
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001205TEST(math_h, log1pl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001206 ASSERT_EQ(-HUGE_VALL, log1pl(-1.0L));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001207 ASSERT_TRUE(isnanl(log1pl(nanl(""))));
1208 ASSERT_TRUE(isinfl(log1pl(HUGE_VALL)));
1209 ASSERT_TRUE(isnanl(log1pl(-HUGE_VALL)));
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001210 ASSERT_DOUBLE_EQ(1.0L, log1pl(M_E - 1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001211}
1212
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001213TEST(math_h, fdim) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001214 ASSERT_DOUBLE_EQ(0.0, fdim(1.0, 1.0));
1215 ASSERT_DOUBLE_EQ(1.0, fdim(2.0, 1.0));
1216 ASSERT_DOUBLE_EQ(0.0, fdim(1.0, 2.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001217}
1218
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001219TEST(math_h, fdimf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001220 ASSERT_FLOAT_EQ(0.0f, fdimf(1.0f, 1.0f));
1221 ASSERT_FLOAT_EQ(1.0f, fdimf(2.0f, 1.0f));
1222 ASSERT_FLOAT_EQ(0.0f, fdimf(1.0f, 2.0f));
1223}
1224
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001225TEST(math_h, fdiml) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001226 ASSERT_DOUBLE_EQ(0.0L, fdiml(1.0L, 1.0L));
1227 ASSERT_DOUBLE_EQ(1.0L, fdiml(2.0L, 1.0L));
1228 ASSERT_DOUBLE_EQ(0.0L, fdiml(1.0L, 2.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001229}
1230
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001231TEST(math_h, round) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001232 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001233 fesetround(FE_TOWARDZERO); // round ignores the rounding mode and always rounds away from zero.
Calin Juravle4d77c112014-03-14 17:56:46 +00001234 ASSERT_DOUBLE_EQ(1.0, round(0.5));
1235 ASSERT_DOUBLE_EQ(-1.0, round(-0.5));
1236 ASSERT_DOUBLE_EQ(0.0, round(0.0));
1237 ASSERT_DOUBLE_EQ(-0.0, round(-0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001238 ASSERT_TRUE(isnan(round(nan(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +00001239 ASSERT_DOUBLE_EQ(HUGE_VAL, round(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001240 ASSERT_DOUBLE_EQ(-HUGE_VAL, round(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001241}
1242
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001243TEST(math_h, roundf) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001244 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001245 fesetround(FE_TOWARDZERO); // roundf ignores the rounding mode and always rounds away from zero.
1246 ASSERT_FLOAT_EQ(1.0f, roundf(0.5f));
1247 ASSERT_FLOAT_EQ(-1.0f, roundf(-0.5f));
1248 ASSERT_FLOAT_EQ(0.0f, roundf(0.0f));
1249 ASSERT_FLOAT_EQ(-0.0f, roundf(-0.0f));
1250 ASSERT_TRUE(isnanf(roundf(nanf(""))));
1251 ASSERT_FLOAT_EQ(HUGE_VALF, roundf(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001252 ASSERT_FLOAT_EQ(-HUGE_VALF, roundf(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001253}
1254
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001255TEST(math_h, roundl) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001256 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001257 fesetround(FE_TOWARDZERO); // roundl ignores the rounding mode and always rounds away from zero.
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001258 ASSERT_DOUBLE_EQ(1.0L, roundl(0.5L));
1259 ASSERT_DOUBLE_EQ(-1.0L, roundl(-0.5L));
1260 ASSERT_DOUBLE_EQ(0.0L, roundl(0.0L));
1261 ASSERT_DOUBLE_EQ(-0.0L, roundl(-0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001262 ASSERT_TRUE(isnan(roundl(nanl(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +00001263 ASSERT_DOUBLE_EQ(HUGE_VALL, roundl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001264 ASSERT_DOUBLE_EQ(-HUGE_VALL, roundl(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001265}
1266
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001267TEST(math_h, trunc) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001268 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001269 fesetround(FE_UPWARD); // trunc ignores the rounding mode and always rounds toward zero.
Calin Juravle4d77c112014-03-14 17:56:46 +00001270 ASSERT_DOUBLE_EQ(1.0, trunc(1.5));
1271 ASSERT_DOUBLE_EQ(-1.0, trunc(-1.5));
1272 ASSERT_DOUBLE_EQ(0.0, trunc(0.0));
1273 ASSERT_DOUBLE_EQ(-0.0, trunc(-0.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001274 ASSERT_TRUE(isnan(trunc(nan(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +00001275 ASSERT_DOUBLE_EQ(HUGE_VAL, trunc(HUGE_VAL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001276 ASSERT_DOUBLE_EQ(-HUGE_VAL, trunc(-HUGE_VAL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001277}
1278
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001279TEST(math_h, truncf) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001280 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001281 fesetround(FE_UPWARD); // truncf ignores the rounding mode and always rounds toward zero.
1282 ASSERT_FLOAT_EQ(1.0f, truncf(1.5f));
1283 ASSERT_FLOAT_EQ(-1.0f, truncf(-1.5f));
1284 ASSERT_FLOAT_EQ(0.0f, truncf(0.0f));
1285 ASSERT_FLOAT_EQ(-0.0f, truncf(-0.0f));
1286 ASSERT_TRUE(isnan(truncf(nanf(""))));
1287 ASSERT_FLOAT_EQ(HUGE_VALF, truncf(HUGE_VALF));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001288 ASSERT_FLOAT_EQ(-HUGE_VALF, truncf(-HUGE_VALF));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001289}
1290
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001291TEST(math_h, truncl) {
Tom Cherry98f016f2017-04-05 16:20:29 -07001292 auto guard = android::base::make_scope_guard([]() { fesetenv(FE_DFL_ENV); });
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001293 fesetround(FE_UPWARD); // truncl ignores the rounding mode and always rounds toward zero.
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001294 ASSERT_DOUBLE_EQ(1.0L, truncl(1.5L));
1295 ASSERT_DOUBLE_EQ(-1.0L, truncl(-1.5L));
1296 ASSERT_DOUBLE_EQ(0.0L, truncl(0.0L));
1297 ASSERT_DOUBLE_EQ(-0.0L, truncl(-0.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001298 ASSERT_TRUE(isnan(truncl(nan(""))));
Calin Juravle4d77c112014-03-14 17:56:46 +00001299 ASSERT_DOUBLE_EQ(HUGE_VALL, truncl(HUGE_VALL));
Elliott Hughes505ecd62018-07-23 14:25:36 -07001300 ASSERT_DOUBLE_EQ(-HUGE_VALL, truncl(-HUGE_VALL));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001301}
1302
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001303TEST(math_h, nextafter) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001304 ASSERT_DOUBLE_EQ(0.0, nextafter(0.0, 0.0));
1305 ASSERT_DOUBLE_EQ(4.9406564584124654e-324, nextafter(0.0, 1.0));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001306 ASSERT_DOUBLE_EQ(-4.9406564584124654e-324, nextafter(0.0, -1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001307}
1308
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001309TEST(math_h, nextafterf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001310 ASSERT_FLOAT_EQ(0.0f, nextafterf(0.0f, 0.0f));
1311 ASSERT_FLOAT_EQ(1.4012985e-45f, nextafterf(0.0f, 1.0f));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001312 ASSERT_FLOAT_EQ(-1.4012985e-45f, nextafterf(0.0f, -1.0f));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001313}
1314
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001315TEST(math_h, nextafterl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001316 ASSERT_DOUBLE_EQ(0.0L, nextafterl(0.0L, 0.0L));
Calin Juravle4d77c112014-03-14 17:56:46 +00001317 // Use a runtime value to accomodate the case when
1318 // sizeof(double) == sizeof(long double)
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001319 long double smallest_positive = ldexpl(1.0L, LDBL_MIN_EXP - LDBL_MANT_DIG);
1320 ASSERT_DOUBLE_EQ(smallest_positive, nextafterl(0.0L, 1.0L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001321 ASSERT_DOUBLE_EQ(-smallest_positive, nextafterl(0.0L, -1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001322}
1323
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001324TEST(math_h, nexttoward) {
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001325 ASSERT_DOUBLE_EQ(0.0, nexttoward(0.0, 0.0L));
1326 ASSERT_DOUBLE_EQ(4.9406564584124654e-324, nexttoward(0.0, 1.0L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001327 ASSERT_DOUBLE_EQ(-4.9406564584124654e-324, nexttoward(0.0, -1.0L));
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001328}
1329
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001330TEST(math_h, nexttowardf) {
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001331 ASSERT_FLOAT_EQ(0.0f, nexttowardf(0.0f, 0.0L));
1332 ASSERT_FLOAT_EQ(1.4012985e-45f, nexttowardf(0.0f, 1.0L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001333 ASSERT_FLOAT_EQ(-1.4012985e-45f, nexttowardf(0.0f, -1.0L));
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001334}
1335
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001336TEST(math_h, nexttowardl) {
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001337 ASSERT_DOUBLE_EQ(0.0L, nexttowardl(0.0L, 0.0L));
1338 // Use a runtime value to accomodate the case when
1339 // sizeof(double) == sizeof(long double)
1340 long double smallest_positive = ldexpl(1.0L, LDBL_MIN_EXP - LDBL_MANT_DIG);
1341 ASSERT_DOUBLE_EQ(smallest_positive, nexttowardl(0.0L, 1.0L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001342 ASSERT_DOUBLE_EQ(-smallest_positive, nexttowardl(0.0L, -1.0L));
Calin Juravle1abc9ff2014-04-17 18:17:32 +01001343}
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001344
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001345TEST(math_h, copysign) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001346 ASSERT_DOUBLE_EQ(0.0, copysign(0.0, 1.0));
1347 ASSERT_DOUBLE_EQ(-0.0, copysign(0.0, -1.0));
1348 ASSERT_DOUBLE_EQ(2.0, copysign(2.0, 1.0));
1349 ASSERT_DOUBLE_EQ(-2.0, copysign(2.0, -1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001350}
1351
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001352TEST(math_h, copysignf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001353 ASSERT_FLOAT_EQ(0.0f, copysignf(0.0f, 1.0f));
1354 ASSERT_FLOAT_EQ(-0.0f, copysignf(0.0f, -1.0f));
1355 ASSERT_FLOAT_EQ(2.0f, copysignf(2.0f, 1.0f));
1356 ASSERT_FLOAT_EQ(-2.0f, copysignf(2.0f, -1.0f));
1357}
1358
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001359TEST(math_h, copysignl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001360 ASSERT_DOUBLE_EQ(0.0L, copysignl(0.0L, 1.0L));
1361 ASSERT_DOUBLE_EQ(-0.0L, copysignl(0.0L, -1.0L));
1362 ASSERT_DOUBLE_EQ(2.0L, copysignl(2.0L, 1.0L));
1363 ASSERT_DOUBLE_EQ(-2.0L, copysignl(2.0L, -1.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001364}
1365
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001366TEST(math_h, significand) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001367 ASSERT_DOUBLE_EQ(0.0, significand(0.0));
1368 ASSERT_DOUBLE_EQ(1.2, significand(1.2));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001369 ASSERT_DOUBLE_EQ(1.53125, significand(12.25));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001370}
1371
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001372TEST(math_h, significandf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001373 ASSERT_FLOAT_EQ(0.0f, significandf(0.0f));
1374 ASSERT_FLOAT_EQ(1.2f, significandf(1.2f));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001375 ASSERT_FLOAT_EQ(1.53125f, significandf(12.25f));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001376}
1377
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001378TEST(math_h, significandl) {
Colin Cross4c5595c2021-08-16 15:51:59 -07001379#if !defined(ANDROID_HOST_MUSL)
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001380 ASSERT_DOUBLE_EQ(0.0L, significandl(0.0L));
1381 ASSERT_DOUBLE_EQ(1.2L, significandl(1.2L));
Jingwei Zhang90be6c52014-09-19 00:50:00 +08001382 ASSERT_DOUBLE_EQ(1.53125L, significandl(12.25L));
Colin Cross7da20342021-07-28 11:18:11 -07001383#else
1384 GTEST_SKIP() << "musl doesn't have significandl";
1385#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001386}
1387
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001388TEST(math_h, scalb) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001389 ASSERT_DOUBLE_EQ(12.0, scalb(3.0, 2.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001390}
1391
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001392TEST(math_h, scalbf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001393 ASSERT_FLOAT_EQ(12.0f, scalbf(3.0f, 2.0f));
1394}
1395
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001396TEST(math_h, scalbln) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001397 ASSERT_DOUBLE_EQ(12.0, scalbln(3.0, 2L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001398}
1399
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001400TEST(math_h, scalblnf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001401 ASSERT_FLOAT_EQ(12.0f, scalblnf(3.0f, 2L));
1402}
1403
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001404TEST(math_h, scalblnl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001405 ASSERT_DOUBLE_EQ(12.0L, scalblnl(3.0L, 2L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001406}
1407
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001408TEST(math_h, scalbn) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001409 ASSERT_DOUBLE_EQ(12.0, scalbn(3.0, 2));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001410}
1411
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001412TEST(math_h, scalbnf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001413 ASSERT_FLOAT_EQ(12.0f, scalbnf(3.0f, 2));
1414}
1415
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001416TEST(math_h, scalbnl) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001417 ASSERT_DOUBLE_EQ(12.0L, scalbnl(3.0L, 2));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001418}
1419
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001420TEST(math_h, gamma) {
Colin Cross4c5595c2021-08-16 15:51:59 -07001421#if !defined(ANDROID_HOST_MUSL)
Calin Juravle4d77c112014-03-14 17:56:46 +00001422 ASSERT_DOUBLE_EQ(log(24.0), gamma(5.0));
Colin Cross7da20342021-07-28 11:18:11 -07001423#else
1424 GTEST_SKIP() << "musl doesn't have gamma";
1425#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001426}
1427
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001428TEST(math_h, gammaf) {
Colin Cross4c5595c2021-08-16 15:51:59 -07001429#if !defined(ANDROID_HOST_MUSL)
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001430 ASSERT_FLOAT_EQ(logf(24.0f), gammaf(5.0f));
Colin Cross7da20342021-07-28 11:18:11 -07001431#else
1432 GTEST_SKIP() << "musl doesn't have gammaf";
1433#endif
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001434}
1435
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001436TEST(math_h, gamma_r) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001437#if defined(__BIONIC__)
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001438 int sign;
Calin Juravle4d77c112014-03-14 17:56:46 +00001439 ASSERT_DOUBLE_EQ(log(24.0), gamma_r(5.0, &sign));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001440 ASSERT_EQ(1, sign);
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001441#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -08001442 GTEST_SKIP() << "glibc doesn't have gamma_r";
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001443#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001444}
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001445
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001446TEST(math_h, gammaf_r) {
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001447#if defined(__BIONIC__)
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001448 int sign;
1449 ASSERT_FLOAT_EQ(logf(24.0f), gammaf_r(5.0f, &sign));
1450 ASSERT_EQ(1, sign);
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001451#else // __BIONIC__
Elliott Hughesbcaa4542019-03-08 15:20:23 -08001452 GTEST_SKIP() << "glibc doesn't have gammaf_r";
Christopher Ferrisf04935c2013-12-20 18:43:21 -08001453#endif // __BIONIC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001454}
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001455
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001456TEST(math_h, lgamma) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001457 ASSERT_DOUBLE_EQ(log(24.0), lgamma(5.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001458}
1459
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001460TEST(math_h, lgammaf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001461 ASSERT_FLOAT_EQ(logf(24.0f), lgammaf(5.0f));
1462}
1463
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001464TEST(math_h, lgammal) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001465 ASSERT_DOUBLE_EQ(logl(24.0L), lgammal(5.0L));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001466}
1467
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001468TEST(math_h, lgamma_r) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001469 int sign;
Calin Juravle4d77c112014-03-14 17:56:46 +00001470 ASSERT_DOUBLE_EQ(log(24.0), lgamma_r(5.0, &sign));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001471 ASSERT_EQ(1, sign);
1472}
1473
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001474TEST(math_h, lgamma_r_17471883) {
Elliott Hughes75531852014-09-18 11:23:58 -07001475 int sign;
1476
1477 sign = 0;
1478 ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(0.0, &sign));
1479 ASSERT_EQ(1, sign);
1480 sign = 0;
1481 ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(-0.0, &sign));
1482 ASSERT_EQ(-1, sign);
1483}
1484
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001485TEST(math_h, lgammaf_r) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001486 int sign;
1487 ASSERT_FLOAT_EQ(logf(24.0f), lgammaf_r(5.0f, &sign));
1488 ASSERT_EQ(1, sign);
1489}
1490
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001491TEST(math_h, lgammaf_r_17471883) {
Elliott Hughes75531852014-09-18 11:23:58 -07001492 int sign;
1493
1494 sign = 0;
1495 ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(0.0f, &sign));
1496 ASSERT_EQ(1, sign);
1497 sign = 0;
1498 ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(-0.0f, &sign));
1499 ASSERT_EQ(-1, sign);
1500}
1501
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001502TEST(math_h, lgammal_r) {
Elliott Hughes75531852014-09-18 11:23:58 -07001503 int sign;
1504 ASSERT_DOUBLE_EQ(log(24.0L), lgamma_r(5.0L, &sign));
1505 ASSERT_EQ(1, sign);
1506}
1507
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001508TEST(math_h, lgammal_r_17471883) {
Elliott Hughes75531852014-09-18 11:23:58 -07001509 int sign;
1510
1511 sign = 0;
1512 ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(0.0L, &sign));
1513 ASSERT_EQ(1, sign);
1514 sign = 0;
1515 ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(-0.0L, &sign));
1516 ASSERT_EQ(-1, sign);
1517}
1518
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001519TEST(math_h, tgamma_NaN) {
Elliott Hughes88430662021-04-08 20:59:07 -07001520 ASSERT_TRUE(isnan(tgamma(nan(""))));
1521 ASSERT_TRUE(isnanf(tgammaf(nanf(""))));
1522 ASSERT_TRUE(isnanl(tgammal(nanl(""))));
1523}
1524
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001525TEST(math_h, tgamma_inf) {
Elliott Hughes88430662021-04-08 20:59:07 -07001526 ASSERT_TRUE(isinf(tgamma(HUGE_VAL)));
1527 ASSERT_TRUE(isinff(tgammaf(HUGE_VALF)));
1528 ASSERT_TRUE(isinfl(tgammal(HUGE_VALL)));
1529}
1530
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001531TEST(math_h, tgamma_negative) {
Elliott Hughes88430662021-04-08 20:59:07 -07001532 ASSERT_TRUE(isnan(tgamma(-1.0)));
1533 ASSERT_TRUE(isnanf(tgammaf(-1.0f)));
1534 ASSERT_TRUE(isnanl(tgammal(-1.0L)));
1535}
1536
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001537TEST(math_h, tgamma) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001538 ASSERT_DOUBLE_EQ(24.0, tgamma(5.0));
Elliott Hughes88430662021-04-08 20:59:07 -07001539 ASSERT_DOUBLE_EQ(120.0, tgamma(6.0));
1540 ASSERT_TRUE(isinf(tgamma(172.0)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001541}
1542
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001543TEST(math_h, tgammaf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001544 ASSERT_FLOAT_EQ(24.0f, tgammaf(5.0f));
Elliott Hughes88430662021-04-08 20:59:07 -07001545 ASSERT_FLOAT_EQ(120.0f, tgammaf(6.0f));
1546 ASSERT_TRUE(isinff(tgammaf(172.0f)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001547}
1548
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001549TEST(math_h, tgammal) {
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001550 ASSERT_DOUBLE_EQ(24.0L, tgammal(5.0L));
Elliott Hughes88430662021-04-08 20:59:07 -07001551 ASSERT_DOUBLE_EQ(120.0L, tgammal(6.0L));
1552 ASSERT_TRUE(isinf(tgammal(172.0L)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001553}
1554
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001555TEST(math_h, j0) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001556 ASSERT_DOUBLE_EQ(1.0, j0(0.0));
1557 ASSERT_DOUBLE_EQ(0.76519768655796661, j0(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001558}
1559
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001560TEST(math_h, j0f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001561 ASSERT_FLOAT_EQ(1.0f, j0f(0.0f));
1562 ASSERT_FLOAT_EQ(0.76519769f, j0f(1.0f));
1563}
1564
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001565TEST(math_h, j1) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001566 ASSERT_DOUBLE_EQ(0.0, j1(0.0));
1567 ASSERT_DOUBLE_EQ(0.44005058574493355, j1(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001568}
1569
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001570TEST(math_h, j1f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001571 ASSERT_FLOAT_EQ(0.0f, j1f(0.0f));
1572 ASSERT_FLOAT_EQ(0.44005057f, j1f(1.0f));
1573}
1574
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001575TEST(math_h, jn) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001576 ASSERT_DOUBLE_EQ(0.0, jn(4, 0.0));
1577 ASSERT_DOUBLE_EQ(0.0024766389641099553, jn(4, 1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001578}
1579
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001580TEST(math_h, jnf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001581 ASSERT_FLOAT_EQ(0.0f, jnf(4, 0.0f));
1582 ASSERT_FLOAT_EQ(0.0024766389f, jnf(4, 1.0f));
1583}
1584
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001585TEST(math_h, y0) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001586 ASSERT_DOUBLE_EQ(-HUGE_VAL, y0(0.0));
1587 ASSERT_DOUBLE_EQ(0.08825696421567697, y0(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001588}
1589
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001590TEST(math_h, y0f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001591 ASSERT_FLOAT_EQ(-HUGE_VALF, y0f(0.0f));
1592 ASSERT_FLOAT_EQ(0.088256963f, y0f(1.0f));
1593}
1594
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001595TEST(math_h, y1) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001596 ASSERT_DOUBLE_EQ(-HUGE_VAL, y1(0.0));
1597 ASSERT_DOUBLE_EQ(-0.78121282130028868, y1(1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001598}
1599
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001600TEST(math_h, y1f) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001601 ASSERT_FLOAT_EQ(-HUGE_VALF, y1f(0.0f));
1602 ASSERT_FLOAT_EQ(-0.78121281f, y1f(1.0f));
1603}
1604
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001605TEST(math_h, yn) {
Calin Juravle4d77c112014-03-14 17:56:46 +00001606 ASSERT_DOUBLE_EQ(-HUGE_VAL, yn(4, 0.0));
1607 ASSERT_DOUBLE_EQ(-33.278423028972114, yn(4, 1.0));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001608}
1609
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001610TEST(math_h, ynf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001611 ASSERT_FLOAT_EQ(-HUGE_VALF, ynf(4, 0.0f));
1612 ASSERT_FLOAT_EQ(-33.278423f, ynf(4, 1.0f));
1613}
1614
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001615TEST(math_h, frexp) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001616 int exp;
1617 double dr = frexp(1024.0, &exp);
Calin Juravle4d77c112014-03-14 17:56:46 +00001618 ASSERT_DOUBLE_EQ(1024.0, scalbn(dr, exp));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001619}
1620
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001621TEST(math_h, frexpf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001622 int exp;
1623 float fr = frexpf(1024.0f, &exp);
1624 ASSERT_FLOAT_EQ(1024.0f, scalbnf(fr, exp));
1625}
1626
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001627TEST(math_h, frexpl) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001628 int exp;
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001629 long double ldr = frexpl(1024.0L, &exp);
1630 ASSERT_DOUBLE_EQ(1024.0L, scalbnl(ldr, exp));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001631}
1632
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001633TEST(math_h, modf) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001634 double di;
Calin Juravled8d6fee2014-04-01 16:45:53 +01001635 double df = modf(123.75, &di);
Calin Juravle4d77c112014-03-14 17:56:46 +00001636 ASSERT_DOUBLE_EQ(123.0, di);
Calin Juravled8d6fee2014-04-01 16:45:53 +01001637 ASSERT_DOUBLE_EQ(0.75, df);
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001638}
1639
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001640TEST(math_h, modff) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001641 float fi;
Calin Juravled8d6fee2014-04-01 16:45:53 +01001642 float ff = modff(123.75f, &fi);
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001643 ASSERT_FLOAT_EQ(123.0f, fi);
Calin Juravled8d6fee2014-04-01 16:45:53 +01001644 ASSERT_FLOAT_EQ(0.75f, ff);
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001645}
1646
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001647TEST(math_h, modfl) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001648 long double ldi;
Calin Juravled8d6fee2014-04-01 16:45:53 +01001649 long double ldf = modfl(123.75L, &ldi);
1650 ASSERT_DOUBLE_EQ(123.0L, ldi);
1651 ASSERT_DOUBLE_EQ(0.75L, ldf);
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001652}
1653
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001654TEST(math_h, remquo) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001655 int q;
1656 double d = remquo(13.0, 4.0, &q);
1657 ASSERT_EQ(3, q);
Calin Juravle4d77c112014-03-14 17:56:46 +00001658 ASSERT_DOUBLE_EQ(1.0, d);
Elliott Hughes505ecd62018-07-23 14:25:36 -07001659
1660 // If x or y is a NaN, NaN is returned.
1661 ASSERT_TRUE(isnan(remquo(nan(""), 10.0, &q)));
1662 ASSERT_TRUE(isnan(remquo(12.0, nan(""), &q)));
1663
1664 // If x is an infinity, NaN is returned.
1665 ASSERT_TRUE(isnan(remquo(HUGE_VAL, 10.0, &q)));
1666 ASSERT_TRUE(isnan(remquo(-HUGE_VAL, 10.0, &q)));
1667
1668 // If y is 0, NaN is returned.
1669 ASSERT_TRUE(isnan(remquo(12.0, 0.0, &q)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001670}
1671
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001672TEST(math_h, remquof) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001673 int q;
1674 float f = remquof(13.0f, 4.0f, &q);
1675 ASSERT_EQ(3, q);
1676 ASSERT_FLOAT_EQ(1.0, f);
Elliott Hughes505ecd62018-07-23 14:25:36 -07001677
1678 // If x or y is a NaN, NaN is returned.
1679 ASSERT_TRUE(isnanf(remquof(nanf(""), 10.0f, &q)));
1680 ASSERT_TRUE(isnanf(remquof(12.0f, nanf(""), &q)));
1681
1682 // If x is an infinity, NaN is returned.
1683 ASSERT_TRUE(isnanf(remquof(HUGE_VALF, 10.0f, &q)));
1684 ASSERT_TRUE(isnanf(remquof(-HUGE_VALF, 10.0f, &q)));
1685
1686 // If y is 0, NaN is returned.
1687 ASSERT_TRUE(isnanf(remquof(12.0f, 0.0f, &q)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001688}
1689
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001690TEST(math_h, remquol) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001691 int q;
Calin Juravleb7afa9d2014-04-01 16:41:12 +01001692 long double ld = remquol(13.0L, 4.0L, &q);
1693 ASSERT_DOUBLE_EQ(3L, q);
1694 ASSERT_DOUBLE_EQ(1.0L, ld);
Elliott Hughes505ecd62018-07-23 14:25:36 -07001695
1696 // If x or y is a NaN, NaN is returned.
1697 ASSERT_TRUE(isnanl(remquol(nanl(""), 10.0L, &q)));
1698 ASSERT_TRUE(isnanl(remquol(12.0L, nanl(""), &q)));
1699
1700 // If x is an infinity, NaN is returned.
1701 ASSERT_TRUE(isnanl(remquol(HUGE_VALL, 10.0L, &q)));
1702 ASSERT_TRUE(isnanl(remquol(-HUGE_VALL, 10.0L, &q)));
1703
1704 // If y is 0, NaN is returned.
1705 ASSERT_TRUE(isnanl(remquol(12.0L, 0.0L, &q)));
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001706}
1707
1708// https://code.google.com/p/android/issues/detail?id=6697
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001709TEST(math_h, frexpf_public_bug_6697) {
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001710 int exp;
1711 float fr = frexpf(14.1f, &exp);
1712 ASSERT_FLOAT_EQ(14.1f, scalbnf(fr, exp));
1713}
Elliott Hughes18b17e92014-06-06 21:43:33 -07001714
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001715TEST(math_h, exp2_STRICT_ALIGN_OpenBSD_bug) {
Elliott Hughes18b17e92014-06-06 21:43:33 -07001716 // OpenBSD/x86's libm had a bug here, but it was already fixed in FreeBSD:
1717 // http://svnweb.FreeBSD.org/base/head/lib/msun/src/math_private.h?revision=240827&view=markup
1718 ASSERT_DOUBLE_EQ(5.0, exp2(log2(5)));
1719 ASSERT_FLOAT_EQ(5.0f, exp2f(log2f(5)));
1720 ASSERT_DOUBLE_EQ(5.0L, exp2l(log2l(5)));
1721}
1722
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001723TEST(math_h, nextafterl_OpenBSD_bug) {
Elliott Hughes18b17e92014-06-06 21:43:33 -07001724 // OpenBSD/x86's libm had a bug here.
1725 ASSERT_TRUE(nextafter(1.0, 0.0) - 1.0 < 0.0);
1726 ASSERT_TRUE(nextafterf(1.0f, 0.0f) - 1.0f < 0.0f);
1727 ASSERT_TRUE(nextafterl(1.0L, 0.0L) - 1.0L < 0.0L);
1728}
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001729
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001730#include "math_data/acos_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001731TEST(math_h, acos_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001732 DoMathDataTest<1>(g_acos_intel_data, acos);
1733}
1734
1735#include "math_data/acosf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001736TEST(math_h, acosf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001737 DoMathDataTest<1>(g_acosf_intel_data, acosf);
1738}
1739
1740#include "math_data/acosh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001741TEST(math_h, acosh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001742 DoMathDataTest<2>(g_acosh_intel_data, acosh);
1743}
1744
1745#include "math_data/acoshf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001746TEST(math_h, acoshf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001747 DoMathDataTest<2>(g_acoshf_intel_data, acoshf);
1748}
1749
1750#include "math_data/asin_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001751TEST(math_h, asin_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001752 DoMathDataTest<1>(g_asin_intel_data, asin);
1753}
1754
1755#include "math_data/asinf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001756TEST(math_h, asinf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001757 DoMathDataTest<1>(g_asinf_intel_data, asinf);
1758}
1759
1760#include "math_data/asinh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001761TEST(math_h, asinh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001762 DoMathDataTest<2>(g_asinh_intel_data, asinh);
1763}
1764
1765#include "math_data/asinhf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001766TEST(math_h, asinhf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001767 DoMathDataTest<2>(g_asinhf_intel_data, asinhf);
1768}
1769
1770#include "math_data/atan2_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001771TEST(math_h, atan2_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001772 DoMathDataTest<2>(g_atan2_intel_data, atan2);
1773}
1774
1775#include "math_data/atan2f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001776TEST(math_h, atan2f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001777 DoMathDataTest<2>(g_atan2f_intel_data, atan2f);
1778}
1779
1780#include "math_data/atan_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001781TEST(math_h, atan_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001782 DoMathDataTest<1>(g_atan_intel_data, atan);
1783}
1784
1785#include "math_data/atanf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001786TEST(math_h, atanf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001787 DoMathDataTest<1>(g_atanf_intel_data, atanf);
1788}
1789
1790#include "math_data/atanh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001791TEST(math_h, atanh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001792 DoMathDataTest<2>(g_atanh_intel_data, atanh);
1793}
1794
1795#include "math_data/atanhf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001796TEST(math_h, atanhf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001797 DoMathDataTest<2>(g_atanhf_intel_data, atanhf);
1798}
1799
1800#include "math_data/cbrt_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001801TEST(math_h, cbrt_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001802 DoMathDataTest<1>(g_cbrt_intel_data, cbrt);
1803}
1804
1805#include "math_data/cbrtf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001806TEST(math_h, cbrtf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001807 DoMathDataTest<1>(g_cbrtf_intel_data, cbrtf);
1808}
1809
1810#include "math_data/ceil_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001811TEST(math_h, ceil_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001812 DoMathDataTest<1>(g_ceil_intel_data, ceil);
1813}
1814
1815#include "math_data/ceilf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001816TEST(math_h, ceilf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001817 DoMathDataTest<1>(g_ceilf_intel_data, ceilf);
1818}
1819
1820#include "math_data/copysign_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001821TEST(math_h, copysign_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001822 DoMathDataTest<1>(g_copysign_intel_data, copysign);
1823}
1824
1825#include "math_data/copysignf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001826TEST(math_h, copysignf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001827 DoMathDataTest<1>(g_copysignf_intel_data, copysignf);
1828}
1829
1830#include "math_data/cos_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001831TEST(math_h, cos_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001832 DoMathDataTest<1>(g_cos_intel_data, cos);
1833}
1834
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001835#include "math_data/cosf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001836TEST(math_h, cosf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001837 DoMathDataTest<1>(g_cosf_intel_data, cosf);
1838}
1839
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001840#include "math_data/cosh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001841TEST(math_h, cosh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001842 DoMathDataTest<2>(g_cosh_intel_data, cosh);
1843}
1844
1845#include "math_data/coshf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001846TEST(math_h, coshf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001847 DoMathDataTest<2>(g_coshf_intel_data, coshf);
1848}
1849
1850#include "math_data/exp_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001851TEST(math_h, exp_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001852 DoMathDataTest<1>(g_exp_intel_data, exp);
1853}
1854
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001855#include "math_data/expf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001856TEST(math_h, expf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08001857 DoMathDataTest<1>(g_expf_intel_data, expf);
1858}
1859
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001860#include "math_data/exp2_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001861TEST(math_h, exp2_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001862 DoMathDataTest<1>(g_exp2_intel_data, exp2);
1863}
1864
1865#include "math_data/exp2f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001866TEST(math_h, exp2f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001867 DoMathDataTest<1>(g_exp2f_intel_data, exp2f);
1868}
1869
1870#include "math_data/expm1_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001871TEST(math_h, expm1_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001872 DoMathDataTest<1>(g_expm1_intel_data, expm1);
1873}
1874
1875#include "math_data/expm1f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001876TEST(math_h, expm1f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001877 DoMathDataTest<1>(g_expm1f_intel_data, expm1f);
1878}
1879
1880#include "math_data/fabs_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001881TEST(math_h, fabs_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001882 DoMathDataTest<1>(g_fabs_intel_data, fabs);
1883}
1884
1885#include "math_data/fabsf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001886TEST(math_h, fabsf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001887 DoMathDataTest<1>(g_fabsf_intel_data, fabsf);
1888}
1889
1890#include "math_data/fdim_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001891TEST(math_h, fdim_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001892 DoMathDataTest<1>(g_fdim_intel_data, fdim);
1893}
1894
1895#include "math_data/fdimf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001896TEST(math_h, fdimf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001897 DoMathDataTest<1>(g_fdimf_intel_data, fdimf);
1898}
1899
1900#include "math_data/floor_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001901TEST(math_h, floor_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001902 DoMathDataTest<1>(g_floor_intel_data, floor);
1903}
1904
1905#include "math_data/floorf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001906TEST(math_h, floorf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001907 DoMathDataTest<1>(g_floorf_intel_data, floorf);
1908}
1909
1910#include "math_data/fma_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001911TEST(math_h, fma_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001912 DoMathDataTest<1>(g_fma_intel_data, fma);
1913}
1914
1915#include "math_data/fmaf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001916TEST(math_h, fmaf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001917 DoMathDataTest<1>(g_fmaf_intel_data, fmaf);
1918}
1919
1920#include "math_data/fmax_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001921TEST(math_h, fmax_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001922 DoMathDataTest<1>(g_fmax_intel_data, fmax);
1923}
1924
1925#include "math_data/fmaxf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001926TEST(math_h, fmaxf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001927 DoMathDataTest<1>(g_fmaxf_intel_data, fmaxf);
1928}
1929
1930#include "math_data/fmin_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001931TEST(math_h, fmin_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001932 DoMathDataTest<1>(g_fmin_intel_data, fmin);
1933}
1934
1935#include "math_data/fminf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001936TEST(math_h, fminf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001937 DoMathDataTest<1>(g_fminf_intel_data, fminf);
1938}
1939
1940#include "math_data/fmod_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001941TEST(math_h, fmod_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001942 DoMathDataTest<1>(g_fmod_intel_data, fmod);
1943}
1944
1945#include "math_data/fmodf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001946TEST(math_h, fmodf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001947 DoMathDataTest<1>(g_fmodf_intel_data, fmodf);
1948}
1949
1950#include "math_data/frexp_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001951TEST(math_h, frexp_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001952 DoMathDataTest<1>(g_frexp_intel_data, frexp);
1953}
1954
1955#include "math_data/frexpf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001956TEST(math_h, frexpf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001957 DoMathDataTest<1>(g_frexpf_intel_data, frexpf);
1958}
1959
1960#include "math_data/hypot_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001961TEST(math_h, hypot_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001962 DoMathDataTest<1>(g_hypot_intel_data, hypot);
1963}
1964
1965#include "math_data/hypotf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001966TEST(math_h, hypotf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001967 DoMathDataTest<1>(g_hypotf_intel_data, hypotf);
1968}
1969
1970#include "math_data/ilogb_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001971TEST(math_h, ilogb_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001972 DoMathDataTest<1>(g_ilogb_intel_data, ilogb);
1973}
1974
1975#include "math_data/ilogbf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001976TEST(math_h, ilogbf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001977 DoMathDataTest<1>(g_ilogbf_intel_data, ilogbf);
1978}
1979
1980#include "math_data/ldexp_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001981TEST(math_h, ldexp_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001982 DoMathDataTest<1>(g_ldexp_intel_data, ldexp);
1983}
1984
1985#include "math_data/ldexpf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001986TEST(math_h, ldexpf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08001987 DoMathDataTest<1>(g_ldexpf_intel_data, ldexpf);
1988}
1989
jzha136f3ea0932015-06-12 09:15:02 -07001990#include "math_data/llrint_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001991TEST(math_h, llrint_intel) {
jzha136f3ea0932015-06-12 09:15:02 -07001992 DoMathDataTest<1>(g_llrint_intel_data, llrint);
1993}
1994
1995#include "math_data/llrintf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00001996TEST(math_h, llrintf_intel) {
jzha136f3ea0932015-06-12 09:15:02 -07001997 DoMathDataTest<1>(g_llrintf_intel_data, llrintf);
1998}
1999
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002000#include "math_data/log_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002001TEST(math_h, log_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002002 DoMathDataTest<1>(g_log_intel_data, log);
2003}
2004
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002005#include "math_data/logf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002006TEST(math_h, logf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002007 DoMathDataTest<1>(g_logf_intel_data, logf);
2008}
2009
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002010#include "math_data/log10_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002011TEST(math_h, log10_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002012 DoMathDataTest<1>(g_log10_intel_data, log10);
2013}
2014
2015#include "math_data/log10f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002016TEST(math_h, log10f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002017 DoMathDataTest<1>(g_log10f_intel_data, log10f);
2018}
2019
2020#include "math_data/log1p_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002021TEST(math_h, log1p_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002022 DoMathDataTest<1>(g_log1p_intel_data, log1p);
2023}
2024
2025#include "math_data/log1pf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002026TEST(math_h, log1pf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002027 DoMathDataTest<1>(g_log1pf_intel_data, log1pf);
2028}
2029
2030#include "math_data/log2_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002031TEST(math_h, log2_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002032 DoMathDataTest<1>(g_log2_intel_data, log2);
2033}
2034
2035#include "math_data/log2f_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002036TEST(math_h, log2f_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002037 DoMathDataTest<1>(g_log2f_intel_data, log2f);
2038}
2039
2040#include "math_data/logb_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002041TEST(math_h, logb_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002042 DoMathDataTest<1>(g_logb_intel_data, logb);
2043}
2044
2045#include "math_data/logbf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002046TEST(math_h, logbf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002047 DoMathDataTest<1>(g_logbf_intel_data, logbf);
2048}
2049
jzha136f3ea0932015-06-12 09:15:02 -07002050#include "math_data/lrint_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002051TEST(math_h, lrint_intel) {
jzha136f3ea0932015-06-12 09:15:02 -07002052 DoMathDataTest<1>(g_lrint_intel_data, lrint);
2053}
2054
2055#include "math_data/lrintf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002056TEST(math_h, lrintf_intel) {
jzha136f3ea0932015-06-12 09:15:02 -07002057 DoMathDataTest<1>(g_lrintf_intel_data, lrintf);
2058}
2059
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002060#include "math_data/modf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002061TEST(math_h, modf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002062 DoMathDataTest<1>(g_modf_intel_data, modf);
2063}
2064
2065#include "math_data/modff_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002066TEST(math_h, modff_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002067 DoMathDataTest<1>(g_modff_intel_data, modff);
2068}
2069
2070#include "math_data/nearbyint_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002071TEST(math_h, nearbyint_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002072 DoMathDataTest<1>(g_nearbyint_intel_data, nearbyint);
2073}
2074
2075#include "math_data/nearbyintf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002076TEST(math_h, nearbyintf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002077 DoMathDataTest<1>(g_nearbyintf_intel_data, nearbyintf);
2078}
2079
2080#include "math_data/nextafter_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002081TEST(math_h, nextafter_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002082 DoMathDataTest<1>(g_nextafter_intel_data, nextafter);
2083}
2084
2085#include "math_data/nextafterf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002086TEST(math_h, nextafterf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002087 DoMathDataTest<1>(g_nextafterf_intel_data, nextafterf);
2088}
2089
2090#include "math_data/pow_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002091TEST(math_h, pow_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002092 DoMathDataTest<1>(g_pow_intel_data, pow);
2093}
2094
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002095#include "math_data/powf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002096TEST(math_h, powf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002097 DoMathDataTest<1>(g_powf_intel_data, powf);
2098}
2099
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002100#include "math_data/remainder_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002101TEST(math_h, remainder_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002102 DoMathDataTest<1>(g_remainder_intel_data, remainder);
2103}
2104
2105#include "math_data/remainderf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002106TEST(math_h, remainderf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002107 DoMathDataTest<1>(g_remainderf_intel_data, remainderf);
2108}
2109
2110#include "math_data/remquo_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002111TEST(math_h, remquo_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002112 DoMathDataTest<1>(g_remquo_intel_data, remquo);
2113}
2114
2115#include "math_data/remquof_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002116TEST(math_h, remquof_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002117 DoMathDataTest<1>(g_remquof_intel_data, remquof);
2118}
2119
2120#include "math_data/rint_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002121TEST(math_h, rint_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002122 DoMathDataTest<1>(g_rint_intel_data, rint);
2123}
2124
2125#include "math_data/rintf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002126TEST(math_h, rintf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002127 DoMathDataTest<1>(g_rintf_intel_data, rintf);
2128}
2129
2130#include "math_data/round_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002131TEST(math_h, round_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002132 DoMathDataTest<1>(g_round_intel_data, round);
2133}
2134
2135#include "math_data/roundf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002136TEST(math_h, roundf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002137 DoMathDataTest<1>(g_roundf_intel_data, roundf);
2138}
2139
2140#include "math_data/scalb_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002141TEST(math_h, scalb_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002142 DoMathDataTest<1>(g_scalb_intel_data, scalb);
2143}
2144
2145#include "math_data/scalbf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002146TEST(math_h, scalbf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002147 DoMathDataTest<1>(g_scalbf_intel_data, scalbf);
2148}
2149
2150#include "math_data/scalbn_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002151TEST(math_h, scalbn_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002152 DoMathDataTest<1>(g_scalbn_intel_data, scalbn);
2153}
2154
2155#include "math_data/scalbnf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002156TEST(math_h, scalbnf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002157 DoMathDataTest<1>(g_scalbnf_intel_data, scalbnf);
2158}
2159
2160#include "math_data/significand_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002161TEST(math_h, significand_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002162 DoMathDataTest<1>(g_significand_intel_data, significand);
2163}
2164
2165#include "math_data/significandf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002166TEST(math_h, significandf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002167 DoMathDataTest<1>(g_significandf_intel_data, significandf);
2168}
2169
2170#include "math_data/sin_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002171TEST(math_h, sin_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002172 DoMathDataTest<1>(g_sin_intel_data, sin);
2173}
2174
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002175#include "math_data/sinf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002176TEST(math_h, sinf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002177 DoMathDataTest<1>(g_sinf_intel_data, sinf);
2178}
2179
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002180#include "math_data/sinh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002181TEST(math_h, sinh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002182 DoMathDataTest<2>(g_sinh_intel_data, sinh);
2183}
2184
2185#include "math_data/sinhf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002186TEST(math_h, sinhf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002187 DoMathDataTest<2>(g_sinhf_intel_data, sinhf);
2188}
2189
2190#include "math_data/sincos_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002191TEST(math_h, sincos_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002192 DoMathDataTest<1>(g_sincos_intel_data, sincos);
2193}
2194
2195#include "math_data/sincosf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002196TEST(math_h, sincosf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002197 DoMathDataTest<1>(g_sincosf_intel_data, sincosf);
2198}
2199
2200#include "math_data/sqrt_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002201TEST(math_h, sqrt_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002202 DoMathDataTest<1>(g_sqrt_intel_data, sqrt);
2203}
2204
2205#include "math_data/sqrtf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002206TEST(math_h, sqrtf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002207 DoMathDataTest<1>(g_sqrtf_intel_data, sqrtf);
2208}
2209
2210#include "math_data/tan_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002211TEST(math_h, tan_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002212 DoMathDataTest<1>(g_tan_intel_data, tan);
2213}
2214
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002215#include "math_data/tanf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002216TEST(math_h, tanf_intel) {
Elliott Hughes1b37ba22014-11-03 17:03:20 -08002217 DoMathDataTest<1>(g_tanf_intel_data, tanf);
2218}
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002219
2220#include "math_data/tanh_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002221TEST(math_h, tanh_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002222 DoMathDataTest<2>(g_tanh_intel_data, tanh);
2223}
2224
2225#include "math_data/tanhf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002226TEST(math_h, tanhf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002227 DoMathDataTest<2>(g_tanhf_intel_data, tanhf);
2228}
2229
2230#include "math_data/trunc_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002231TEST(math_h, trunc_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002232 DoMathDataTest<1>(g_trunc_intel_data, trunc);
2233}
2234
2235#include "math_data/truncf_intel_data.h"
Elliott Hughesab2d3e12023-06-07 17:16:34 +00002236TEST(math_h, truncf_intel) {
Jingwei Zhang56b2b292014-09-02 21:39:14 +08002237 DoMathDataTest<1>(g_truncf_intel_data, truncf);
2238}