X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftest-sqrtl.c;h=c4404f989550cb7a9e884275f875ae54e51bf5e7;hb=308c394b3c4ee0bc13826b381b9f0668481c4a0f;hp=2bf34fa0047d378e58e4d6a5ddf96774d2ead0e0;hpb=6d070de3c1b65aa3fc0b3f1c3ef853ffac8845b9;p=gnulib.git diff --git a/tests/test-sqrtl.c b/tests/test-sqrtl.c index 2bf34fa00..c4404f989 100644 --- a/tests/test-sqrtl.c +++ b/tests/test-sqrtl.c @@ -1,5 +1,5 @@ /* Test of sqrtl() function. - Copyright (C) 2010 Free Software Foundation, Inc. + Copyright (C) 2010-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,10 +23,27 @@ #include "signature.h" SIGNATURE_CHECK (sqrtl, long double, (long double)); +#include + #include "fpucw.h" #include "macros.h" -long double y; +#define DOUBLE long double +#define L_(literal) literal##L +#define MANT_DIG DBL_MANT_DIG +#define SQRT sqrtl +#define RANDOM randoml +#include "test-sqrt.h" + +static long double +my_ldexpl (long double x, int d) +{ + for (; d > 0; d--) + x *= 2.0L; + for (; d < 0; d++) + x *= 0.5L; + return x; +} int main () @@ -36,8 +53,25 @@ main () BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ - y = sqrtl (0.6L); + x = 0.6L; + y = sqrtl (x); ASSERT (y >= 0.7745966692L && y <= 0.7745966693L); + /* Another particular value. */ + { + long double z; + long double err; + + x = 8.1974099812331540680810141969554806865L; + y = sqrtl (x); + z = y * y - x; + err = my_ldexpl (z, LDBL_MANT_DIG); + if (err < 0) + err = - err; + ASSERT (err <= 100.0L); + } + + test_function (); + return 0; }