diff options
| author | Joseph Myers <joseph@codesourcery.com> | 2014-03-17 12:29:26 +0000 |
|---|---|---|
| committer | Joseph Myers <joseph@codesourcery.com> | 2014-03-17 12:29:26 +0000 |
| commit | 9962a2d34e2478bd05a8a08e537a1e2b6897adb2 (patch) | |
| tree | 8dc1f8edc5691783e07c99dab8883ca79d6e9054 /math | |
| parent | 5006148ee57c80a787b275c04587678e9fe0a3f3 (diff) | |
| download | glibc-9962a2d34e2478bd05a8a08e537a1e2b6897adb2.tar.xz glibc-9962a2d34e2478bd05a8a08e537a1e2b6897adb2.zip | |
Add libm-test support for per-rounding-mode manually specified results.
This patch continues the libm-test move towards automatic testing of
all test inputs in all rounding modes by adding gen-libm-test.pl
support for tests specifying results in each rounding mode manually.
Previously a TEST_* line could specify arguments and results, or
arguments, results and flags. Now there is the option of (arguments,
results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz,
results-ru, flags-ru). This is used to replace the separate arrays of
results in each rounding mode for lrint, llrint and rint. (In the
case of rint, some tests were only in rint_test_data and needed to
have expectations for non-default rounding modes added, which I did
manually. In various cases there were slight differences in things
such as the ordering of tests in the arrays for each mode.)
Tested x86_64 and x86.
* math/gen-libm-test.pl (parse_args): Handle results specified for
each rounding mode separately.
* math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode
tests and results from lrint_tonearest_test_data,
lrint_towardzero_test_data, lrint_downward_test_data and
lrint_upward_test_data.
(lrint_test): Use ALL_RM_TEST.
(lrint_tonearest_test_data): Remove.
(lrint_test_tonearest): Likewise.
(lrint_towardzero_test_data): Likewise.
(lrint_test_towardzero): Likewise.
(lrint_downward_test_data): Likewise.
(lrint_test_downward): Likewise.
(lrint_upward_test_data): Likewise.
(lrint_test_upward): Likewise.
(llrint_test_data): Merge in per-rounding-mode tests and results
from llrint_tonearest_test_data, llrint_towardzero_test_data,
llrint_downward_test_data and llrint_upward_test_data.
(llrint_test): Use ALL_RM_TEST.
(llrint_tonearest_test_data): Remove.
(llrint_test_tonearest): Likewise.
(llrint_towardzero_test_data): Likewise.
(llrint_test_towardzero): Likewise.
(llrint_downward_test_data): Likewise.
(llrint_test_downward): Likewise.
(llrint_upward_test_data): Likewise.
(llrint_test_upward): Likewise.
(rint_test_data): Merge in per-rounding-mode tests and results
from rint_tonearest_test_data, rint_towardzero_test_data,
rint_downward_test_data and rint_upward_test_data. Add
per-rounding-mode results for tests not in those arrays.
(rint_test): Use ALL_RM_TEST.
(rint_tonearest_test_data): Remove.
(rint_test_tonearest): Likewise.
(rint_towardzero_test_data): Likewise.
(rint_test_towardzero): Likewise.
(rint_downward_test_data): Likewise.
(rint_test_downward): Likewise.
(rint_upward_test_data): Likewise.
(rint_test_upward): Likewise.
(main): Don't call removed functions.
Diffstat (limited to 'math')
| -rwxr-xr-x | math/gen-libm-test.pl | 140 | ||||
| -rw-r--r-- | math/libm-test.inc | 1402 |
2 files changed, 258 insertions, 1284 deletions
diff --git a/math/gen-libm-test.pl b/math/gen-libm-test.pl index 097488c17c..36cc7eb818 100755 --- a/math/gen-libm-test.pl +++ b/math/gen-libm-test.pl @@ -158,6 +158,7 @@ sub parse_args { my (@special); my ($call_args); my ($ignore_result_any, $ignore_result_all); + my ($num_res, @args_res, $start_rm, $this_start_rm); ($descr_args, $descr_res) = split /_/,$descr, 2; @@ -194,32 +195,39 @@ sub parse_args { } # Result + @args_res = @args[$current_arg .. $#args]; + $num_res = 0; @descr = split //,$descr_res; foreach (@descr) { if ($_ =~ /f|i|l|L/) { - ++$current_arg; + ++$num_res; } elsif ($_ eq 'c') { - $current_arg += 2; + $num_res += 2; } elsif ($_ eq 'b') { # boolean - ++$current_arg; + ++$num_res; } elsif ($_ eq '1') { - ++$current_arg; + ++$num_res; } else { die ("$_ is unknown"); } } # consistency check - if ($current_arg == $#args) { + if ($#args_res == $num_res - 1) { + # One set of results for all rounding modes, no flags. + $start_rm = [ 0, 0, 0, 0 ]; + } elsif ($#args_res == $num_res) { + # One set of results for all rounding modes, with flags. die ("wrong number of arguments") - unless ($args[$current_arg] =~ /EXCEPTION|ERRNO|IGNORE_ZERO_INF_SIGN|TEST_NAN_SIGN|NO_TEST_INLINE|XFAIL_TEST/); - } elsif ($current_arg < $#args) { - die ("wrong number of arguments"); - } elsif ($current_arg > ($#args+1)) { + unless ($args_res[$#args_res] =~ /EXCEPTION|ERRNO|IGNORE_ZERO_INF_SIGN|TEST_NAN_SIGN|NO_TEST_INLINE|XFAIL_TEST/); + $start_rm = [ 0, 0, 0, 0 ]; + } elsif ($#args_res == 4 * $num_res + 3) { + # One set of results per rounding mode, with flags. + $start_rm = [ 0, $num_res + 1, 2 * $num_res + 2, 3 * $num_res + 3 ]; + } else { die ("wrong number of arguments"); } - # Put the C program line together # Reset some variables to start again $current_arg = 1; @@ -245,64 +253,68 @@ sub parse_args { } @descr = split //,$descr_res; - $ignore_result_any = 0; - $ignore_result_all = 1; - $cline_res = ""; - foreach (@descr) { - if ($_ =~ /b|f|i|l|L/ ) { - my ($result) = $args[$current_arg]; - if ($result eq "IGNORE") { - $ignore_result_any = 1; - $result = "0"; - } else { - $ignore_result_all = 0; - } - $cline_res .= ", $result"; - $current_arg++; - } elsif ($_ eq 'c') { - my ($result1) = $args[$current_arg]; - if ($result1 eq "IGNORE") { - $ignore_result_any = 1; - $result1 = "0"; - } else { - $ignore_result_all = 0; - } - my ($result2) = $args[$current_arg + 1]; - if ($result2 eq "IGNORE") { - $ignore_result_any = 1; - $result2 = "0"; - } else { - $ignore_result_all = 0; + foreach $this_start_rm (@$start_rm) { + $current_arg = $this_start_rm; + $ignore_result_any = 0; + $ignore_result_all = 1; + $cline_res = ""; + @special = (); + foreach (@descr) { + if ($_ =~ /b|f|i|l|L/ ) { + my ($result) = $args_res[$current_arg]; + if ($result eq "IGNORE") { + $ignore_result_any = 1; + $result = "0"; + } else { + $ignore_result_all = 0; + } + $cline_res .= ", $result"; + $current_arg++; + } elsif ($_ eq 'c') { + my ($result1) = $args_res[$current_arg]; + if ($result1 eq "IGNORE") { + $ignore_result_any = 1; + $result1 = "0"; + } else { + $ignore_result_all = 0; + } + my ($result2) = $args_res[$current_arg + 1]; + if ($result2 eq "IGNORE") { + $ignore_result_any = 1; + $result2 = "0"; + } else { + $ignore_result_all = 0; + } + $cline_res .= ", $result1, $result2"; + $current_arg += 2; + } elsif ($_ eq '1') { + push @special, $args_res[$current_arg]; + ++$current_arg; } - $cline_res .= ", $result1, $result2"; - $current_arg += 2; - } elsif ($_ eq '1') { - push @special, $args[$current_arg]; - ++$current_arg; } - } - if ($ignore_result_any && !$ignore_result_all) { - die ("some but not all function results ignored\n"); - } - # Add exceptions. - $cline_res .= show_exceptions ($ignore_result_any, - ($current_arg <= $#args) - ? $args[$current_arg] - : undef); - - # special treatment for some functions - $i = 0; - foreach (@special) { - ++$i; - my ($extra_expected) = $_; - my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0); - if (!$run_extra) { - $extra_expected = "0"; + if ($ignore_result_any && !$ignore_result_all) { + die ("some but not all function results ignored\n"); + } + # Add exceptions. + $cline_res .= show_exceptions ($ignore_result_any, + ($current_arg <= $#args_res) + ? $args_res[$current_arg] + : undef); + + # special treatment for some functions + $i = 0; + foreach (@special) { + ++$i; + my ($extra_expected) = $_; + my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0); + if (!$run_extra) { + $extra_expected = "0"; + } + $cline_res .= ", $run_extra, $extra_expected"; } - $cline_res .= ", $run_extra, $extra_expected"; + $cline_res =~ s/^, //; + $cline .= ", { $cline_res }"; } - $cline_res =~ s/^, //; - $cline .= ", { $cline_res }, { $cline_res }, { $cline_res }, { $cline_res }"; print $file " $cline },\n"; } diff --git a/math/libm-test.inc b/math/libm-test.inc index 2c0130b6d5..2a458168c8 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -8229,28 +8229,29 @@ gamma_test (void) static const struct test_f_l_data lrint_test_data[] = { - /* 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. */ TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION), TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION), TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION), TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION), TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.2L, 0, INEXACT_EXCEPTION), + TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION), + TEST_f_l (lrint, -0.2L, -1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION), + TEST_f_l (lrint, 0.5L, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION), + TEST_f_l (lrint, -0.5L, -1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION), + TEST_f_l (lrint, 0.8L, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION), + TEST_f_l (lrint, -0.8L, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, 1.4L, 1, INEXACT_EXCEPTION), - TEST_f_l (lrint, -1.4L, -1, INEXACT_EXCEPTION), + TEST_f_l (lrint, 1.4L, 1, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 2, INEXACT_EXCEPTION), + TEST_f_l (lrint, -1.4L, -2, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION), - TEST_f_l (lrint, 8388600.3L, 8388600, INEXACT_EXCEPTION), - TEST_f_l (lrint, -8388600.3L, -8388600, INEXACT_EXCEPTION), + TEST_f_l (lrint, 8388600.3L, 8388600, INEXACT_EXCEPTION, 8388600, INEXACT_EXCEPTION, 8388600, INEXACT_EXCEPTION, 8388601, INEXACT_EXCEPTION), + TEST_f_l (lrint, -8388600.3L, -8388601, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION), #ifndef TEST_FLOAT - TEST_f_l (lrint, 1071930.0008, 1071930, INEXACT_EXCEPTION), - TEST_f_l (lrint, 1073741824.01, 1073741824, INEXACT_EXCEPTION), + TEST_f_l (lrint, 1071930.0008, 1071930, INEXACT_EXCEPTION, 1071930, INEXACT_EXCEPTION, 1071930, INEXACT_EXCEPTION, 1071931, INEXACT_EXCEPTION), + TEST_f_l (lrint, 1073741824.01, 1073741824, INEXACT_EXCEPTION, 1073741824, INEXACT_EXCEPTION, 1073741824, INEXACT_EXCEPTION, 1073741825, INEXACT_EXCEPTION), # if LONG_MAX > 281474976710656 && defined TEST_LDOUBLE - TEST_f_l (lrint, 281474976710656.025L, 281474976710656, INEXACT_EXCEPTION), + TEST_f_l (lrint, 281474976710656.025L, 281474976710656, INEXACT_EXCEPTION, 281474976710656, INEXACT_EXCEPTION, 281474976710656, INEXACT_EXCEPTION, 281474976710657, INEXACT_EXCEPTION), # endif #endif }; @@ -8258,185 +8259,28 @@ static const struct test_f_l_data lrint_test_data[] = static void lrint_test (void) { - START (lrint, 1); - RUN_TEST_LOOP_f_l (lrint, lrint_test_data, ); - END; -} - - -static const struct test_f_l_data lrint_tonearest_test_data[] = - { - TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.2L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.5L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.5L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.8L, 1, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.8L, -1, INEXACT_EXCEPTION), - - TEST_f_l (lrint, 1.4L, 1, INEXACT_EXCEPTION), - TEST_f_l (lrint, -1.4L, -1, INEXACT_EXCEPTION), - - TEST_f_l (lrint, 8388600.3L, 8388600, INEXACT_EXCEPTION), - TEST_f_l (lrint, -8388600.3L, -8388600, INEXACT_EXCEPTION), - -#ifndef TEST_FLOAT - TEST_f_l (lrint, 1071930.0008, 1071930, INEXACT_EXCEPTION), - TEST_f_l (lrint, 1073741824.01, 1073741824, INEXACT_EXCEPTION), -# if LONG_MAX > 281474976710656 && defined TEST_LDOUBLE - TEST_f_l (lrint, 281474976710656.025L, 281474976710656, INEXACT_EXCEPTION), -# endif -#endif - }; - -static void -lrint_test_tonearest (void) -{ - START (lrint_tonearest, 1); - RUN_TEST_LOOP_f_l (lrint, lrint_tonearest_test_data, FE_TONEAREST); - END; -} - - -static const struct test_f_l_data lrint_towardzero_test_data[] = - { - TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.2L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.5L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.5L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.8L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.8L, 0, INEXACT_EXCEPTION), - - TEST_f_l (lrint, 1.4L, 1, INEXACT_EXCEPTION), - TEST_f_l (lrint, -1.4L, -1, INEXACT_EXCEPTION), - - TEST_f_l (lrint, 8388600.3L, 8388600, INEXACT_EXCEPTION), - TEST_f_l (lrint, -8388600.3L, -8388600, INEXACT_EXCEPTION), - -#ifndef TEST_FLOAT - TEST_f_l (lrint, 1071930.0008, 1071930, INEXACT_EXCEPTION), - TEST_f_l (lrint, 1073741824.01, 1073741824, INEXACT_EXCEPTION), -# if LONG_MAX > 281474976710656 && defined TEST_LDOUBLE - TEST_f_l (lrint, 281474976710656.025L, 281474976710656, INEXACT_EXCEPTION), -# endif -#endif - }; - -static void -lrint_test_towardzero (void) -{ - START (lrint_towardzero, 1); - RUN_TEST_LOOP_f_l (lrint, lrint_towardzero_test_data, FE_TOWARDZERO); - END; -} - - -static const struct test_f_l_data lrint_downward_test_data[] = - { - TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.2L, -1, INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.5L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.5L, -1, INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.8L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.8L, -1, INEXACT_EXCEPTION), - - TEST_f_l (lrint, 1.4L, 1, INEXACT_EXCEPTION), - TEST_f_l (lrint, -1.4L, -2, INEXACT_EXCEPTION), - - TEST_f_l (lrint, 8388600.3L, 8388600, INEXACT_EXCEPTION), - TEST_f_l (lrint, -8388600.3L, -8388601, INEXACT_EXCEPTION), - -#ifndef TEST_FLOAT - TEST_f_l (lrint, 1071930.0008, 1071930, INEXACT_EXCEPTION), - TEST_f_l (lrint, 1073741824.01, 1073741824, INEXACT_EXCEPTION), -# if LONG_MAX > 281474976710656 && defined TEST_LDOUBLE - TEST_f_l (lrint, 281474976710656.025L, 281474976710656, INEXACT_EXCEPTION), -# endif -#endif - }; - -static void -lrint_test_downward (void) -{ - START (lrint_downward, 1); - RUN_TEST_LOOP_f_l (lrint, lrint_downward_test_data, FE_DOWNWARD); - END; -} - - -static const struct test_f_l_data lrint_upward_test_data[] = - { - TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION), - TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.2L, 1, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.2L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.5L, 1, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.5L, 0, INEXACT_EXCEPTION), - TEST_f_l (lrint, 0.8L, 1, INEXACT_EXCEPTION), - TEST_f_l (lrint, -0.8L, 0, INEXACT_EXCEPTION), - - TEST_f_l (lrint, 1.4L, 2, INEXACT_EXCEPTION), - TEST_f_l (lrint, -1.4L, -1, INEXACT_EXCEPTION), - - TEST_f_l (lrint, 8388600.3L, 8388601, INEXACT_EXCEPTION), - TEST_f_l (lrint, -8388600.3L, -8388600, INEXACT_EXCEPTION), - -#ifndef TEST_FLOAT - TEST_f_l (lrint, 1071930.0008, 1071931, INEXACT_EXCEPTION), - TEST_f_l (lrint, 1073741824.01, 1073741825, INEXACT_EXCEPTION), -# if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE) - TEST_f_l (lrint, 281474976710656.025L, 281474976710657, INEXACT_EXCEPTION), -# endif -#endif - }; - -static void -lrint_test_upward (void) -{ - START (lrint_upward, 1); - RUN_TEST_LOOP_f_l (lrint, lrint_upward_test_data, FE_UPWARD); - END; + ALL_RM_TEST (lrint, 1, lrint_test_data, RUN_TEST_LOOP_f_l, END); } static const struct test_f_L_data llrint_test_data[] = { - /* 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. */ TEST_f_L (llrint, plus_infty, IGNORE, INVALID_EXCEPTION), TEST_f_L (llrint, minus_infty, IGNORE, INVALID_EXCEPTION), TEST_f_L (llrint, qnan_value, IGNORE, INVALID_EXCEPTION), TEST_f_L (llrint, 0.0, 0, NO_INEXACT_EXCEPTION), TEST_f_L (llrint, minus_zero, 0, NO_INEXACT_EXCEPTION), - TEST_f_L (llrint, 0.2L, 0, INEXACT_EXCEPTION), - TEST_f_L (llrint, -0.2L, 0, INEXACT_EXCEPTION), + TEST_f_L (llrint, 0.2L, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION), + TEST_f_L (llrint, -0.2L, -1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION), - TEST_f_L (llrint, 1.4L, 1, INEXACT_EXCEPTION), - TEST_f_L (llrint, -1.4L, -1, INEXACT_EXCEPTION), + TEST_f_L (llrint, 1.4L, 1, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 2, INEXACT_EXCEPTION), + TEST_f_L (llrint, -1.4L, -2, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION), - TEST_f_L (llrint, 8388600.3L, 8388600, INEXACT_EXCEPTION), - TEST_f_L (llrint, -8388600.3L, -8388600, INEXACT_EXCEPTION), + TEST_f_L (llrint, 8388600.3L, 8388600, INEXACT_EXCEPTION, 8388600, INEXACT_EXCEPTION, 8388600, INEXACT_EXCEPTION, 8388601, INEXACT_EXCEPTION), + TEST_f_L (llrint, -8388600.3L, -8388601, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION), #ifndef TEST_FLOAT - TEST_f_L (llrint, 1071930.0008, 1071930, INEXACT_EXCEPTION), + TEST_f_L (llrint, 1071930.0008, 1071930, INEXACT_EXCEPTION, 1071930, INEXACT_EXCEPTION, 1071930, INEXACT_EXCEPTION, 1071931, INEXACT_EXCEPTION), #endif /* Test boundary conditions. */ @@ -8464,361 +8308,85 @@ static const struct test_f_L_data llrint_test_data[] = TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL, NO_INEXACT_EXCEPTION), #ifdef TEST_LDOUBLE /* The input can only be represented in long double. */ - TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL, INEXACT_EXCEPTION), - - TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL, INEXACT_EXCEPTION), - -# if LDBL_MANT_DIG > 100 - TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL, INEXACT_EXCEPTION), - - TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL, INEXACT_EXCEPTION), -#endif - - TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL, INEXACT_EXCEPTION), - - TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370498LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370498LL, INEXACT_EXCEPTION), + + TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION), + TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL, INEXACT_EXCEPTION, -4503599627370498LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION), # if LDBL_MANT_DIG > 100 - TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL, INEXACT_EXCEPTION), - - TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL, INEXACT_EXCEPTION), -#endif - - TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL, INEXACT_EXCEPTION), - - TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL, INEXACT_EXCEPTION), - -# if LDBL_MANT_DIG > 100 - TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL, NO_INEXACT_EXCEPTION), - TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL, NO_INEXACT_EXCEPTION), - TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL, INEXACT_EXCEPTION), - TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL, INEXACT_EXCEPTION |
