aboutsummaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2013-05-16 13:16:56 +0000
committerJoseph Myers <joseph@codesourcery.com>2013-05-16 13:16:56 +0000
commit15c7c18dc6775f6eea09f927fa0b327ab32ef738 (patch)
tree14a37f8315f820218e44cc2d9124bddc82005e1f /math
parentf137ff13835e2ac6f0d85f37b7ff32d134c9de18 (diff)
downloadglibc-15c7c18dc6775f6eea09f927fa0b327ab32ef738.tar.xz
glibc-15c7c18dc6775f6eea09f927fa0b327ab32ef738.zip
Convert TEST_f_L tests from code to data.
Diffstat (limited to 'math')
-rw-r--r--math/libm-test.inc1549
1 files changed, 780 insertions, 769 deletions
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 0843482d8d..10378de7aa 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -1009,6 +1009,14 @@ struct test_f_l_data
long int max_ulp;
int exceptions;
};
+struct test_f_L_data
+{
+ const char *test_name;
+ FLOAT arg;
+ long long int expected;
+ long long int max_ulp;
+ int exceptions;
+};
/* Set the rounding mode, or restore the saved value. */
#define IF_ROUND_INIT_ /* Empty. */
@@ -1281,6 +1289,13 @@ struct test_f_l_data
MAX_ULP, EXCEPTIONS) \
check_longlong (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED, \
MAX_ULP, EXCEPTIONS)
+#define RUN_TEST_LOOP_f_L(FUNC_NAME, ARRAY, ROUNDING_MODE) \
+ IF_ROUND_INIT_ ## ROUNDING_MODE \
+ for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
+ RUN_TEST_f_L ((ARRAY)[i].test_name, FUNC_NAME, (ARRAY)[i].arg, \
+ (ARRAY)[i].expected, (ARRAY)[i].max_ulp, \
+ (ARRAY)[i].exceptions); \
+ ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_sincos(ARG, TEST_NAME_SIN, SIN_RES_VAR, EXPECTED_SIN, \
MAX_ULP_SIN, TEST_NAME_COS, COS_RES_VAR, \
EXPECTED_COS, MAX_ULP_COS, EXCEPTIONS) \
@@ -10546,682 +10561,674 @@ lrint_test_upward (void)
}
+static const struct test_f_L_data llrint_test_data[] =
+ {
+ START_DATA (llrint),
+ /* XXX this test is incomplete. We need to have a way to specifiy
+ the rounding method and test the critical cases. So far, only
+ unproblematic numbers are tested. */
+ /* TODO: missing +/-Inf as well as qNaN tests. */
+ TEST_f_L (llrint, 0.0, 0),
+ TEST_f_L (llrint, minus_zero, 0),
+ TEST_f_L (llrint, 0.2L, 0),
+ TEST_f_L (llrint, -0.2L, 0),
+
+ TEST_f_L (llrint, 1.4L, 1),
+ TEST_f_L (llrint, -1.4L, -1),
+
+ TEST_f_L (llrint, 8388600.3L, 8388600),
+ TEST_f_L (llrint, -8388600.3L, -8388600),
+
+ TEST_f_L (llrint, 1071930.0008, 1071930),
+
+ /* Test boundary conditions. */
+ /* 0x1FFFFF */
+ TEST_f_L (llrint, 2097151.0,2097151LL),
+ /* 0x800000 */
+ TEST_f_L (llrint, 8388608.0, 8388608LL),
+ /* 0x1000000 */
+ TEST_f_L (llrint, 16777216.0, 16777216LL),
+ /* 0x20000000000 */
+ TEST_f_L (llrint, 2199023255552.0, 2199023255552LL),
+ /* 0x40000000000 */
+ TEST_f_L (llrint, 4398046511104.0, 4398046511104LL),
+ /* 0x1000000000000 */
+ TEST_f_L (llrint, 281474976710656.0, 281474976710656LL),
+ /* 0x10000000000000 */
+ TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL),
+ /* 0x10000080000000 */
+ TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL),
+ /* 0x20000000000000 */
+ TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL),
+ /* 0x80000000000000 */
+ TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL),
+ /* 0x100000000000000 */
+ TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL),
+#ifdef TEST_LDOUBLE
+ /* The input can only be represented in long double. */
+ TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL),
+ TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL),
+
+ TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL),
+ TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL),
+
+# if LDBL_MANT_DIG > 100
+ TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL),
+ TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL),
+ TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL),
+ TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL),
+
+ TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL),
+ TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL),
+ TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL),
+ TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL),
+#endif
+
+ TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL),
+ TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL),
+
+ TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL),
+ TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL),
+
+# if LDBL_MANT_DIG > 100
+ TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL),
+ TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL),
+ TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL),
+ TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL),
+
+ TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL),
+ TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL),
+ TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL),
+ TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL),
+#endif
+
+ TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL),
+ TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL),
+ TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL),
+ TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL),
+ TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL),
+
+ TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL),
+ TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL),
+ TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL),
+ TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL),
+ TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL),
+
+# if LDBL_MANT_DIG > 100
+ TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL),
+ TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL),
+ TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL),
+ TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL),
+ TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL),
+ TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL),
+ TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L),
+ TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL),
+ TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL),
+ TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL),
+ TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL),
+ TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL),
+# endif
+#endif
+ END_DATA (llrint)
+ };
+
static void
llrint_test (void)
{
- /* XXX this test is incomplete. We need to have a way to specifiy
- the rounding method and test the critical cases. So far, only
- unproblematic numbers are tested. */
- /* TODO: missing +/-Inf as well as qNaN tests. */
-
START (llrint);
+ RUN_TEST_LOOP_f_L (llrint, llrint_test_data, );
+ END (llrint);
+}
- TEST_f_L (llrint, 0.0, 0);
- TEST_f_L (llrint, minus_zero, 0);
- TEST_f_L (llrint, 0.2L, 0);
- TEST_f_L (llrint, -0.2L, 0);
-
- TEST_f_L (llrint, 1.4L, 1);
- TEST_f_L (llrint, -1.4L, -1);
-
- TEST_f_L (llrint, 8388600.3L, 8388600);
- TEST_f_L (llrint, -8388600.3L, -8388600);
-
- TEST_f_L (llrint, 1071930.0008, 1071930);
-
- /* Test boundary conditions. */
- /* 0x1FFFFF */
- TEST_f_L (llrint, 2097151.0,2097151LL);
- /* 0x800000 */
- TEST_f_L (llrint, 8388608.0, 8388608LL);
- /* 0x1000000 */
- TEST_f_L (llrint, 16777216.0, 16777216LL);
- /* 0x20000000000 */
- TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
- /* 0x40000000000 */
- TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
- /* 0x1000000000000 */
- TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
- /* 0x10000000000000 */
- TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
- /* 0x10000080000000 */
- TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
- /* 0x20000000000000 */
- TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
- /* 0x80000000000000 */
- TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
- /* 0x100000000000000 */
- TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
+static const struct test_f_L_data llrint_tonearest_test_data[] =
+ {
+ START_DATA (llrint_tonearest),
+ TEST_f_L (llrint, 0.0, 0),
+ TEST_f_L (llrint, minus_zero, 0),
+ TEST_f_L (llrint, 0.2L, 0),
+ TEST_f_L (llrint, -0.2L, 0),
+
+ TEST_f_L (llrint, 1.4L, 1),
+ TEST_f_L (llrint, -1.4L, -1),
+
+ TEST_f_L (llrint, 8388600.3L, 8388600),
+ TEST_f_L (llrint, -8388600.3L, -8388600),
+
+ TEST_f_L (llrint, 1071930.0008, 1071930),
+
+ /* Test boundary conditions. */
+ /* 0x1FFFFF */
+ TEST_f_L (llrint, 2097151.0,2097151LL),
+ /* 0x800000 */
+ TEST_f_L (llrint, 8388608.0, 8388608LL),
+ /* 0x1000000 */
+ TEST_f_L (llrint, 16777216.0, 16777216LL),
+ /* 0x20000000000 */
+ TEST_f_L (llrint, 2199023255552.0, 2199023255552LL),
+ /* 0x40000000000 */
+ TEST_f_L (llrint, 4398046511104.0, 4398046511104LL),
+ /* 0x1000000000000 */
+ TEST_f_L (llrint, 281474976710656.0, 281474976710656LL),
+ /* 0x10000000000000 */
+ TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL),
+ /* 0x10000080000000 */
+ TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL),
+ /* 0x20000000000000 */
+ TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL),
+ /* 0x80000000000000 */
+ TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL),
+ /* 0x100000000000000 */
+ TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL),
#ifdef TEST_LDOUBLE
- /* The input can only be represented in long double. */
- TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
- TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
-
- TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
- TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
+ /* The input can only be represented in long double. */
+ TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL),
+ TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL),
+
+ TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL),
+ TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL),
# if LDBL_MANT_DIG > 100
- TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
- TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
- TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
- TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
-
- TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
- TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
- TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
- TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
-#endif
-
- TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
- TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
- TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
- TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
- TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
-
- TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
- TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
- TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
- TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
- TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
+ TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL),
+ TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL),
+ TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL),
+ TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL),
+
+ TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL),
+ TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL),
+ TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL),
+ TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL),
+#endif
+
+ TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL),
+ TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL),
+
+ TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL),
+ TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL),
# if LDBL_MANT_DIG > 100
- TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
- TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
- TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
- TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
- TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
- TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
-
- TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
- TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
- TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
- TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
- TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
- TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
-#endif
-
- TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
- TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
- TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
- TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
- TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
-
- TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
- TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
- TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
- TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
- TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
+ TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL),
+ TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL),
+ TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL),
+ TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL),
+ TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL),
+
+ TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL),
+ TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL),
+ TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL),
+ TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL),
+ TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL),
+#endif
+
+ TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL),
+ TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL),
+ TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL),
+ TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL),
+ TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL),
+
+ TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL),
+ TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL),
+ TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL),
+ TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL),
+ TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL),
# if LDBL_MANT_DIG > 100
- TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
- TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
- TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
- TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
- TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
- TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
- TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
- TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
- TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
- TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
- TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
- TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
+ TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL),
+ TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL),
+ TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL),
+ TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL),
+ TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL),
+ TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL),
+ TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L),
+ TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL),
+ TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL),
+ TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL),
+ TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL),
+ TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL),
# endif
#endif
-
- END (llrint);
-}
+ END_DATA (llrint_tonearest)
+ };
static void
llrint_test_tonearest (void)
{
- int save_round_mode;
START (llrint_tonearest);
+ RUN_TEST_LOOP_f_L (llrint, llrint_tonearest_test_data, FE_TONEAREST);
+ END (llrint_tonearest);
+}
- save_round_mode = fegetround ();
-
- if (!fesetround (FE_TONEAREST))
- {
- TEST_f_L (llrint, 0.0, 0);
- TEST_f_L (llrint, minus_zero, 0);
- TEST_f_L (llrint, 0.2L, 0);
- TEST_f_L (llrint, -0.2L, 0);
-
- TEST_f_L (llrint, 1.4L, 1);
- TEST_f_L (llrint, -1.4L, -1);
-
- TEST_f_L (llrint, 8388600.3L, 8388600);
- TEST_f_L (llrint, -8388600.3L, -8388600);
-
- TEST_f_L (llrint, 1071930.0008, 1071930);
-
- /* Test boundary conditions. */
- /* 0x1FFFFF */
- TEST_f_L (llrint, 2097151.0,2097151LL);
- /* 0x800000 */
- TEST_f_L (llrint, 8388608.0, 8388608LL);
- /* 0x1000000 */
- TEST_f_L (llrint, 16777216.0, 16777216LL);
- /* 0x20000000000 */
- TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
- /* 0x40000000000 */
- TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
- /* 0x1000000000000 */
- TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
- /* 0x10000000000000 */
- TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
- /* 0x10000080000000 */
- TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
- /* 0x20000000000000 */
- TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
- /* 0x80000000000000 */
- TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
- /* 0x100000000000000 */
- TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
+static const struct test_f_L_data llrint_towardzero_test_data[] =
+ {
+ START_DATA (llrint_towardzero),
+ TEST_f_L (llrint, 0.0, 0),
+ TEST_f_L (llrint, minus_zero, 0),
+ TEST_f_L (llrint, 0.2L, 0),
+ TEST_f_L (llrint, -0.2L, 0),
+
+ TEST_f_L (llrint, 1.4L, 1),
+ TEST_f_L (llrint, -1.4L, -1),
+
+ TEST_f_L (llrint, 8388600.3L, 8388600),
+ TEST_f_L (llrint, -8388600.3L, -8388600),
+
+ TEST_f_L (llrint, 1071930.0008, 1071930),
+
+ /* Test boundary conditions. */
+ /* 0x1FFFFF */
+ TEST_f_L (llrint, 2097151.0,2097151LL),
+ /* 0x800000 */
+ TEST_f_L (llrint, 8388608.0, 8388608LL),
+ /* 0x1000000 */
+ TEST_f_L (llrint, 16777216.0, 16777216LL),
+ /* 0x20000000000 */
+ TEST_f_L (llrint, 2199023255552.0, 2199023255552LL),
+ /* 0x40000000000 */
+ TEST_f_L (llrint, 4398046511104.0, 4398046511104LL),
+ /* 0x1000000000000 */
+ TEST_f_L (llrint, 281474976710656.0, 281474976710656LL),
+ /* 0x10000000000000 */
+ TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL),
+ /* 0x10000080000000 */
+ TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL),
+ /* 0x20000000000000 */
+ TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL),
+ /* 0x80000000000000 */
+ TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL),
+ /* 0x100000000000000 */
+ TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL),
#ifdef TEST_LDOUBLE
- /* The input can only be represented in long double. */
- TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
- TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
-
- TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
- TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
+ /* The input can only be represented in long double. */
+ TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL),
+ TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL),
+ TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL),
+
+ TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL),
+ TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL),
+ TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL),
# if LDBL_MANT_DIG > 100
- TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
- TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
- TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
- TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
- TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
-
- TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
- TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
- TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
- TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
- TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
-#endif
-
- TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
- TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
- TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
- TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
- TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
-
- TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
- TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
- TEST_f_L (llrint, -900719925