12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /* Test to strtod etc for numbers like x000...0000.000e-nn.
- This file is part of the GNU C Library.
- Copyright (C) 2001-2019 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
- 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 <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "tst-strtod.h"
- #define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
- static int \
- test_strto ## FSUF (void) \
- { \
- char buf[300]; \
- int cnt; \
- int result = 0; \
- \
- for (cnt = 0; cnt < 200; ++cnt) \
- { \
- ssize_t n; \
- FTYPE f; \
- \
- n = sprintf (buf, "%d", cnt); \
- memset (buf + n, '0', cnt); \
- sprintf (buf + n + cnt, ".000e-%d", cnt); \
- f = strto ## FSUF (buf, NULL); \
- \
- if (f != (FTYPE) cnt) \
- { \
- char fstr[FSTRLENMAX]; \
- char fcntstr[FSTRLENMAX]; \
- FTOSTR (fstr, sizeof (fstr), "%g", f); \
- FTOSTR (fcntstr, sizeof (fstr), "%g", (FTYPE) cnt); \
- printf ("strto" #FSUF "(\"%s\") " \
- "failed for cnt == %d (%s instead of %s)\n", \
- buf, cnt, fstr, fcntstr); \
- result = 1; \
- } \
- else \
- printf ( "strto" #FSUF "() fine for cnt == %d\n", cnt); \
- } \
- return result; \
- }
- GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
- int
- main (void)
- {
- return STRTOD_TEST_FOREACH (test_strto);
- }
|