]>
Commit | Line | Data |
---|---|---|
5ae9d168 | 1 | /* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc. |
afd4eb37 | 2 | This file is part of the GNU C Library. |
28f540f4 | 3 | |
afd4eb37 UD |
4 | The GNU C Library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Library General Public License as | |
6 | published by the Free Software Foundation; either version 2 of the | |
7 | License, or (at your option) any later version. | |
28f540f4 | 8 | |
afd4eb37 UD |
9 | The GNU C Library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | Library General Public License for more details. | |
28f540f4 | 13 | |
afd4eb37 UD |
14 | You should have received a copy of the GNU Library General Public |
15 | License along with the GNU C Library; see the file COPYING.LIB. If not, | |
16 | write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
17 | Boston, MA 02111-1307, USA. */ | |
28f540f4 | 18 | |
28f540f4 RM |
19 | #include <ctype.h> |
20 | #include <stdio.h> | |
21 | #include <stdlib.h> | |
22 | #include <errno.h> | |
23 | #include <string.h> | |
24 | ||
25 | struct ltest | |
26 | { | |
afd4eb37 | 27 | const char *str; /* Convert this. */ |
28f540f4 RM |
28 | double expect; /* To get this. */ |
29 | char left; /* With this left over. */ | |
30 | int err; /* And this in errno. */ | |
31 | }; | |
afd4eb37 | 32 | static const struct ltest tests[] = |
28f540f4 RM |
33 | { |
34 | { "12.345", 12.345, '\0', 0 }, | |
35 | { "12.345e19", 12.345e19, '\0', 0 }, | |
36 | { "-.1e+9", -.1e+9, '\0', 0 }, | |
37 | { ".125", .125, '\0', 0 }, | |
38 | { "1e20", 1e20, '\0', 0 }, | |
afd4eb37 | 39 | { "0e-19", 0, '\0', 0 }, |
6259ec0d | 40 | { "4\00012", 4.0, '\0', 0 }, |
28f540f4 RM |
41 | { NULL, 0, '\0', 0 } |
42 | }; | |
43 | ||
afd4eb37 | 44 | static void expand __P ((char *dst, int c)); |
28f540f4 RM |
45 | |
46 | int | |
84384f5b | 47 | main (int argc, char ** argv) |
28f540f4 | 48 | { |
afd4eb37 | 49 | register const struct ltest *lt; |
28f540f4 RM |
50 | char *ep; |
51 | int status = 0; | |
5ae9d168 | 52 | int save_errno; |
28f540f4 RM |
53 | |
54 | for (lt = tests; lt->str != NULL; ++lt) | |
55 | { | |
56 | double d; | |
57 | ||
58 | errno = 0; | |
59 | d = strtod(lt->str, &ep); | |
5ae9d168 UD |
60 | save_errno = errno; |
61 | printf ("strtod (\"%s\") test %u", | |
28f540f4 | 62 | lt->str, (unsigned int) (lt - tests)); |
5ae9d168 UD |
63 | if (d == lt->expect && *ep == lt->left && save_errno == lt->err) |
64 | puts ("\tOK"); | |
28f540f4 RM |
65 | else |
66 | { | |
5ae9d168 | 67 | puts ("\tBAD"); |
28f540f4 | 68 | if (d != lt->expect) |
5ae9d168 | 69 | printf (" returns %.60g, expected %.60g\n", d, lt->expect); |
28f540f4 RM |
70 | if (lt->left != *ep) |
71 | { | |
72 | char exp1[5], exp2[5]; | |
5ae9d168 UD |
73 | expand (exp1, *ep); |
74 | expand (exp2, lt->left); | |
75 | printf (" leaves '%s', expected '%s'\n", exp1, exp2); | |
28f540f4 | 76 | } |
5ae9d168 UD |
77 | if (save_errno != lt->err) |
78 | printf (" errno %d (%s) instead of %d (%s)\n", | |
79 | save_errno, strerror (save_errno), | |
80 | lt->err, strerror (lt->err)); | |
28f540f4 RM |
81 | status = 1; |
82 | } | |
83 | } | |
84 | ||
5ae9d168 | 85 | exit (status ? EXIT_FAILURE : EXIT_SUCCESS); |
28f540f4 RM |
86 | } |
87 | ||
88 | static void | |
afd4eb37 UD |
89 | expand (dst, c) |
90 | char *dst; | |
91 | register int c; | |
28f540f4 | 92 | { |
5ae9d168 | 93 | if (isprint (c)) |
28f540f4 RM |
94 | { |
95 | dst[0] = c; | |
96 | dst[1] = '\0'; | |
97 | } | |
98 | else | |
5ae9d168 | 99 | (void) sprintf (dst, "%#.3o", (unsigned int) c); |
28f540f4 | 100 | } |