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 | |
parent | b0debe14fcfe690eee8b5e693554dd258603805d (diff) | |
download | glibc-b12c1e7991cbde3d6fc70abfdf72abecce8b318c.tar.gz glibc-b12c1e7991cbde3d6fc70abfdf72abecce8b318c.tar.xz 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).
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | stdlib/Makefile | 3 | ||||
-rw-r--r-- | stdlib/tst-strtod-nan-sign-main.c | 50 | ||||
-rw-r--r-- | stdlib/tst-strtod-nan-sign.c | 23 | ||||
-rw-r--r-- | wcsmbs/Makefile | 3 | ||||
-rw-r--r-- | wcsmbs/tst-wcstod-nan-sign.c | 23 |
6 files changed, 111 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index c0f58f5214..a8f711fcd7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2018-06-15 Joseph Myers <joseph@codesourcery.com> + + [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). + 2018-06-15 Herman ten Brugge <hermantenbrugge@home.nl> [BZ #23007] diff --git a/stdlib/Makefile b/stdlib/Makefile index bf1fbd4a3a..808a8ceab7 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -84,7 +84,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \ tst-cxa_atexit tst-on_exit test-atexit-race \ test-at_quick_exit-race test-cxa_atexit-race \ test-on_exit-race test-dlclose-exit-race \ - tst-makecontext-align test-bz22786 + tst-makecontext-align test-bz22786 tst-strtod-nan-sign tests-internal := tst-strtod1i tst-strtod3 tst-strtod4 tst-strtod5i \ tst-tls-atexit tst-tls-atexit-nodelete @@ -221,6 +221,7 @@ $(objpfx)tst-tininess: $(libm) $(objpfx)tst-strtod-underflow: $(libm) $(objpfx)tst-strtod6: $(libm) $(objpfx)tst-strtod-nan-locale: $(libm) +$(objpfx)tst-strtod-nan-sign: $(libm) tst-tls-atexit-lib.so-no-z-defs = yes test-dlclose-exit-race-helper.so-no-z-defs = yes 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> diff --git a/stdlib/tst-strtod-nan-sign.c b/stdlib/tst-strtod-nan-sign.c new file mode 100644 index 0000000000..0b99932417 --- /dev/null +++ b/stdlib/tst-strtod-nan-sign.c @@ -0,0 +1,23 @@ +/* Test strtod functions handle signs of NaNs (bug 23007). + Narrow string version. + 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/>. */ + +#define FNPFX strto +#define L_(C) C + +#include <tst-strtod-nan-sign-main.c> diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index 63a6fbab58..2e02b22c3b 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -51,7 +51,7 @@ tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \ tst-wcrtomb tst-wcpncpy tst-mbsrtowcs tst-wchar-h tst-mbrtowc2 \ tst-c16c32-1 wcsatcliff tst-wcstol-locale tst-wcstod-nan-locale \ tst-wcstod-round test-char-types tst-fgetwc-after-eof \ - $(addprefix test-,$(strop-tests)) + tst-wcstod-nan-sign $(addprefix test-,$(strop-tests)) include ../Rules @@ -105,3 +105,4 @@ CPPFLAGS += $(libio-mtsafe) CPPFLAGS-wcstold_l.c += -I../stdlib $(objpfx)tst-wcstod-nan-locale: $(libm) +$(objpfx)tst-wcstod-nan-sign: $(libm) diff --git a/wcsmbs/tst-wcstod-nan-sign.c b/wcsmbs/tst-wcstod-nan-sign.c new file mode 100644 index 0000000000..4c40e50f4f --- /dev/null +++ b/wcsmbs/tst-wcstod-nan-sign.c @@ -0,0 +1,23 @@ +/* Test strtod functions handle signs of NaNs (bug 23007). + Wide string version. + 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/>. */ + +#define FNPFX wcsto +#define L_(C) L ## C + +#include "../stdlib/tst-strtod-nan-sign-main.c" |