aboutsummaryrefslogtreecommitdiff
path: root/stdio-common/tst-grouping.c
diff options
context:
space:
mode:
authorUlrich Drepper <gmail@redhat.com>2011-01-12 20:37:51 -0500
committerUlrich Drepper <gmail@redhat.com>2011-01-12 20:37:51 -0500
commitf57e41a5b8e88186c67ec0410d61a751b274340c (patch)
tree671acca459fbf5385490601e6265fbac7b6c6d48 /stdio-common/tst-grouping.c
parentf257bbd77dfcfdf9fa305e220b295e4ad57f405d (diff)
downloadglibc-f57e41a5b8e88186c67ec0410d61a751b274340c.zip
glibc-f57e41a5b8e88186c67ec0410d61a751b274340c.tar.gz
glibc-f57e41a5b8e88186c67ec0410d61a751b274340c.tar.bz2
Fix grouping when rounding increases number of integer digits.
Diffstat (limited to 'stdio-common/tst-grouping.c')
-rw-r--r--stdio-common/tst-grouping.c83
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 0000000..e8f4b8c
--- /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"