1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00
This commit is contained in:
Jakub Jelinek
2007-07-12 18:26:36 +00:00
parent 7d58530341
commit 0ecb606cb6
6215 changed files with 494638 additions and 305010 deletions

View File

@ -1,5 +1,5 @@
/* Miscellaneous tests which don't fit anywhere else.
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
Copyright (C) 2000, 2001, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -44,7 +44,6 @@ main (void)
}
}
# if __GNUC__ >= 3 || __GNUC_MINOR__ >= 96
{
long double x;
long double m;
@ -52,17 +51,17 @@ main (void)
int e;
int i;
# if LDBL_MANT_DIG == 64
# if LDBL_MANT_DIG == 64
m = 0xf.fffffffffffffffp-4L;
# elif LDBL_MANT_DIG == 106
# elif LDBL_MANT_DIG == 106
/* This has to match the mantissa of LDBL_MAX which actually does have a
missing bit in the middle. */
m = 0x1.fffffffffffff7ffffffffffff8p-1L;
# elif LDBL_MANT_DIG == 113
# elif LDBL_MANT_DIG == 113
m = 0x1.ffffffffffffffffffffffffffffp-1L;
# else
# error "Please adjust"
# endif
# else
# error "Please adjust"
# endif
for (i = LDBL_MAX_EXP, x = LDBL_MAX; i >= LDBL_MIN_EXP; --i, x /= 2.0L)
{
@ -106,9 +105,8 @@ main (void)
}
}
# endif
#if 0
# if 0
{
int e;
long double r = frexpl (LDBL_MIN * LDBL_EPSILON, &e);
@ -126,7 +124,7 @@ main (void)
result = 1;
}
}
#endif
# endif
#endif
{
@ -1143,5 +1141,99 @@ main (void)
}
#endif
/* The tests here are very similar to tests earlier in this file,
the important difference is just that there are no intervening
union variables that cause some GCC versions to hide possible
bugs in nextafter* implementation. */
if (nextafterf (nextafterf (FLT_MIN, FLT_MIN / 2.0), FLT_MIN) != FLT_MIN)
{
puts ("nextafterf FLT_MIN test failed");
result = 1;
}
if (nextafterf (nextafterf (-FLT_MIN, -FLT_MIN / 2.0), -FLT_MIN)
!= -FLT_MIN)
{
puts ("nextafterf -FLT_MIN test failed");
result = 1;
}
if (nextafter (nextafter (DBL_MIN, DBL_MIN / 2.0), DBL_MIN) != DBL_MIN)
{
puts ("nextafter DBL_MIN test failed");
result = 1;
}
if (nextafter (nextafter (-DBL_MIN, -DBL_MIN / 2.0), -DBL_MIN) != -DBL_MIN)
{
puts ("nextafter -DBL_MIN test failed");
result = 1;
}
#ifndef NO_LONG_DOUBLE
if (nextafterl (nextafterl (LDBL_MIN, LDBL_MIN / 2.0), LDBL_MIN)
!= LDBL_MIN)
{
puts ("nextafterl LDBL_MIN test failed");
result = 1;
}
if (nextafterl (nextafterl (-LDBL_MIN, -LDBL_MIN / 2.0), -LDBL_MIN)
!= -LDBL_MIN)
{
puts ("nextafterl -LDBL_MIN test failed");
result = 1;
}
#endif
volatile float f1 = FLT_MAX;
volatile float f2 = FLT_MAX / 2;
(void) &f1;
(void) &f2;
feclearexcept (FE_ALL_EXCEPT);
f2 += f1;
int fe = fetestexcept (FE_ALL_EXCEPT);
if (fe != (FE_OVERFLOW | FE_INEXACT))
{
printf ("float overflow test failed: %x\n", fe);
result = 1;
}
volatile double d1 = DBL_MAX;
volatile double d2 = DBL_MAX / 2;
(void) &d1;
(void) &d2;
feclearexcept (FE_ALL_EXCEPT);
d2 += d1;
fe = fetestexcept (FE_ALL_EXCEPT);
if (fe != (FE_OVERFLOW | FE_INEXACT))
{
printf ("double overflow test failed: %x\n", fe);
result = 1;
}
#ifndef NO_LONG_DOUBLE
volatile long double ld1 = LDBL_MAX;
volatile long double ld2 = LDBL_MAX / 2;
(void) &ld1;
(void) &ld2;
feclearexcept (FE_ALL_EXCEPT);
ld2 += ld1;
fe = fetestexcept (FE_ALL_EXCEPT);
if (fe != (FE_OVERFLOW | FE_INEXACT))
{
printf ("long double overflow test failed: %x\n", fe);
result = 1;
}
#endif
#if !defined NO_LONG_DOUBLE && LDBL_MANT_DIG == 113
volatile long double ld3 = 0x1.0000000000010000000100000001p+1;
volatile long double ld4 = 0x1.0000000000000000000000000001p+1;
(void) &ld3;
(void) &ld4;
ld3 -= ld4;
if (ld3 != 0x1.0p-47)
{
printf ("long double subtraction test failed %.28La\n", ld3);
result = 1;
}
#endif
return result;
}