diff options
| author | Joseph Myers <joseph@codesourcery.com> | 2013-05-16 13:16:56 +0000 |
|---|---|---|
| committer | Joseph Myers <joseph@codesourcery.com> | 2013-05-16 13:16:56 +0000 |
| commit | 15c7c18dc6775f6eea09f927fa0b327ab32ef738 (patch) | |
| tree | 14a37f8315f820218e44cc2d9124bddc82005e1f /math | |
| parent | f137ff13835e2ac6f0d85f37b7ff32d134c9de18 (diff) | |
| download | glibc-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.inc | 1549 |
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 |
