This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/8] Begin refactor of libm-test.inc


On Wed, 18 May 2016, Paul E. Murphy wrote:

> On 05/18/2016 04:44 PM, Joseph Myers wrote:
> > On Wed, 18 May 2016, Paul E. Murphy wrote:
> > 
> >> 	[TEST_COND_gt_binary64]: Likewise.
> > 
> > I don't like this TEST_COND_gt_binary64.
> > 
> > If the condition combines TEST_LDOUBLE with something about mantissa bits 
> > or exponents for long double, only the thing about mantissa bits or 
> > exponents is actually needed.  If it's TEST_LDOUBLE on its own (or 
> > combined with conditions on integer types rather than on long double), as 
> > in e.g. tests of ceil, then testing for >= 64 mantissa bits is sufficient 
> > (the tests may actually only require some number between 53 and 64, but 
> > testing for >= 64 seems reasonable).  That is, TEST_LDOUBLE on its own can 
> > be treated as defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64.
> 
> Admittedly, I scratched my head here try to find a conservative method to
> replace the TEST_LDOUBLE usage.  If it is only used as a bandaid for
> testing ldbl formats which are more expressive than dbl, can't it just
> go away without issue?  It isn't used in isolation.

The aim is to replace it with a logical condition for what the tests in 
question require.

If the condition just is "#ifdef TEST_LDOUBLE" (possibly with extra 
whitespace after "#"), or just tests defined TEST_LDOUBLE without any 
MANT_DIG, MIN_EXP or MAX_EXP tests (but including e.g. the "# if LONG_MAX 
> 281474976710656 && defined TEST_LDOUBLE" condition on one test of 
lrint), then, in what follows, treat it like "defined TEST_LDOUBLE && 
LDBL_MANT_DIG >= 64".

Given a test of a combination of TEST_LDOUBLE with a test of 
LDBL_MANT_DIG, LDBL_MIN_EXP or LDBL_MAX_EXP (possibly more than one of 
those, and possibly with other tests such as LONG_MAX as well), you can 
then remove the TEST_LDOUBLE condition if you change the LDBL_* tests to 
test the macros such as MANT_DIG, MIN_EXP and MAX_EXP (with MANT_DIG and 
MIN_EXP having previously been adjusted to remove the "-1").

Perhaps this patch is doing too many things and you need some patches just 
about refactoring TEST_LDOUBLE uses.

* Adjust MANT_DIG and MIN_EXP not to use -1.

* Change TEST_LDOUBLE when it appears in conjunction with LDBL_MANT_DIG 
etc. tests to just test MANT_DIG etc.

* Change LDBL_MANT_DIG etc. conditionals inside of TEST_LDOUBLE ones 
similarly (for cases such as

#ifdef TEST_LDOUBLE
...
# if LDBL_MANT_DIG > 100
...
# endif
#endif

* Change TEST_LDOUBLE when it appears on its own to test MANT_DIG >= 64.

(Well, all but the first of those could reasonbly go together in one 
patch, if separated from the rest of the refactoring.)

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]