annotate tests/test-sqrtl.c @ 40186:8964917f9574

autoupdate
author Karl Berry <karl@freefriends.org>
date Mon, 18 Feb 2019 08:02:49 -0800
parents b06060465f09
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12760
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Test of sqrtl() function.
40057
b06060465f09 maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents: 19484
diff changeset
2 Copyright (C) 2010-2019 Free Software Foundation, Inc.
12760
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4 This program is free software: you can redistribute it and/or modify
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 the Free Software Foundation; either version 3 of the License, or
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
7 (at your option) any later version.
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
19190
9759915b2aca all: prefer https: URLs
Paul Eggert <eggert@cs.ucla.edu>
parents: 18626
diff changeset
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */
12760
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 /* Written by Bruno Haible <bruno@clisp.org>, 2010. */
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 #include <config.h>
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include <math.h>
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23 #include "signature.h"
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 SIGNATURE_CHECK (sqrtl, long double, (long double));
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25
16570
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
26 #include <float.h>
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
27
12760
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28 #include "fpucw.h"
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 #include "macros.h"
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30
16570
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
31 #define DOUBLE long double
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
32 #define L_(literal) literal##L
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
33 #define MANT_DIG DBL_MANT_DIG
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
34 #define SQRT sqrtl
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
35 #define RANDOM randoml
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
36 #include "test-sqrt.h"
12760
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37
16697
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
38 static long double
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
39 my_ldexpl (long double x, int d)
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
40 {
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
41 for (; d > 0; d--)
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
42 x *= 2.0L;
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
43 for (; d < 0; d++)
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
44 x *= 0.5L;
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
45 return x;
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
46 }
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
47
12760
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48 int
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 main ()
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 {
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51 DECL_LONG_DOUBLE_ROUNDING
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 BEGIN_LONG_DOUBLE_ROUNDING ();
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 /* A particular value. */
12776
bebb37f7d22e Tests: Defeat inlining of math functions by GCC >= 4.3.0.
Bruno Haible <bruno@clisp.org>
parents: 12760
diff changeset
56 x = 0.6L;
bebb37f7d22e Tests: Defeat inlining of math functions by GCC >= 4.3.0.
Bruno Haible <bruno@clisp.org>
parents: 12760
diff changeset
57 y = sqrtl (x);
12760
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 ASSERT (y >= 0.7745966692L && y <= 0.7745966693L);
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59
16697
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
60 /* Another particular value. */
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
61 {
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
62 long double z;
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
63 long double err;
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
64
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
65 x = 8.1974099812331540680810141969554806865L;
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
66 y = sqrtl (x);
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
67 z = y * y - x;
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
68 err = my_ldexpl (z, LDBL_MANT_DIG);
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
69 if (err < 0)
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
70 err = - err;
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
71 ASSERT (err <= 100.0L);
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
72 }
6b65a767165c sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC.
Bruno Haible <bruno@clisp.org>
parents: 16570
diff changeset
73
16570
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
74 test_function ();
91377475ee5d sqrt* tests: More tests.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
75
12760
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 return 0;
5d881685b163 Tests for module 'sqrtl'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 }