aboutsummaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-03-17 12:29:26 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-03-17 12:29:26 +0000
commit9962a2d34e2478bd05a8a08e537a1e2b6897adb2 (patch)
tree8dc1f8edc5691783e07c99dab8883ca79d6e9054 /math
parent5006148ee57c80a787b275c04587678e9fe0a3f3 (diff)
downloadglibc-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-xmath/gen-libm-test.pl140
-rw-r--r--math/libm-test.inc1402
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