diff options
author | Joseph Myers <joseph@codesourcery.com> | 2018-06-15 17:36:21 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2018-06-15 17:36:21 +0000 |
commit | b12c1e7991cbde3d6fc70abfdf72abecce8b318c (patch) | |
tree | 2cdcaefdf3b5a05b89df6edcb5b741558ec6bf73 /stdlib/tst-strtod-nan-sign-main.c | |
parent | b0debe14fcfe690eee8b5e693554dd258603805d (diff) | |
download | glibc-b12c1e7991cbde3d6fc70abfdf72abecce8b318c.tar glibc-b12c1e7991cbde3d6fc70abfdf72abecce8b318c.tar.gz glibc-b12c1e7991cbde3d6fc70abfdf72abecce8b318c.tar.bz2 glibc-b12c1e7991cbde3d6fc70abfdf72abecce8b318c.zip |
Add tests for sign of NaN returned by strtod (bug 23007).
This patch adds tests for bug 23007, strtod ignoring any sign in the
input string in the case of a NaN result.
Tested for x86_64.
[BZ #23007]
* stdlib/tst-strtod-nan-sign-main.c: New file.
* stdlib/tst-strtod-nan-sign.c: Likewise.
* wcsmbs/tst-wcstod-nan-sign.c: Likewise.
* stdlib/Makefile (tests): Add tst-strtod-nan-sign.
($(objpfx)tst-strtod-nan-sign): Depend on $(libm).
* wcsmbs/Makefile (tests) Add tst-wcstod-nan-sign.
($(objpfx)tst-wcstod-nan-sign): Depend on $(libm).
Diffstat (limited to 'stdlib/tst-strtod-nan-sign-main.c')
-rw-r--r-- | stdlib/tst-strtod-nan-sign-main.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/stdlib/tst-strtod-nan-sign-main.c b/stdlib/tst-strtod-nan-sign-main.c new file mode 100644 index 0000000000..b168c64208 --- /dev/null +++ b/stdlib/tst-strtod-nan-sign-main.c @@ -0,0 +1,50 @@ +/* Test strtod functions handle signs of NaNs (bug 23007). + Copyright (C) 2018 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <math.h> +#include <stdlib.h> +#include <wchar.h> + +#include <stdlib/tst-strtod.h> +#include <support/check.h> + +#define CONCAT_(X, Y) X ## Y +#define CONCAT(X, Y) CONCAT_ (X, Y) +#define FNX(FN) CONCAT (FNPFX, FN) + +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +static int \ +test_strto ## FSUF (void) \ +{ \ + FTYPE val_pos = FNX (FSUF) (L_("nan"), NULL); \ + FTYPE copy_pos = copysign ## CSUF (1, val_pos); \ + TEST_VERIFY (isnan (val_pos) && copy_pos == 1); \ + FTYPE val_neg = FNX (FSUF) (L_("-nan"), NULL); \ + FTYPE copy_neg = copysign ## CSUF (1, val_neg); \ + TEST_VERIFY (isnan (val_neg) && copy_neg == -1); \ + return 0; \ +} +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) + +static int +do_test (void) +{ + return STRTOD_TEST_FOREACH (test_strto); +} + +#include <support/test-driver.c> |