diff options
Diffstat (limited to 'stdio-common/tst-sprintf2.c')
-rw-r--r-- | stdio-common/tst-sprintf2.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/stdio-common/tst-sprintf2.c b/stdio-common/tst-sprintf2.c index 9024b58..debb68e 100644 --- a/stdio-common/tst-sprintf2.c +++ b/stdio-common/tst-sprintf2.c @@ -1,14 +1,22 @@ #include <float.h> #include <math.h> #include <stdio.h> +#include <string.h> int main (void) { - volatile union { long double l; long long x[2]; } u; + volatile union { long double l; long long x[2]; } u, v; char buf[64]; int result = 0; +#if LDBL_MANT_DIG == 106 || LDBL_MANT_DIG == 113 +# define COMPARE_LDBL(u, v) \ + ((u).l == (v).l && (u).x[0] == (v).x[0] && (u).x[1] == (v).x[1]) +#else +# define COMPARE_LDBL(u, v) ((u).l == (v).l) +#endif + #define TEST(val) \ do \ { \ @@ -19,6 +27,12 @@ main (void) printf ("Error on line %d: %s != %s\n", __LINE__, buf, #val); \ result = 1; \ } \ + if (sscanf (#val, "%La", &v.l) != 1 || !COMPARE_LDBL (u, v)) \ + { \ + printf ("Error sscanf on line %d: %La != %La\n", __LINE__, \ + u.l, v.l); \ + result = 1; \ + } \ /* printf ("%s %La %016Lx %016Lx\n", #val, u.l, u.x[0], u.x[1]); */ \ } \ while (0) @@ -54,6 +68,15 @@ main (void) TEST (0x1.23456789abcdef123456789abc8p+64L); TEST (0x1.23456789abcde7123456789abc8p+64L); TEST (0x1.123456789abcdef123456789p-969L); +# if LDBL_MANT_DIG == 106 + TEST (-0x1.2d71957cc1263bbbeb1d365f1e8p-969L); + TEST (0x1.23456789abcdef0123456789abp-970L); + TEST (0x1.579bde02468acp-1001L); + TEST (0x0.abcdef0123456p-1022L); + TEST (0x1.abcdef0123456p-1022L); + TEST (0x1.abcdef012345678p-1014L); + TEST (0x1.abcdef0123456f8p-1014L); +# endif #endif return result; } |