This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Test sqrt in all rounding modes
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: <libc-alpha at sourceware dot org>
- Date: Wed, 27 Nov 2013 16:53:41 +0000
- Subject: Test sqrt in all rounding modes
- Authentication-results: sourceware.org; auth=none
This patch, relative to a tree with
<https://sourceware.org/ml/libc-alpha/2013-11/msg00809.html> applied,
makes libm-test test sqrt in all rounding modes. (There are only a
couple of tests with inexact results right now, but more will be added
as part of fixing bug 14032.)
Tested x86_64 and x86.
2013-11-27 Joseph Myers <joseph@codesourcery.com>
* math/libm-test.inc (sqrt_tonearest_test_data): New variable.
(sqrt_test_tonearest): New function.
(sqrt_towardzero_test_data): New variable.
(sqrt_test_towardzero): New function.
(sqrt_downward_test_data): New variable.
(sqrt_test_downward): New function.
(sqrt_upward_test_data): New variable.
(sqrt_test_upward): New function.
(main): Call the new functions.
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 017fa63..7c599c1 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -13770,6 +13770,90 @@ sqrt_test (void)
END;
}
+static const struct test_f_f_data sqrt_tonearest_test_data[] =
+ {
+ TEST_f_f (sqrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+ TEST_f_f (sqrt, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
+
+ /* sqrt (x) == qNaN plus invalid exception for x < 0. */
+ TEST_f_f (sqrt, -1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+ TEST_f_f (sqrt, -max_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+ TEST_f_f (sqrt, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+
+ AUTO_TESTS_f_f (sqrt, tonearest),
+ };
+
+static void
+sqrt_test_tonearest (void)
+{
+ START (sqrt_tonearest);
+ RUN_TEST_LOOP_f_f (sqrt, sqrt_tonearest_test_data, FE_TONEAREST);
+ END;
+}
+
+static const struct test_f_f_data sqrt_towardzero_test_data[] =
+ {
+ TEST_f_f (sqrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+ TEST_f_f (sqrt, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
+
+ /* sqrt (x) == qNaN plus invalid exception for x < 0. */
+ TEST_f_f (sqrt, -1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+ TEST_f_f (sqrt, -max_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+ TEST_f_f (sqrt, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+
+ AUTO_TESTS_f_f (sqrt, towardzero),
+ };
+
+static void
+sqrt_test_towardzero (void)
+{
+ START (sqrt_towardzero);
+ RUN_TEST_LOOP_f_f (sqrt, sqrt_towardzero_test_data, FE_TOWARDZERO);
+ END;
+}
+
+static const struct test_f_f_data sqrt_downward_test_data[] =
+ {
+ TEST_f_f (sqrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+ TEST_f_f (sqrt, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
+
+ /* sqrt (x) == qNaN plus invalid exception for x < 0. */
+ TEST_f_f (sqrt, -1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+ TEST_f_f (sqrt, -max_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+ TEST_f_f (sqrt, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+
+ AUTO_TESTS_f_f (sqrt, downward),
+ };
+
+static void
+sqrt_test_downward (void)
+{
+ START (sqrt_downward);
+ RUN_TEST_LOOP_f_f (sqrt, sqrt_downward_test_data, FE_DOWNWARD);
+ END;
+}
+
+static const struct test_f_f_data sqrt_upward_test_data[] =
+ {
+ TEST_f_f (sqrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+ TEST_f_f (sqrt, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
+
+ /* sqrt (x) == qNaN plus invalid exception for x < 0. */
+ TEST_f_f (sqrt, -1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+ TEST_f_f (sqrt, -max_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+ TEST_f_f (sqrt, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
+
+ AUTO_TESTS_f_f (sqrt, upward),
+ };
+
+static void
+sqrt_test_upward (void)
+{
+ START (sqrt_upward);
+ RUN_TEST_LOOP_f_f (sqrt, sqrt_upward_test_data, FE_UPWARD);
+ END;
+}
+
static const struct test_f_f_data tan_test_data[] =
{
@@ -15089,6 +15173,10 @@ main (int argc, char **argv)
pow_test_downward ();
pow_test_upward ();
sqrt_test ();
+ sqrt_test_tonearest ();
+ sqrt_test_towardzero ();
+ sqrt_test_downward ();
+ sqrt_test_upward ();
/* Error and gamma functions: */
erf_test ();
--
Joseph S. Myers
joseph@codesourcery.com