Fix various bugs. Comment out unresolved issues.
[kopensolaris-gnu/glibc.git] / localedata / tests-mbwc / dat_strcoll.c
1 /*
2  *  TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
3  *
4  *       FILE: dat_strcoll.c
5  *
6  *       STRCOLL:  int strcoll (const char *s1, const char *s2);
7  */
8
9 /*
10    NOTE:
11
12    If a return value is expected to be 0, set ret_flg=1 and the
13    expected value = 0.  If a return value is expected to be a
14    positive/negative value, set ret_flg=0, and set the expected value
15    = +1/-1.
16    There is inconsistensy between tst_strcoll() and tst_wcscoll()(it
17    has cmp_flg) for input data. I'll fix it.
18
19    Assuming en_US to be en_US.ascii. (maybe, should be iso8859-1).
20
21
22
23    ASCII CODE  : A,B,C, ...  , a, b, c, ...      B,a:-1   a,B:+1
24    DICTIONARY : A,a,B,b,C,c,....  a,B:-1 B,a:+1 */
25
26 TST_STRCOLL tst_strcoll_loc [] = {
27   {
28     { Tstrcoll, TST_LOC_de },
29     {
30       { /*input.*/ { "ÄBCDEFG", "ÄBCDEFG"             },  /* #1 */
31         /*expect*/ { 1,0,1,0,                         },
32       },
33       { /*input.*/ { "XX Ä XX", "XX B XX"             },  /* #2 */
34         /*expect*/ { 1,0,0,-1,                        },
35       },
36       { /*input.*/ { "XX B XX", "XX Ä XX"             },  /* #3 */
37         /*expect*/ { 1,0,0,+1,                        },
38       },
39       { /*input.*/ { "B",       "a"                   },  /* #4 */
40         /*expect*/ { 1,0,0,+1,                        },
41       },
42       { /*input.*/ { "a",       "B"                   },  /* #5 */
43         /*expect*/ { 1,0,0,-1,                        },
44       },
45       { /*input.*/ { "b",       "A"                   },  /* #6 */
46         /*expect*/ { 1,0,0,+1,                        },
47       },
48       { /*input.*/ { "A",       "b"                   },  /* #7 */
49         /*expect*/ { 1,0,0,-1,                        },
50       },
51       { /*input.*/ { "ä",       "B"                   },  /* #8 */
52         /*expect*/ { 1,0,0,-1,                        },
53       },
54       { /*input.*/ { "B",       "ä"                   },  /* #9 */
55         /*expect*/ { 1,0,0,+1,                        },
56       },
57       { is_last: 1 } /* Last element.  */
58     }
59   },
60   {
61     { Tstrcoll, TST_LOC_enUS },
62     {
63       { /*input.*/ { "ABCDEFG", "ABCDEFG"             },  /* #1 */
64         /*expect*/ { 1,0,1,0,                         },
65       },
66       { /*input.*/ { "XX a XX", "XX B XX"             },  /* #2 */
67         /*expect*/ { 1,0,0,-1,                        },
68       },
69       { /*input.*/ { "XX B XX", "XX a XX"             },  /* #3 */
70         /*expect*/ { 1,0,0,+1,                        },
71       },
72       {
73         /* <WAIVER> */
74         /*input.*/ { "B",       "a"                   },  /* #4 */
75 #ifdef SHOJI_IS_RIGHT
76         /*expect*/ { 1,0,0,-1,                        },
77 #else
78                    /* XXX We are not testing the C locale.  */
79         /*expect*/ { 1,0,0,+1,                        },
80 #endif
81       },
82       {
83         /* <WAIVER> */
84         /*input.*/ { "a",       "B"                   },  /* #5 */
85 #ifdef SHOJI_IS_RIGHT
86         /*expect*/ { 1,0,0,+1,                        },
87 #else
88                    /* XXX We are not testing the C locale.  */
89         /*expect*/ { 1,0,0,-1,                        },
90 #endif
91       },
92       { /*input.*/ { "b",       "A"                   },  /* #6 */
93         /*expect*/ { 1,0,0,+1,                        },
94       },
95       { /*input.*/ { "A",       "b"                   },  /* #7 */
96         /*expect*/ { 1,0,0,-1,                        },
97       },
98 #ifdef NO_WAIVER
99       /* XXX I do not yet know whether strcoll really should reject
100          characters outside the multibyte character range.  */
101       {
102         /* #8 */  /* <WAIVER> */
103         /*input.*/ { "\244\242\244\244\244\246\244\250\244\252", "ABCDEFG" },
104         /*expect*/ { 1,EINVAL,0,0,                    },
105       },
106       {
107         /* #9 */  /* <WAIVER> */
108         /*input.*/ { "ABCZEFG", "\244\242\244\244\244\246\244\250\244\252" },
109         /*expect*/ { 1,EINVAL,0,0,                    },
110       },
111 #endif
112       { is_last: 1 } /* Last element.  */
113     }
114   },
115   {
116     { Tstrcoll, TST_LOC_eucJP },
117     {
118       { /*input.*/ { "\244\242\244\244\244\246\244\250\244\252",
119                      "\244\242\244\244\244\246\244\250\244\252" },  /* #1 */
120         /*expect*/ { 1,0,1,0,                         },
121       },
122       { /*input.*/ { "\244\242\244\244\244\246\244\250\244\252",
123                      "\244\242\244\244\244\363\244\250\244\252" },  /* #2 */
124         /*expect*/ { 1,0,0,-1,                        },
125       },
126       { /*input.*/ { "\244\242\244\244\244\363\244\250\244\252",
127                      "\244\242\244\244\244\246\244\250\244\252" },  /* #3 */
128         /*expect*/ { 1,0,0,+1,                        },
129       },
130       { /*input.*/ { "B",       "a"                   },  /* #4 */
131         /*expect*/ { 1,0,0,-1,                        },
132       },
133       { /*input.*/ { "a",       "B"                   },  /* #5 */
134         /*expect*/ { 1,0,0,+1,                        },
135       },
136       { /*input.*/ { "b",       "A"                   },  /* #6 */
137         /*expect*/ { 1,0,0,+1,                        },
138       },
139       { /*input.*/ { "A",       "b"                   },  /* #7 */
140         /*expect*/ { 1,0,0,-1,                        },
141       },
142 #ifdef NO_WAIVER
143       /* XXX I do not yet know whether strcoll really should reject
144          characters outside the multibyte character range.  */
145       {
146         /* <WAIVER> */
147         /*input.*/ { "\200\216\217", "ABCDEFG"        },  /* #8 */
148         /*expect*/ { 1,EINVAL,0,0,                    },
149       },
150       {
151         /* <WAIVER> */
152         /*input.*/ { "ABCZEFG", "\200\216\217"        },  /* #9 */
153         /*expect*/ { 1,EINVAL,0,0,                    },
154       },
155 #endif
156       { is_last: 1 } /* Last element.  */
157     }
158   },
159   {
160     { Tstrcoll, TST_LOC_end }
161   }
162 };