diff options
author | Ulrich Drepper <gmail@redhat.com> | 2011-01-12 20:37:51 -0500 |
---|---|---|
committer | Ulrich Drepper <gmail@redhat.com> | 2011-01-12 20:37:51 -0500 |
commit | f57e41a5b8e88186c67ec0410d61a751b274340c (patch) | |
tree | 671acca459fbf5385490601e6265fbac7b6c6d48 /stdio-common/tst-grouping.c | |
parent | f257bbd77dfcfdf9fa305e220b295e4ad57f405d (diff) | |
download | glibc-f57e41a5b8e88186c67ec0410d61a751b274340c.tar.gz glibc-f57e41a5b8e88186c67ec0410d61a751b274340c.tar.xz glibc-f57e41a5b8e88186c67ec0410d61a751b274340c.zip |
Fix grouping when rounding increases number of integer digits.
Diffstat (limited to 'stdio-common/tst-grouping.c')
-rw-r--r-- | stdio-common/tst-grouping.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/stdio-common/tst-grouping.c b/stdio-common/tst-grouping.c new file mode 100644 index 0000000000..e8f4b8c4db --- /dev/null +++ b/stdio-common/tst-grouping.c @@ -0,0 +1,83 @@ +/* BZ 12394, test by Bruno Haible. */ +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +static int +do_test (void) +{ + char buf1[1000]; + char buf2[1000]; + int result = 0; + + if (setlocale (LC_NUMERIC, "de_DE.UTF-8") == NULL) + return 1; + + sprintf (buf1, "%'.2f", 999.996); + sprintf (buf2, "%'.2f", 1000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 2; + + sprintf (buf1, "%'.2f", 999999.996); + sprintf (buf2, "%'.2f", 1000000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 2; + + sprintf (buf1, "%'.2f", 999999999.996); + sprintf (buf2, "%'.2f", 1000000000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 2; + + sprintf (buf1, "%'.2f", 999999999999.996); + sprintf (buf2, "%'.2f", 1000000000000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 2; + + sprintf (buf1, "%'.2f", 999999999999999.996); + sprintf (buf2, "%'.2f", 1000000000000000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 2; + + sprintf (buf1, "%'.5g", 999.996); + sprintf (buf2, "%'.5g", 1000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 4; + + sprintf (buf1, "%'.4g", 9999.996); + sprintf (buf2, "%'.4g", 10000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 8; + + sprintf (buf1, "%'.5g", 99999.996); + sprintf (buf2, "%'.5g", 100000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 8; + + sprintf (buf1, "%'.6g", 999999.996); + sprintf (buf2, "%'.6g", 1000000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 8; + + sprintf (buf1, "%'.7g", 9999999.996); + sprintf (buf2, "%'.7g", 10000000.004); + printf ("%d: \"%s\" vs \"%s\"\n", __LINE__, buf1, buf2); + if (strcmp (buf1, buf2) != 0) + result |= 8; + + return result; +} + + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |