diff --git a/tests/Android.mk b/tests/Android.mk
index 0685d4a..ed1df6e 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -51,6 +51,7 @@
     -g \
     -Wall -Wextra \
     -Werror \
+    -fno-builtin \
 
 test_src_files = \
     debug_format_test.cpp \
@@ -59,6 +60,7 @@
     getauxval_test.cpp \
     getcwd_test.cpp \
     libgen_test.cpp \
+    math_test.cpp \
     pthread_test.cpp \
     regex_test.cpp \
     signal_test.cpp \
diff --git a/tests/fenv_test.cpp b/tests/fenv_test.cpp
index 4adb066..db1bfc3 100644
--- a/tests/fenv_test.cpp
+++ b/tests/fenv_test.cpp
@@ -79,3 +79,7 @@
   feclearexcept(FE_DIVBYZERO);
   ASSERT_EQ(0, fetestexcept(FE_ALL_EXCEPT));
 }
+
+TEST(fenv, FE_DFL_ENV_macro) {
+  ASSERT_EQ(0, fesetenv(FE_DFL_ENV));
+}
diff --git a/tests/math_test.cpp b/tests/math_test.cpp
new file mode 100644
index 0000000..8e0abdb
--- /dev/null
+++ b/tests/math_test.cpp
@@ -0,0 +1,1176 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define _DECLARE_C99_LDBL_MATH 1
+
+#include <gtest/gtest.h>
+
+#include <fenv.h>
+#include <limits.h>
+#include <math.h>
+#include <stdint.h>
+
+float float_subnormal() {
+  union {
+    float f;
+    uint32_t i;
+  } u;
+  u.i = 0x007fffff;
+  return u.f;
+}
+
+double double_subnormal() {
+  union {
+    double d;
+    uint64_t i;
+  } u;
+  u.i = 0x000fffffffffffffL;
+  return u.d;
+}
+
+TEST(math, fpclassify) {
+  ASSERT_EQ(FP_INFINITE, fpclassify(INFINITY));
+  ASSERT_EQ(FP_INFINITE, fpclassify(HUGE_VALF));
+  ASSERT_EQ(FP_INFINITE, fpclassify(HUGE_VAL));
+
+  ASSERT_EQ(FP_NAN, fpclassify(nanf("")));
+  ASSERT_EQ(FP_NAN, fpclassify(nan("")));
+
+  ASSERT_EQ(FP_NORMAL, fpclassify(1.0f));
+  ASSERT_EQ(FP_NORMAL, fpclassify(1.0));
+
+  ASSERT_EQ(FP_SUBNORMAL, fpclassify(float_subnormal()));
+  ASSERT_EQ(FP_SUBNORMAL, fpclassify(double_subnormal()));
+
+  ASSERT_EQ(FP_ZERO, fpclassify(0.0f));
+  ASSERT_EQ(FP_ZERO, fpclassify(0.0));
+}
+
+/* TODO: stlport breaks the isfinite macro
+TEST(math, isfinite) {
+  ASSERT_TRUE(isfinite(123.0f));
+  ASSERT_TRUE(isfinite(123.0));
+  ASSERT_FALSE(isfinite(HUGE_VALF));
+  ASSERT_FALSE(isfinite(HUGE_VAL));
+}
+*/
+
+TEST(math, isinf) {
+  ASSERT_FALSE(isinf(123.0f));
+  ASSERT_FALSE(isinf(123.0));
+  ASSERT_TRUE(isinf(HUGE_VALF));
+  ASSERT_TRUE(isinf(HUGE_VAL));
+}
+
+TEST(math, isnan) {
+  ASSERT_FALSE(isnan(123.0f));
+  ASSERT_FALSE(isnan(123.0));
+  ASSERT_TRUE(isnan(nanf("")));
+  ASSERT_TRUE(isnan(nan("")));
+}
+
+TEST(math, isnormal) {
+  ASSERT_TRUE(isnormal(123.0f));
+  ASSERT_TRUE(isnormal(123.0));
+  ASSERT_FALSE(isnormal(float_subnormal()));
+  ASSERT_FALSE(isnormal(double_subnormal()));
+}
+
+// TODO: isgreater, isgreaterequals, isless, islessequal, islessgreater, isunordered
+
+/* TODO: stlport breaks the signbit macro
+TEST(math, signbit) {
+  ASSERT_EQ(0, signbit(0.0f));
+  ASSERT_EQ(0, signbit(0.0));
+
+  ASSERT_EQ(0, signbit(1.0f));
+  ASSERT_EQ(0, signbit(1.0));
+
+  ASSERT_NE(0, signbit(-1.0f));
+  ASSERT_NE(0, signbit(-1.0));
+}
+*/
+
+#if defined(__BIONIC__)
+TEST(math, __fpclassifyd) {
+  ASSERT_EQ(FP_INFINITE, __fpclassifyd(HUGE_VAL));
+  ASSERT_EQ(FP_NAN, __fpclassifyd(nan("")));
+  ASSERT_EQ(FP_NORMAL, __fpclassifyd(1.0));
+  ASSERT_EQ(FP_SUBNORMAL, __fpclassifyd(double_subnormal()));
+  ASSERT_EQ(FP_ZERO, __fpclassifyd(0.0));
+}
+#endif
+
+#if defined(__BIONIC__)
+TEST(math, __fpclassifyf) {
+  ASSERT_EQ(FP_INFINITE, __fpclassifyf(HUGE_VALF));
+  ASSERT_EQ(FP_NAN, __fpclassifyf(nanf("")));
+  ASSERT_EQ(FP_NORMAL, __fpclassifyf(1.0f));
+  ASSERT_EQ(FP_SUBNORMAL, __fpclassifyf(float_subnormal()));
+  ASSERT_EQ(FP_ZERO, __fpclassifyf(0.0f));
+}
+#endif
+
+#if defined(__BIONIC__)
+TEST(math, __fpclassifyl) {
+  EXPECT_EQ(FP_INFINITE, __fpclassifyl(HUGE_VALL));
+  EXPECT_EQ(FP_NAN, __fpclassifyl(nanl("")));
+  EXPECT_EQ(FP_NORMAL, __fpclassifyl(1.0));
+  EXPECT_EQ(FP_SUBNORMAL, __fpclassifyl(double_subnormal()));
+  EXPECT_EQ(FP_ZERO, __fpclassifyl(0.0));
+}
+#endif
+
+TEST(math, finitef) {
+  ASSERT_TRUE(finitef(123.0f));
+  ASSERT_FALSE(finitef(HUGE_VALF));
+}
+
+#if defined(__BIONIC__)
+TEST(math, __isfinite) {
+  ASSERT_TRUE(__isfinite(123.0));
+  ASSERT_FALSE(__isfinite(HUGE_VAL));
+}
+#endif
+
+#if defined(__BIONIC__)
+TEST(math, __isfinitef) {
+  ASSERT_TRUE(__isfinitef(123.0f));
+  ASSERT_FALSE(__isfinitef(HUGE_VALF));
+}
+#endif
+
+#if defined(__BIONIC__)
+TEST(math, __isfinitel) {
+  ASSERT_TRUE(__isfinitel(123.0f));
+  ASSERT_FALSE(__isfinitel(HUGE_VALL));
+}
+#endif
+
+TEST(math, finite) {
+  ASSERT_TRUE(finite(123.0));
+  ASSERT_FALSE(finite(HUGE_VAL));
+}
+
+TEST(math, __isinff) {
+  ASSERT_FALSE(__isinff(123.0f));
+  ASSERT_TRUE(__isinff(HUGE_VALF));
+}
+
+TEST(math, __isinfl) {
+  ASSERT_FALSE(__isinfl(123.0));
+  ASSERT_TRUE(__isinfl(HUGE_VALL));
+}
+
+TEST(math, __isnanf) {
+  ASSERT_FALSE(__isnanf(123.0f));
+  ASSERT_TRUE(__isnanf(nanf("")));
+}
+
+TEST(math, __isnanl) {
+  ASSERT_FALSE(__isnanl(123.0));
+  ASSERT_TRUE(__isnanl(nanl("")));
+}
+
+TEST(math, isnanf) {
+  ASSERT_FALSE(isnanf(123.0f));
+  ASSERT_TRUE(isnanf(nanf("")));
+}
+
+#if defined(__BIONIC__)
+TEST(math, __isnormal) {
+  ASSERT_TRUE(__isnormal(123.0));
+  ASSERT_FALSE(__isnormal(double_subnormal()));
+}
+#endif
+
+#if defined(__BIONIC__)
+TEST(math, __isnormalf) {
+  ASSERT_TRUE(__isnormalf(123.0f));
+  ASSERT_FALSE(__isnormalf(float_subnormal()));
+}
+#endif
+
+#if defined(__BIONIC__)
+TEST(math, __isnormall) {
+  ASSERT_TRUE(__isnormall(123.0));
+  ASSERT_FALSE(__isnormall(double_subnormal()));
+}
+#endif
+
+TEST(math, __signbit) {
+  ASSERT_EQ(0, __signbit(0.0));
+  ASSERT_EQ(0, __signbit(1.0));
+  ASSERT_NE(0, __signbit(-1.0));
+}
+
+TEST(math, __signbitf) {
+  ASSERT_EQ(0, __signbitf(0.0f));
+  ASSERT_EQ(0, __signbitf(1.0f));
+  ASSERT_NE(0, __signbitf(-1.0f));
+}
+
+TEST(math, __signbitl) {
+  ASSERT_EQ(0, __signbitl(0.0));
+  ASSERT_EQ(0, __signbitl(1.0));
+  ASSERT_NE(0, __signbitl(-1.0));
+}
+
+TEST(math, acos) {
+  ASSERT_FLOAT_EQ(M_PI/2.0, acos(0.0));
+}
+
+TEST(math, acosf) {
+  ASSERT_FLOAT_EQ(static_cast<float>(M_PI)/2.0f, acosf(0.0f));
+}
+
+TEST(math, acosl) {
+  ASSERT_FLOAT_EQ(M_PI/2.0, acosl(0.0));
+}
+
+TEST(math, asin) {
+  ASSERT_FLOAT_EQ(0.0, asin(0.0));
+}
+
+TEST(math, asinf) {
+  ASSERT_FLOAT_EQ(0.0f, asinf(0.0f));
+}
+
+TEST(math, asinl) {
+  ASSERT_FLOAT_EQ(0.0, asinl(0.0));
+}
+
+TEST(math, atan) {
+  ASSERT_FLOAT_EQ(0.0, atan(0.0));
+}
+
+TEST(math, atanf) {
+  ASSERT_FLOAT_EQ(0.0f, atanf(0.0f));
+}
+
+TEST(math, atanl) {
+  ASSERT_FLOAT_EQ(0.0, atanl(0.0));
+}
+
+TEST(math, atan2) {
+  ASSERT_FLOAT_EQ(0.0, atan2(0.0, 0.0));
+}
+
+TEST(math, atan2f) {
+  ASSERT_FLOAT_EQ(0.0f, atan2f(0.0f, 0.0f));
+}
+
+TEST(math, atan2l) {
+  ASSERT_FLOAT_EQ(0.0, atan2l(0.0, 0.0));
+}
+
+TEST(math, cos) {
+  ASSERT_FLOAT_EQ(1.0, cos(0.0));
+}
+
+TEST(math, cosf) {
+  ASSERT_FLOAT_EQ(1.0f, cosf(0.0f));
+}
+
+TEST(math, cosl) {
+  ASSERT_FLOAT_EQ(1.0, cosl(0.0));
+}
+
+TEST(math, sin) {
+  ASSERT_FLOAT_EQ(0.0, sin(0.0));
+}
+
+TEST(math, sinf) {
+  ASSERT_FLOAT_EQ(0.0f, sinf(0.0f));
+}
+
+TEST(math, sinl) {
+  ASSERT_FLOAT_EQ(0.0, sinl(0.0));
+}
+
+TEST(math, tan) {
+  ASSERT_FLOAT_EQ(0.0, tan(0.0));
+}
+
+TEST(math, tanf) {
+  ASSERT_FLOAT_EQ(0.0f, tanf(0.0f));
+}
+
+TEST(math, tanl) {
+  ASSERT_FLOAT_EQ(0.0, tanl(0.0));
+}
+
+TEST(math, acosh) {
+  ASSERT_FLOAT_EQ(0.0, acosh(1.0));
+}
+
+TEST(math, acoshf) {
+  ASSERT_FLOAT_EQ(0.0f, acoshf(1.0f));
+}
+
+TEST(math, acoshl) {
+  ASSERT_FLOAT_EQ(0.0, acoshl(1.0));
+}
+
+TEST(math, asinh) {
+  ASSERT_FLOAT_EQ(0.0, asinh(0.0));
+}
+
+TEST(math, asinhf) {
+  ASSERT_FLOAT_EQ(0.0f, asinhf(0.0f));
+}
+
+TEST(math, asinhl) {
+  ASSERT_FLOAT_EQ(0.0, asinhl(0.0));
+}
+
+TEST(math, atanh) {
+  ASSERT_FLOAT_EQ(0.0, atanh(0.0));
+}
+
+TEST(math, atanhf) {
+  ASSERT_FLOAT_EQ(0.0f, atanhf(0.0f));
+}
+
+TEST(math, atanhl) {
+  ASSERT_FLOAT_EQ(0.0, atanhl(0.0));
+}
+
+TEST(math, cosh) {
+  ASSERT_FLOAT_EQ(1.0, cosh(0.0));
+}
+
+TEST(math, coshf) {
+  ASSERT_FLOAT_EQ(1.0f, coshf(0.0f));
+}
+
+TEST(math, coshl) {
+  ASSERT_FLOAT_EQ(1.0, coshl(0.0));
+}
+
+TEST(math, sinh) {
+  ASSERT_FLOAT_EQ(0.0, sinh(0.0));
+}
+
+TEST(math, sinhf) {
+  ASSERT_FLOAT_EQ(0.0f, sinhf(0.0f));
+}
+
+TEST(math, sinhl) {
+  ASSERT_FLOAT_EQ(0.0, sinhl(0.0));
+}
+
+TEST(math, tanh) {
+  ASSERT_FLOAT_EQ(0.0, tanh(0.0));
+}
+
+TEST(math, tanhf) {
+  ASSERT_FLOAT_EQ(0.0f, tanhf(0.0f));
+}
+
+TEST(math, tanhl) {
+  ASSERT_FLOAT_EQ(0.0, tanhl(0.0));
+}
+
+TEST(math, log) {
+  ASSERT_FLOAT_EQ(1.0, log(M_E));
+}
+
+TEST(math, logf) {
+  ASSERT_FLOAT_EQ(1.0f, logf(static_cast<float>(M_E)));
+}
+
+TEST(math, logl) {
+  ASSERT_FLOAT_EQ(1.0, logl(M_E));
+}
+
+TEST(math, log2) {
+  ASSERT_FLOAT_EQ(12.0, log2(4096.0));
+}
+
+TEST(math, log2f) {
+  ASSERT_FLOAT_EQ(12.0f, log2f(4096.0f));
+}
+
+TEST(math, log2l) {
+  ASSERT_FLOAT_EQ(12.0, log2l(4096.0));
+}
+
+TEST(math, log10) {
+  ASSERT_FLOAT_EQ(3.0, log10(1000.0));
+}
+
+TEST(math, log10f) {
+  ASSERT_FLOAT_EQ(3.0f, log10f(1000.0f));
+}
+
+TEST(math, log10l) {
+  ASSERT_FLOAT_EQ(3.0, log10l(1000.0));
+}
+
+TEST(math, cbrt) {
+  ASSERT_FLOAT_EQ(3.0, cbrt(27.0));
+}
+
+TEST(math, cbrtf) {
+  ASSERT_FLOAT_EQ(3.0f, cbrtf(27.0f));
+}
+
+TEST(math, cbrtl) {
+  ASSERT_FLOAT_EQ(3.0, cbrtl(27.0));
+}
+
+TEST(math, sqrt) {
+  ASSERT_FLOAT_EQ(2.0, sqrt(4.0));
+}
+
+TEST(math, sqrtf) {
+  ASSERT_FLOAT_EQ(2.0f, sqrtf(4.0f));
+}
+
+TEST(math, sqrtl) {
+  ASSERT_FLOAT_EQ(2.0, sqrtl(4.0));
+}
+
+TEST(math, exp) {
+  ASSERT_FLOAT_EQ(1.0, exp(0.0));
+  ASSERT_FLOAT_EQ(M_E, exp(1.0));
+}
+
+TEST(math, expf) {
+  ASSERT_FLOAT_EQ(1.0f, expf(0.0f));
+  ASSERT_FLOAT_EQ(static_cast<float>(M_E), expf(1.0f));
+}
+
+TEST(math, expl) {
+  ASSERT_FLOAT_EQ(1.0, expl(0.0));
+  ASSERT_FLOAT_EQ(M_E, expl(1.0));
+}
+
+TEST(math, exp2) {
+  ASSERT_FLOAT_EQ(8.0, exp2(3.0));
+}
+
+TEST(math, exp2f) {
+  ASSERT_FLOAT_EQ(8.0f, exp2f(3.0f));
+}
+
+TEST(math, exp2l) {
+  ASSERT_FLOAT_EQ(8.0, exp2l(3.0));
+}
+
+TEST(math, expm1) {
+  ASSERT_FLOAT_EQ(M_E - 1.0, expm1(1.0));
+}
+
+TEST(math, expm1f) {
+  ASSERT_FLOAT_EQ(static_cast<float>(M_E) - 1.0f, expm1f(1.0f));
+}
+
+TEST(math, expm1l) {
+  ASSERT_FLOAT_EQ(M_E - 1.0, expm1l(1.0));
+}
+
+TEST(math, pow) {
+  ASSERT_FLOAT_EQ(8.0, pow(2.0, 3.0));
+}
+
+TEST(math, powf) {
+  ASSERT_FLOAT_EQ(8.0f, powf(2.0f, 3.0f));
+}
+
+TEST(math, powl) {
+  ASSERT_FLOAT_EQ(8.0, powl(2.0, 3.0));
+}
+
+TEST(math, ceil) {
+  ASSERT_FLOAT_EQ(1.0, ceil(0.9));
+}
+
+TEST(math, ceilf) {
+  ASSERT_FLOAT_EQ(1.0f, ceilf(0.9f));
+}
+
+TEST(math, ceill) {
+  ASSERT_FLOAT_EQ(1.0, ceill(0.9));
+}
+
+TEST(math, floor) {
+  ASSERT_FLOAT_EQ(1.0, floor(1.1));
+}
+
+TEST(math, floorf) {
+  ASSERT_FLOAT_EQ(1.0f, floorf(1.1f));
+}
+
+TEST(math, floorl) {
+  ASSERT_FLOAT_EQ(1.0, floorl(1.1));
+}
+
+TEST(math, fabs) {
+  ASSERT_FLOAT_EQ(1.0, fabs(-1.0));
+}
+
+TEST(math, fabsf) {
+  ASSERT_FLOAT_EQ(1.0f, fabsf(-1.0f));
+}
+
+TEST(math, fabsl) {
+  ASSERT_FLOAT_EQ(1.0, fabsl(-1.0));
+}
+
+TEST(math, ldexp) {
+  ASSERT_FLOAT_EQ(16.0, ldexp(2.0, 3.0));
+}
+
+TEST(math, ldexpf) {
+  ASSERT_FLOAT_EQ(16.0f, ldexpf(2.0f, 3.0f));
+}
+
+TEST(math, ldexpl) {
+  ASSERT_FLOAT_EQ(16.0, ldexpl(2.0, 3.0));
+}
+
+TEST(math, fmod) {
+  ASSERT_FLOAT_EQ(2.0, fmod(12.0, 10.0));
+}
+
+TEST(math, fmodf) {
+  ASSERT_FLOAT_EQ(2.0f, fmodf(12.0f, 10.0f));
+}
+
+TEST(math, fmodl) {
+  ASSERT_FLOAT_EQ(2.0, fmodl(12.0, 10.0));
+}
+
+TEST(math, remainder) {
+  ASSERT_FLOAT_EQ(2.0, remainder(12.0, 10.0));
+}
+
+TEST(math, remainderf) {
+  ASSERT_FLOAT_EQ(2.0f, remainderf(12.0f, 10.0f));
+}
+
+TEST(math, remainderl) {
+  ASSERT_FLOAT_EQ(2.0, remainderl(12.0, 10.0));
+}
+
+TEST(math, drem) {
+  ASSERT_FLOAT_EQ(2.0, drem(12.0, 10.0));
+}
+
+TEST(math, dremf) {
+  ASSERT_FLOAT_EQ(2.0f, dremf(12.0f, 10.0f));
+}
+
+TEST(math, fmax) {
+  ASSERT_FLOAT_EQ(12.0, fmax(12.0, 10.0));
+  ASSERT_FLOAT_EQ(12.0, fmax(12.0, nan("")));
+  ASSERT_FLOAT_EQ(12.0, fmax(nan(""), 12.0));
+}
+
+TEST(math, fmaxf) {
+  ASSERT_FLOAT_EQ(12.0f, fmaxf(12.0f, 10.0f));
+  ASSERT_FLOAT_EQ(12.0f, fmaxf(12.0f, nanf("")));
+  ASSERT_FLOAT_EQ(12.0f, fmaxf(nanf(""), 12.0f));
+}
+
+TEST(math, fmaxl) {
+  ASSERT_FLOAT_EQ(12.0, fmaxl(12.0, 10.0));
+  ASSERT_FLOAT_EQ(12.0, fmaxl(12.0, nanl("")));
+  ASSERT_FLOAT_EQ(12.0, fmaxl(nanl(""), 12.0));
+}
+
+TEST(math, fmin) {
+  ASSERT_FLOAT_EQ(10.0, fmin(12.0, 10.0));
+  ASSERT_FLOAT_EQ(12.0, fmin(12.0, nan("")));
+  ASSERT_FLOAT_EQ(12.0, fmin(nan(""), 12.0));
+}
+
+TEST(math, fminf) {
+  ASSERT_FLOAT_EQ(10.0f, fminf(12.0f, 10.0f));
+  ASSERT_FLOAT_EQ(12.0f, fminf(12.0f, nanf("")));
+  ASSERT_FLOAT_EQ(12.0f, fminf(nanf(""), 12.0f));
+}
+
+TEST(math, fminl) {
+  ASSERT_FLOAT_EQ(10.0, fminl(12.0, 10.0));
+  ASSERT_FLOAT_EQ(12.0, fminl(12.0, nan("")));
+  ASSERT_FLOAT_EQ(12.0, fminl(nan(""), 12.0));
+}
+
+TEST(math, fma) {
+  ASSERT_FLOAT_EQ(10.0, fma(2.0, 3.0, 4.0));
+}
+
+TEST(math, fmaf) {
+  ASSERT_FLOAT_EQ(10.0f, fmaf(2.0f, 3.0f, 4.0f));
+}
+
+TEST(math, fmal) {
+  ASSERT_FLOAT_EQ(10.0, fmal(2.0, 3.0, 4.0));
+}
+
+TEST(math, hypot) {
+  ASSERT_FLOAT_EQ(5.0, hypot(3.0, 4.0));
+}
+
+TEST(math, hypotf) {
+  ASSERT_FLOAT_EQ(5.0f, hypotf(3.0f, 4.0f));
+}
+
+TEST(math, hypotl) {
+  ASSERT_FLOAT_EQ(5.0, hypotl(3.0, 4.0));
+}
+
+TEST(math, erf) {
+  ASSERT_FLOAT_EQ(0.84270078, erf(1.0));
+}
+
+TEST(math, erff) {
+  ASSERT_FLOAT_EQ(0.84270078f, erff(1.0f));
+}
+
+TEST(math, erfl) {
+  ASSERT_FLOAT_EQ(0.84270078, erfl(1.0));
+}
+
+TEST(math, erfc) {
+  ASSERT_FLOAT_EQ(0.15729921, erfc(1.0));
+}
+
+TEST(math, erfcf) {
+  ASSERT_FLOAT_EQ(0.15729921f, erfcf(1.0f));
+}
+
+TEST(math, erfcl) {
+  ASSERT_FLOAT_EQ(0.15729921, erfcl(1.0));
+}
+
+TEST(math, lrint) {
+  fesetround(FE_UPWARD); // lrint/lrintf/lrintl obey the rounding mode.
+  ASSERT_EQ(1235, lrint(1234.01));
+  ASSERT_EQ(1235, lrintf(1234.01f));
+  ASSERT_EQ(1235, lrintl(1234.01));
+  fesetround(FE_TOWARDZERO); // lrint/lrintf/lrintl obey the rounding mode.
+  ASSERT_EQ(1234, lrint(1234.01));
+  ASSERT_EQ(1234, lrintf(1234.01f));
+  ASSERT_EQ(1234, lrintl(1234.01));
+
+  fesetround(FE_UPWARD); // llrint/llrintf/llrintl obey the rounding mode.
+  ASSERT_EQ(1235L, llrint(1234.01));
+  ASSERT_EQ(1235L, llrintf(1234.01f));
+  ASSERT_EQ(1235L, llrintl(1234.01));
+  fesetround(FE_TOWARDZERO); // llrint/llrintf/llrintl obey the rounding mode.
+  ASSERT_EQ(1234L, llrint(1234.01));
+  ASSERT_EQ(1234L, llrintf(1234.01f));
+  ASSERT_EQ(1234L, llrintl(1234.01));
+}
+
+TEST(math, rint) {
+  fesetround(FE_UPWARD); // rint/rintf/rintl obey the rounding mode.
+  feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
+  ASSERT_EQ(1234.0, rint(1234.0));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+  ASSERT_EQ(1235.0, rint(1234.01));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
+
+  feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
+  ASSERT_EQ(1234.0f, rintf(1234.0f));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+  ASSERT_EQ(1235.0f, rintf(1234.01f));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
+
+  feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag.
+  ASSERT_EQ(1234.0, rintl(1234.0));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+  ASSERT_EQ(1235.0, rintl(1234.01));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) != 0);
+
+  fesetround(FE_TOWARDZERO); // rint/rintf obey the rounding mode.
+  ASSERT_EQ(1234.0, rint(1234.01));
+  ASSERT_EQ(1234.0f, rintf(1234.01f));
+  ASSERT_EQ(1234.0, rintl(1234.01));
+}
+
+TEST(math, nearbyint) {
+  fesetround(FE_UPWARD); // nearbyint/nearbyintf/nearbyintl obey the rounding mode.
+  feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag.
+  ASSERT_EQ(1234.0, nearbyint(1234.0));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+  ASSERT_EQ(1235.0, nearbyint(1234.01));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+
+  feclearexcept(FE_ALL_EXCEPT);
+  ASSERT_EQ(1234.0f, nearbyintf(1234.0f));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+  ASSERT_EQ(1235.0f, nearbyintf(1234.01f));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+
+  feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag.
+  ASSERT_EQ(1234.0, nearbyintl(1234.0));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+  ASSERT_EQ(1235.0, nearbyintl(1234.01));
+  ASSERT_TRUE((fetestexcept(FE_ALL_EXCEPT) & FE_INEXACT) == 0);
+
+  fesetround(FE_TOWARDZERO); // nearbyint/nearbyintf/nearbyintl obey the rounding mode.
+  ASSERT_EQ(1234.0, nearbyint(1234.01));
+  ASSERT_EQ(1234.0f, nearbyintf(1234.01f));
+  ASSERT_EQ(1234.0, nearbyintl(1234.01));
+}
+
+TEST(math, lround) {
+  fesetround(FE_UPWARD); // lround ignores the rounding mode.
+  ASSERT_EQ(1234, lround(1234.01));
+  ASSERT_EQ(1234, lroundf(1234.01f));
+  ASSERT_EQ(1234, lroundl(1234.01));
+}
+
+TEST(math, llround) {
+  fesetround(FE_UPWARD); // llround ignores the rounding mode.
+  ASSERT_EQ(1234L, llround(1234.01));
+  ASSERT_EQ(1234L, llroundf(1234.01f));
+  ASSERT_EQ(1234L, llroundl(1234.01));
+}
+
+TEST(math, ilogb) {
+  ASSERT_EQ(FP_ILOGB0, ilogb(0.0));
+  ASSERT_EQ(FP_ILOGBNAN, ilogb(nan("")));
+  ASSERT_EQ(INT_MAX, ilogb(HUGE_VAL));
+  ASSERT_EQ(0, ilogb(1.0));
+  ASSERT_EQ(3, ilogb(10.0));
+}
+
+TEST(math, ilogbf) {
+  ASSERT_EQ(FP_ILOGB0, ilogbf(0.0f));
+  ASSERT_EQ(FP_ILOGBNAN, ilogbf(nanf("")));
+  ASSERT_EQ(INT_MAX, ilogbf(HUGE_VALF));
+  ASSERT_EQ(0, ilogbf(1.0f));
+  ASSERT_EQ(3, ilogbf(10.0f));
+}
+
+TEST(math, ilogbl) {
+  ASSERT_EQ(FP_ILOGB0, ilogbl(0.0));
+  ASSERT_EQ(FP_ILOGBNAN, ilogbl(nanl("")));
+  ASSERT_EQ(INT_MAX, ilogbl(HUGE_VALL));
+  ASSERT_EQ(0, ilogbl(1.0));
+  ASSERT_EQ(3, ilogbl(10.0));
+}
+
+TEST(math, logb) {
+  ASSERT_EQ(-HUGE_VAL, logb(0.0));
+  ASSERT_TRUE(isnan(logb(nan(""))));
+  ASSERT_TRUE(isinf(logb(HUGE_VAL)));
+  ASSERT_EQ(0.0, logb(1.0));
+  ASSERT_EQ(3.0, logb(10.0));
+}
+
+TEST(math, logbf) {
+  ASSERT_EQ(-HUGE_VALF, logbf(0.0f));
+  ASSERT_TRUE(isnanf(logbf(nanf(""))));
+  ASSERT_TRUE(__isinff(logbf(HUGE_VALF)));
+  ASSERT_EQ(0.0f, logbf(1.0f));
+  ASSERT_EQ(3.0f, logbf(10.0f));
+}
+
+TEST(math, logbl) {
+  ASSERT_EQ(-HUGE_VAL, logbl(0.0));
+  ASSERT_TRUE(isnan(logbl(nanl(""))));
+  ASSERT_TRUE(isinf(logbl(HUGE_VALL)));
+  ASSERT_EQ(0.0, logbl(1.0));
+  ASSERT_EQ(3.0, logbl(10.0));
+}
+
+TEST(math, log1p) {
+  ASSERT_EQ(-HUGE_VAL, log1p(-1.0));
+  ASSERT_TRUE(isnan(log1p(nan(""))));
+  ASSERT_TRUE(isinf(log1p(HUGE_VAL)));
+  ASSERT_FLOAT_EQ(1.0, log1p(M_E - 1.0));
+}
+
+TEST(math, log1pf) {
+  ASSERT_EQ(-HUGE_VALF, log1pf(-1.0f));
+  ASSERT_TRUE(isnanf(log1pf(nanf(""))));
+  ASSERT_TRUE(__isinff(log1pf(HUGE_VALF)));
+  ASSERT_FLOAT_EQ(1.0f, log1pf(static_cast<float>(M_E) - 1.0f));
+}
+
+TEST(math, log1pl) {
+  ASSERT_EQ(-HUGE_VALL, log1pl(-1.0));
+  ASSERT_TRUE(isnan(log1pl(nanl(""))));
+  ASSERT_TRUE(isinf(log1pl(HUGE_VALL)));
+  ASSERT_FLOAT_EQ(1.0, log1pl(M_E - 1.0));
+}
+
+TEST(math, fdim) {
+  ASSERT_FLOAT_EQ(0.0, fdim(1.0, 1.0));
+  ASSERT_FLOAT_EQ(1.0, fdim(2.0, 1.0));
+  ASSERT_FLOAT_EQ(0.0, fdim(1.0, 2.0));
+}
+
+TEST(math, fdimf) {
+  ASSERT_FLOAT_EQ(0.0f, fdimf(1.0f, 1.0f));
+  ASSERT_FLOAT_EQ(1.0f, fdimf(2.0f, 1.0f));
+  ASSERT_FLOAT_EQ(0.0f, fdimf(1.0f, 2.0f));
+}
+
+TEST(math, fdiml) {
+  ASSERT_FLOAT_EQ(0.0, fdiml(1.0, 1.0));
+  ASSERT_FLOAT_EQ(1.0, fdiml(2.0, 1.0));
+  ASSERT_FLOAT_EQ(0.0, fdiml(1.0, 2.0));
+}
+
+TEST(math, round) {
+  fesetround(FE_TOWARDZERO); // round ignores the rounding mode and always rounds away from zero.
+  ASSERT_FLOAT_EQ(1.0, round(0.5));
+  ASSERT_FLOAT_EQ(-1.0, round(-0.5));
+  ASSERT_FLOAT_EQ(0.0, round(0.0));
+  ASSERT_FLOAT_EQ(-0.0, round(-0.0));
+  ASSERT_TRUE(isnan(round(nan(""))));
+  ASSERT_FLOAT_EQ(HUGE_VAL, round(HUGE_VAL));
+}
+
+TEST(math, roundf) {
+  fesetround(FE_TOWARDZERO); // roundf ignores the rounding mode and always rounds away from zero.
+  ASSERT_FLOAT_EQ(1.0f, roundf(0.5f));
+  ASSERT_FLOAT_EQ(-1.0f, roundf(-0.5f));
+  ASSERT_FLOAT_EQ(0.0f, roundf(0.0f));
+  ASSERT_FLOAT_EQ(-0.0f, roundf(-0.0f));
+  ASSERT_TRUE(isnanf(roundf(nanf(""))));
+  ASSERT_FLOAT_EQ(HUGE_VALF, roundf(HUGE_VALF));
+}
+
+TEST(math, roundl) {
+  fesetround(FE_TOWARDZERO); // roundl ignores the rounding mode and always rounds away from zero.
+  ASSERT_FLOAT_EQ(1.0, roundl(0.5));
+  ASSERT_FLOAT_EQ(-1.0, roundl(-0.5));
+  ASSERT_FLOAT_EQ(0.0, roundl(0.0));
+  ASSERT_FLOAT_EQ(-0.0, roundl(-0.0));
+  ASSERT_TRUE(isnan(roundl(nanl(""))));
+  ASSERT_FLOAT_EQ(HUGE_VALL, roundl(HUGE_VALL));
+}
+
+TEST(math, trunc) {
+  fesetround(FE_UPWARD); // trunc ignores the rounding mode and always rounds toward zero.
+  ASSERT_FLOAT_EQ(1.0, trunc(1.5));
+  ASSERT_FLOAT_EQ(-1.0, trunc(-1.5));
+  ASSERT_FLOAT_EQ(0.0, trunc(0.0));
+  ASSERT_FLOAT_EQ(-0.0, trunc(-0.0));
+  ASSERT_TRUE(isnan(trunc(nan(""))));
+  ASSERT_FLOAT_EQ(HUGE_VAL, trunc(HUGE_VAL));
+}
+
+TEST(math, truncf) {
+  fesetround(FE_UPWARD); // truncf ignores the rounding mode and always rounds toward zero.
+  ASSERT_FLOAT_EQ(1.0f, truncf(1.5f));
+  ASSERT_FLOAT_EQ(-1.0f, truncf(-1.5f));
+  ASSERT_FLOAT_EQ(0.0f, truncf(0.0f));
+  ASSERT_FLOAT_EQ(-0.0f, truncf(-0.0f));
+  ASSERT_TRUE(isnan(truncf(nanf(""))));
+  ASSERT_FLOAT_EQ(HUGE_VALF, truncf(HUGE_VALF));
+}
+
+TEST(math, truncl) {
+  fesetround(FE_UPWARD); // truncl ignores the rounding mode and always rounds toward zero.
+  ASSERT_FLOAT_EQ(1.0, truncl(1.5));
+  ASSERT_FLOAT_EQ(-1.0, truncl(-1.5));
+  ASSERT_FLOAT_EQ(0.0, truncl(0.0));
+  ASSERT_FLOAT_EQ(-0.0, truncl(-0.0));
+  ASSERT_TRUE(isnan(truncl(nan(""))));
+  ASSERT_FLOAT_EQ(HUGE_VALL, truncl(HUGE_VALL));
+}
+
+TEST(math, nextafter) {
+  ASSERT_FLOAT_EQ(0.0, nextafter(0.0, 0.0));
+  ASSERT_FLOAT_EQ(1.4012985e-45, nextafter(0.0, 1.0));
+  ASSERT_FLOAT_EQ(0.0, nextafter(0.0, -1.0));
+}
+
+TEST(math, nextafterf) {
+  ASSERT_FLOAT_EQ(0.0f, nextafterf(0.0f, 0.0f));
+  ASSERT_FLOAT_EQ(1.4012985e-45f, nextafterf(0.0f, 1.0f));
+  ASSERT_FLOAT_EQ(0.0f, nextafterf(0.0f, -1.0f));
+}
+
+TEST(math, nextafterl) {
+  ASSERT_FLOAT_EQ(0.0, nextafterl(0.0, 0.0));
+  ASSERT_FLOAT_EQ(1.4012985e-45, nextafterl(0.0, 1.0));
+  ASSERT_FLOAT_EQ(0.0, nextafterl(0.0, -1.0));
+}
+
+// TODO: nexttoward
+// TODO: nexttowardf
+// TODO: nexttowardl
+
+TEST(math, copysign) {
+  ASSERT_FLOAT_EQ(0.0, copysign(0.0, 1.0));
+  ASSERT_FLOAT_EQ(-0.0, copysign(0.0, -1.0));
+  ASSERT_FLOAT_EQ(2.0, copysign(2.0, 1.0));
+  ASSERT_FLOAT_EQ(-2.0, copysign(2.0, -1.0));
+}
+
+TEST(math, copysignf) {
+  ASSERT_FLOAT_EQ(0.0f, copysignf(0.0f, 1.0f));
+  ASSERT_FLOAT_EQ(-0.0f, copysignf(0.0f, -1.0f));
+  ASSERT_FLOAT_EQ(2.0f, copysignf(2.0f, 1.0f));
+  ASSERT_FLOAT_EQ(-2.0f, copysignf(2.0f, -1.0f));
+}
+
+TEST(math, copysignl) {
+  ASSERT_FLOAT_EQ(0.0f, copysignl(0.0, 1.0));
+  ASSERT_FLOAT_EQ(-0.0f, copysignl(0.0, -1.0));
+  ASSERT_FLOAT_EQ(2.0f, copysignl(2.0, 1.0));
+  ASSERT_FLOAT_EQ(-2.0f, copysignl(2.0, -1.0));
+}
+
+TEST(math, significand) {
+  ASSERT_FLOAT_EQ(0.0, significand(0.0));
+  ASSERT_FLOAT_EQ(1.2, significand(1.2));
+  ASSERT_FLOAT_EQ(1.5375, significand(12.3));
+}
+
+TEST(math, significandf) {
+  ASSERT_FLOAT_EQ(0.0f, significandf(0.0f));
+  ASSERT_FLOAT_EQ(1.2f, significandf(1.2f));
+  ASSERT_FLOAT_EQ(1.5375f, significandf(12.3f));
+}
+
+extern "C" long double significandl(long double); // BSD's <math.h> doesn't declare this.
+
+TEST(math, significandl) {
+  ASSERT_FLOAT_EQ(0.0, significandl(0.0));
+  ASSERT_FLOAT_EQ(1.2, significandl(1.2));
+  ASSERT_FLOAT_EQ(1.5375, significandl(12.3));
+}
+
+TEST(math, scalb) {
+  ASSERT_FLOAT_EQ(12.0, scalb(3.0, 2.0));
+}
+
+TEST(math, scalbf) {
+  ASSERT_FLOAT_EQ(12.0f, scalbf(3.0f, 2.0f));
+}
+
+TEST(math, scalbln) {
+  ASSERT_FLOAT_EQ(12.0, scalbln(3.0, 2L));
+}
+
+TEST(math, scalblnf) {
+  ASSERT_FLOAT_EQ(12.0f, scalblnf(3.0f, 2L));
+}
+
+TEST(math, scalblnl) {
+  ASSERT_FLOAT_EQ(12.0, scalblnl(3.0, 2L));
+}
+
+TEST(math, scalbn) {
+  ASSERT_FLOAT_EQ(12.0, scalbn(3.0, 2));
+}
+
+TEST(math, scalbnf) {
+  ASSERT_FLOAT_EQ(12.0f, scalbnf(3.0f, 2));
+}
+
+TEST(math, scalbnl) {
+  ASSERT_FLOAT_EQ(12.0, scalbnl(3.0, 2));
+}
+
+TEST(math, gamma) {
+  ASSERT_FLOAT_EQ(log(24.0), gamma(5.0));
+}
+
+TEST(math, gammaf) {
+  ASSERT_FLOAT_EQ(logf(24.0f), gammaf(5.0f));
+}
+
+#if defined(__BIONIC__)
+TEST(math, gamma_r) {
+  int sign;
+  ASSERT_FLOAT_EQ(log(24.0), gamma_r(5.0, &sign));
+  ASSERT_EQ(1, sign);
+}
+#endif
+
+#if defined(__BIONIC__)
+TEST(math, gammaf_r) {
+  int sign;
+  ASSERT_FLOAT_EQ(logf(24.0f), gammaf_r(5.0f, &sign));
+  ASSERT_EQ(1, sign);
+}
+#endif
+
+TEST(math, lgamma) {
+  ASSERT_FLOAT_EQ(log(24.0), lgamma(5.0));
+}
+
+TEST(math, lgammaf) {
+  ASSERT_FLOAT_EQ(logf(24.0f), lgammaf(5.0f));
+}
+
+TEST(math, lgammal) {
+  ASSERT_FLOAT_EQ(logl(24.0), lgammal(5.0));
+}
+
+TEST(math, lgamma_r) {
+  int sign;
+  ASSERT_FLOAT_EQ(log(24.0), lgamma_r(5.0, &sign));
+  ASSERT_EQ(1, sign);
+}
+
+TEST(math, lgammaf_r) {
+  int sign;
+  ASSERT_FLOAT_EQ(logf(24.0f), lgammaf_r(5.0f, &sign));
+  ASSERT_EQ(1, sign);
+}
+
+TEST(math, tgamma) {
+  ASSERT_FLOAT_EQ(24.0, tgamma(5.0));
+}
+
+TEST(math, tgammaf) {
+  ASSERT_FLOAT_EQ(24.0f, tgammaf(5.0f));
+}
+
+TEST(math, tgammal) {
+  ASSERT_FLOAT_EQ(24.0, tgammal(5.0));
+}
+
+TEST(math, j0) {
+  ASSERT_FLOAT_EQ(1.0, j0(0.0));
+  ASSERT_FLOAT_EQ(0.76519769, j0(1.0));
+}
+
+TEST(math, j0f) {
+  ASSERT_FLOAT_EQ(1.0f, j0f(0.0f));
+  ASSERT_FLOAT_EQ(0.76519769f, j0f(1.0f));
+}
+
+TEST(math, j1) {
+  ASSERT_FLOAT_EQ(0.0, j1(0.0));
+  ASSERT_FLOAT_EQ(0.44005057, j1(1.0));
+}
+
+TEST(math, j1f) {
+  ASSERT_FLOAT_EQ(0.0f, j1f(0.0f));
+  ASSERT_FLOAT_EQ(0.44005057f, j1f(1.0f));
+}
+
+TEST(math, jn) {
+  ASSERT_FLOAT_EQ(0.0, jn(4, 0.0));
+  ASSERT_FLOAT_EQ(0.0024766389, jn(4, 1.0));
+}
+
+TEST(math, jnf) {
+  ASSERT_FLOAT_EQ(0.0f, jnf(4, 0.0f));
+  ASSERT_FLOAT_EQ(0.0024766389f, jnf(4, 1.0f));
+}
+
+TEST(math, y0) {
+  ASSERT_FLOAT_EQ(-HUGE_VAL, y0(0.0));
+  ASSERT_FLOAT_EQ(0.088256963, y0(1.0));
+}
+
+TEST(math, y0f) {
+  ASSERT_FLOAT_EQ(-HUGE_VALF, y0f(0.0f));
+  ASSERT_FLOAT_EQ(0.088256963f, y0f(1.0f));
+}
+
+TEST(math, y1) {
+  ASSERT_FLOAT_EQ(-HUGE_VAL, y1(0.0));
+  ASSERT_FLOAT_EQ(-0.78121281, y1(1.0));
+}
+
+TEST(math, y1f) {
+  ASSERT_FLOAT_EQ(-HUGE_VALF, y1f(0.0f));
+  ASSERT_FLOAT_EQ(-0.78121281f, y1f(1.0f));
+}
+
+TEST(math, yn) {
+  ASSERT_FLOAT_EQ(-HUGE_VAL, yn(4, 0.0));
+  ASSERT_FLOAT_EQ(-33.278423, yn(4, 1.0));
+}
+
+TEST(math, ynf) {
+  ASSERT_FLOAT_EQ(-HUGE_VALF, ynf(4, 0.0f));
+  ASSERT_FLOAT_EQ(-33.278423f, ynf(4, 1.0f));
+}
+
+TEST(math, frexp) {
+  int exp;
+  double dr = frexp(1024.0, &exp);
+  ASSERT_FLOAT_EQ(1024.0, scalbn(dr, exp));
+}
+
+TEST(math, frexpf) {
+  int exp;
+  float fr = frexpf(1024.0f, &exp);
+  ASSERT_FLOAT_EQ(1024.0f, scalbnf(fr, exp));
+}
+
+TEST(math, frexpl) {
+  int exp;
+  long double ldr = frexpl(1024.0, &exp);
+  ASSERT_FLOAT_EQ(1024.0, scalbnl(ldr, exp));
+}
+
+TEST(math, modf) {
+  double di;
+  double df = modf(123.456, &di);
+  ASSERT_FLOAT_EQ(123.0, di);
+  ASSERT_FLOAT_EQ(0.456, df);
+}
+
+TEST(math, modff) {
+  float fi;
+  float ff = modff(123.456f, &fi);
+  ASSERT_FLOAT_EQ(123.0f, fi);
+  ASSERT_FLOAT_EQ(0.45600128f, ff);
+}
+
+TEST(math, modfl) {
+  long double ldi;
+  long double ldf = modfl(123.456, &ldi);
+  ASSERT_FLOAT_EQ(123.0, ldi);
+  ASSERT_FLOAT_EQ(0.456, ldf);
+}
+
+TEST(math, remquo) {
+  int q;
+  double d = remquo(13.0, 4.0, &q);
+  ASSERT_EQ(3, q);
+  ASSERT_FLOAT_EQ(1.0, d);
+}
+
+TEST(math, remquof) {
+  int q;
+  float f = remquof(13.0f, 4.0f, &q);
+  ASSERT_EQ(3, q);
+  ASSERT_FLOAT_EQ(1.0, f);
+}
+
+TEST(math, remquol) {
+  int q;
+  long double ld = remquol(13.0, 4.0, &q);
+  ASSERT_EQ(3, q);
+  ASSERT_FLOAT_EQ(1.0, ld);
+}
+
+// https://code.google.com/p/android/issues/detail?id=6697
+TEST(math, frexpf_public_bug_6697) {
+  int exp;
+  float fr = frexpf(14.1f, &exp);
+  ASSERT_FLOAT_EQ(14.1f, scalbnf(fr, exp));
+}
