Tests for handing input and output of non-standard digits.
[kopensolaris-gnu/glibc.git] / localedata / tst-digits.c
1 #include <locale.h>
2 #include <stdio.h>
3 #include <sys/types.h>
4
5
6 #define ZERO  "\xe2\x82\x80"
7 #define ONE   "\xe2\x82\x81"
8 #define TWO   "\xe2\x82\x82"
9 #define THREE "\xe2\x82\x83"
10 #define FOUR  "\xe2\x82\x84"
11 #define FIVE  "\xe2\x82\x85"
12 #define SIX   "\xe2\x82\x86"
13 #define SEVEN "\xe2\x82\x87"
14 #define EIGHT "\xe2\x82\x88"
15 #define NINE  "\xe2\x82\x89"
16
17 static struct printf_int_test
18 {
19   int n;
20   const char *format;
21   const char *expected;
22 } printf_int_tests[] =
23 {
24   {       0, "%I'10d", "       " ZERO },
25   {       1, "%I'10d", "       " ONE },
26   {       2, "%I'10d", "       " TWO },
27   {       3, "%I'10d", "       " THREE },
28   {       4, "%I'10d", "       " FOUR },
29   {       5, "%I'10d", "       " FIVE },
30   {       6, "%I'10d", "       " SIX },
31   {       7, "%I'10d", "       " SEVEN },
32   {       8, "%I'10d", "       " EIGHT },
33   {       9, "%I'10d", "       " NINE },
34   {      11, "%I'10d", "    " ONE ONE },
35   {      12, "%I'10d", "    " ONE TWO },
36   {     123, "%I10d",  " " ONE TWO THREE },
37   {     123, "%I'10d", " " ONE TWO THREE },
38   {    1234, "%I10d",  ONE TWO THREE FOUR },
39   {    1234, "%I'10d", ONE "," TWO THREE FOUR },
40   {   12345, "%I'10d", ONE TWO "," THREE FOUR FIVE },
41   {  123456, "%I'10d", ONE TWO THREE "," FOUR FIVE SIX },
42   { 1234567, "%I'10d", ONE "," TWO THREE FOUR "," FIVE SIX SEVEN }
43 };
44
45
46
47 int
48 main (void)
49 {
50   int cnt;
51   int printf_failures = 0;
52
53   if (setlocale (LC_ALL, "test7") == NULL)
54     {
55       puts ("cannot set locale `test7'");
56       exit (1);
57     }
58
59   /* First: printf tests.  */
60   for (cnt = 0; cnt < sizeof (printf_int_tests) / sizeof (printf_int_tests[0]);
61        ++cnt)
62     {
63       char buf[100];
64       ssize_t n;
65
66       n = snprintf (buf, sizeof buf, printf_int_tests[cnt].format,
67                     printf_int_tests[cnt].n);
68
69       if (n != strlen (printf_int_tests[cnt].expected)
70           || strcmp (buf, printf_int_tests[cnt].expected) != 0)
71         {
72           printf ("%3d: got \"%s\", expected \"%s\"\n",
73                   cnt, buf, printf_int_tests[cnt].expected);
74           ++printf_failures;
75         }
76     }
77
78   printf ("\n%d failures in printf tests\n", printf_failures);
79
80   return printf_failures != 0;
81 }