]> sourceware.org Git - glibc.git/commitdiff
Add more tests of strtod end pointer
authorJoseph Myers <josmyers@redhat.com>
Fri, 20 Sep 2024 23:24:02 +0000 (23:24 +0000)
committerArjun Shankar <arjun@redhat.com>
Fri, 27 Sep 2024 15:25:02 +0000 (17:25 +0200)
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.

(cherry picked from commit b5d3737b305525315e0c7c93ca49eadc868eabd5)

stdlib/tst-strtod2.c

index 2cb0953fa911efd0a3c0a1a430eee9e68684da08..c84bd792c1a3f511ada836d660b34a6585bcd13c 100644 (file)
@@ -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);                        \
This page took 0.04836 seconds and 5 git commands to generate.