comparison tests/test-frexp.c @ 13834:108bbfd6f03b

frexp, tests: work around ICC bug with -zero * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Compute -0.0 in a way that works with more compilers. * tests/minus-zero.h: New file. * modules/ceilf-tests (Files): Include it. * modules/ceill-tests (Files): Likewise. * modules/floorf-tests (Files): Likewise. * modules/floorl-tests (Files): Likewise. * modules/frexp-nolibm-tests (Files): Likewise. * modules/frexp-tests (Files): Likewise. * modules/frexpl-nolibm-tests (Files): Likewise. * modules/frexpl-tests (Files): Likewise. * modules/isnan-tests (Files): Likewise. * modules/isnand-nolibm-tests (Files): Likewise. * modules/isnand-tests (Files): Likewise. * modules/isnanf-nolibm-tests (Files): Likewise. * modules/isnanf-tests (Files): Likewise. * modules/isnanl-nolibm-tests (Files): Likewise. * modules/isnanl-tests (Files): Likewise. * modules/round-tests (Files): Likewise. * modules/roundf-tests (Files): Likewise. * modules/roundl-tests (Files): Likewise. * modules/ldexpl-tests (Files): Likewise. * modules/signbit-tests (Files): Likewise. * modules/snprintf-posix-tests (Files): Likewise. * modules/sprintf-posix-tests (Files): Likewise. * modules/strtod-tests (Files): Likewise. * modules/trunc-tests (Files): Likewise. * modules/truncf-tests (Files): Likewise. * modules/truncl-tests (Files): Likewise. * modules/vsnprintf-posix-tests (Files): Likewise. * modules/vsprintf-posix-tests (Files): Likewise. * modules/vasnprintf-posix-tests (Files): Likewise. * modules/vasprintf-posix-tests (Files): Likewise. * tests/test-ceilf1.c (main): Use it. * tests/test-ceill.c (main): Likewise. * tests/test-floorf1.c (main): Likewise. * tests/test-floorl.c (main): Likewise. * tests/test-frexp.c (main): Likewise. * tests/test-frexpl.c (main): Likewise. * tests/test-isnan.c (main): Likewise. * tests/test-isnand.h (main): Likewise. * tests/test-isnanf.h (main): Likewise. * tests/test-isnanl.h (main): Likewise. * tests/test-ldexpl.c (main): Likewise. * tests/test-round.c (main): Likewise. * tests/test-roundf.c (main): Likewise. * tests/test-roundl.c (main): Likewise. * tests/test-signbit.c (test_signbitf, test_signbitd) (test_signbitl): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-strtod.c (main): Likewise. * tests/test-trunc1.c (main): Likewise. * tests/test-truncf1.c (main): Likewise. * tests/test-truncl.c (main): Likewise. Signed-off-by: Eric Blake <eblake@redhat.com>
author Eric Blake <eblake@redhat.com>
date Thu, 04 Nov 2010 12:29:27 -0600
parents c2cbabec01dd
children 97fc9a21a8fb
comparison
equal deleted inserted replaced
13833:c58f1396894e 13834:108bbfd6f03b
24 SIGNATURE_CHECK (frexp, double, (double, int *)); 24 SIGNATURE_CHECK (frexp, double, (double, int *));
25 25
26 #include <float.h> 26 #include <float.h>
27 27
28 #include "isnand-nolibm.h" 28 #include "isnand-nolibm.h"
29 #include "minus-zero.h"
29 #include "nan.h" 30 #include "nan.h"
30 #include "macros.h" 31 #include "macros.h"
31 32
32 /* Avoid some warnings from "gcc -Wshadow". 33 /* Avoid some warnings from "gcc -Wshadow".
33 This file doesn't use the exp() function. */ 34 This file doesn't use the exp() function. */
34 #undef exp 35 #undef exp
35 #define exp exponent 36 #define exp exponent
36
37 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
38 So we use -zero instead. */
39 double zero = 0.0;
40 37
41 static double 38 static double
42 my_ldexp (double x, int d) 39 my_ldexp (double x, int d)
43 { 40 {
44 for (; d > 0; d--) 41 for (; d > 0; d--)
94 } 91 }
95 92
96 { /* Negative zero. */ 93 { /* Negative zero. */
97 int exp = -9999; 94 int exp = -9999;
98 double mantissa; 95 double mantissa;
99 x = -zero; 96 x = minus_zerod;
100 mantissa = frexp (x, &exp); 97 mantissa = frexp (x, &exp);
101 ASSERT (exp == 0); 98 ASSERT (exp == 0);
102 ASSERT (mantissa == x); 99 ASSERT (mantissa == x);
103 ASSERT (signbit (mantissa)); 100 ASSERT (signbit (mantissa));
104 } 101 }