aboutsummaryrefslogtreecommitdiff
path: root/stdlib
diff options
context:
space:
mode:
authorJoseph Myers <josmyers@redhat.com>2024-09-20 23:24:02 +0000
committerJoseph Myers <josmyers@redhat.com>2024-09-20 23:24:02 +0000
commitb5d3737b305525315e0c7c93ca49eadc868eabd5 (patch)
tree486e27257b790764597832a1a41a427ddf664c30 /stdlib
parent8de031bcb9adfa736c0caed2c79d10947b8d8f48 (diff)
downloadglibc-b5d3737b305525315e0c7c93ca49eadc868eabd5.tar.xz
glibc-b5d3737b305525315e0c7c93ca49eadc868eabd5.zip
Add more tests of strtod end pointer
Although there are some tests in tst-strtod2 and tst-strtod3 for the end pointer provided by strtod when it doesn't parse the whole string, they aren't very thorough. Add tests of more such cases to tst-strtod2. Tested for x86_64.
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/tst-strtod2.c41
1 files changed, 39 insertions, 2 deletions
diff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c
index 2cb0953fa9..c84bd792c1 100644
--- a/stdlib/tst-strtod2.c
+++ b/stdlib/tst-strtod2.c
@@ -1,3 +1,4 @@
+#include <math.h>
#include <stdio.h>
#include <stdlib.h>
@@ -17,10 +18,46 @@ struct test_strto ## FSUF \
{ "0x.0y", 0.0 ## LSUF, 4 }, \
{ ".y", 0.0 ## LSUF, 0 }, \
{ "0.y", 0.0 ## LSUF, 2 }, \
- { ".0y", 0.0 ## LSUF, 2 } \
+ { ".0y", 0.0 ## LSUF, 2 }, \
+ { "1.0e", 1.0 ## LSUF, 3 }, \
+ { "1.0e+", 1.0 ## LSUF, 3 }, \
+ { "1.0e-", 1.0 ## LSUF, 3 }, \
+ { "1.0ex", 1.0 ## LSUF, 3 }, \
+ { "1.0e+x", 1.0 ## LSUF, 3 }, \
+ { "1.0e-x", 1.0 ## LSUF, 3 }, \
+ { "0x1p", 1.0 ## LSUF, 3 }, \
+ { "0x1p+", 1.0 ## LSUF, 3 }, \
+ { "0x1p-", 1.0 ## LSUF, 3 }, \
+ { "0x1px", 1.0 ## LSUF, 3 }, \
+ { "0x1p+x", 1.0 ## LSUF, 3 }, \
+ { "0x1p-x", 1.0 ## LSUF, 3 }, \
+ { "INFx", INFINITY, 3 }, \
+ { "infx", INFINITY, 3 }, \
+ { "INFINITx", INFINITY, 3 }, \
+ { "infinitx", INFINITY, 3 }, \
+ { "INFINITYY", INFINITY, 8 }, \
+ { "infinityy", INFINITY, 8 }, \
+ { "NANx", NAN, 3 }, \
+ { "nanx", NAN, 3 }, \
+ { "NAN(", NAN, 3 }, \
+ { "nan(", NAN, 3 }, \
+ { "NAN(x", NAN, 3 }, \
+ { "nan(x", NAN, 3 }, \
+ { "NAN(x)y", NAN, 6 }, \
+ { "nan(x)y", NAN, 6 }, \
+ { "NAN(*)y", NAN, 3 }, \
+ { "nan(*)y", NAN, 3 } \
}; \
\
static int \
+compare_strto ## FSUF (FTYPE x, FTYPE y) \
+{ \
+ if (isnan (x) && isnan (y)) \
+ return 1; \
+ return x == y; \
+} \
+ \
+static int \
test_strto ## FSUF (void) \
{ \
int status = 0; \
@@ -30,7 +67,7 @@ test_strto ## FSUF (void) \
{ \
char *ep; \
FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].str, &ep); \
- if (r != tests_strto ## FSUF[i].result) \
+ if (!compare_strto ## FSUF (r, tests_strto ## FSUF[i].result)) \
{ \
char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \
FTOSTR (buf1, sizeof (buf1), "%g", r); \