1/*
2 * TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
3 *
4 * FILE: dat_wcscoll.c
5 *
6 * WCSCOLL: int wcscoll (const wchar_t *ws1, const wchar_t *ws2);
7 */
8
9/*
10 * CAUTION:
11 * When LC_COLLATE (or LC_ALL) is set for ja_JP.EUC,
12 * wcscoll() core-dumps for big values such as 0x3041
13 * (0x0041 is okay) in glibc 2.1.2.
14 *
15 * NOTE:
16 * a) When 0 is expected as a return value, set ret_flg=1.
17 * - the return value is compared with an expected value: ret_val.
18 * b) When a positive value is expected as a return value,
19 * set ret_flg=0 and set cmp_flg=+1.
20 * - the return value is not compared with the expected value
21 * (can not be compared); instead, the test program checks
22 * if the return value is positive when cmp_flg=+1.
23 * c) When a negative value is expected as a return value,
24 * ......
25 * d) When data contains invalid values, set err_val to the expected errno.
26 * Set ret_flg=0 and cmp_flg=0 so that it doesn't compare
27 * the return value with an expected value or doesn't check
28 * the sign of the return value.
29 *
30 *
31 * -------------------------------------------
32 * CASE err_val ret_flg ret_val cmp_flg
33 * -------------------------------------------
34 * a) 0 1 0 0
35 * b) 0 0 0 +1
36 * c) 0 0 0 -1
37 * d) EINVAL 0 0 0
38 * -------------------------------------------
39 */
40
41
42TST_WCSCOLL tst_wcscoll_loc [] = {
43
44 { { Twcscoll, TST_LOC_de },
45 {
46 { /*input.*/ { { 0x00E1,0x00E2,0x00E3,0x0000 },
47 { 0x00E1,0x00E2,0x00E3,0x0000 }, }, /* #1 */
48 /*expect*/ { 0,1,0, 0, },
49 },
50 { /*input.*/ { { 0x0000,0x00E1,0x00E3,0x0000 },
51 { 0x0000,0x00E2,0x00E3,0x0000 }, }, /* #2 */
52 /*expect*/ { 0,1,0, 0, },
53 },
54 { /*input.*/ { { 0x00E1,0x00E1,0x00E3,0x0000 },
55 { 0x0000,0x00E2,0x00E3,0x0000 }, }, /* #3 */
56 /*expect*/ { 0,0,0, +1, },
57 },
58 { /*input.*/ { { 0x0000,0x00E2,0x00E3,0x0000 },
59 { 0x00E1,0x00E1,0x00E3,0x0000 }, }, /* #4 */
60 /*expect*/ { 0,0,0, -1, },
61 },
62 { /*input.*/ { { 0x00E1,0x0042,0x00E3,0x0000 },
63 { 0x00E1,0x0061,0x00E3,0x0000 }, }, /* #5 */
64 /*expect*/ { 0,0,0, +1, },
65 },
66 { /*input.*/ { { 0x00E1,0x0061,0x00E3,0x0000 },
67 { 0x00E1,0x0042,0x00E3,0x0000 }, }, /* #6 */
68 /*expect*/ { 0,0,0, -1, },
69 },
70 { /*input.*/ { { 0x00E1,0x00E2,0x0000 },
71 { 0x00E1,0x00E2,0x00E9,0x0000 }, }, /* #7 */
72 /*expect*/ { 0,0,0, -1, },
73 },
74 { /*input.*/ { { 0x00E1,0x00E2,0x00E9,0x0000 },
75 { 0x00E1,0x00E2,0x0000 }, }, /* #8 */
76 /*expect*/ { 0,0,0, +1, },
77 },
78 { /*input.*/ { { 0x00E1,0x0092,0x00E9,0x0000 },
79 { 0x00E1,0x008E,0x00E9,0x0000 }, }, /* #9 */
80 /*expect*/ { 0,0,0, +1, },
81 },
82 { /*input.*/ { { 0x00E1,0x008E,0x00E9,0x0000 },
83 { 0x00E1,0x0092,0x00E9,0x0000 }, }, /* #10 */
84 /*expect*/ { 0,0,0, -1, },
85 },
86 { .is_last = 1 }
87 }
88 },
89 { { Twcscoll, TST_LOC_enUS },
90 {
91 { /*input.*/ { { 0x0041,0x0042,0x0043,0x0000 },
92 { 0x0041,0x0042,0x0043,0x0000 }, }, /* #1 */
93 /*expect*/ { 0,1,0, 0, },
94 },
95 { /*input.*/ { { 0x0000,0x0041,0x0043,0x0000 },
96 { 0x0000,0x0042,0x0043,0x0000 }, }, /* #2 */
97 /*expect*/ { 0,1,0, 0, },
98 },
99 { /*input.*/ { { 0x0041,0x0041,0x0043,0x0000 },
100 { 0x0000,0x0042,0x0043,0x0000 }, }, /* #3 */
101 /*expect*/ { 0,0,0, +1, },
102 },
103 { /*input.*/ { { 0x0000,0x0042,0x0043,0x0000 },
104 { 0x0041,0x0041,0x0043,0x0000 }, }, /* #4 */
105 /*expect*/ { 0,0,0, -1, },
106 },
107 /* XXX Correct order is lowercase before uppercase. */
108 { /*input.*/ { { 0x0041,0x0042,0x0043,0x0000 },
109 { 0x0041,0x0061,0x0043,0x0000 }, }, /* #5 */
110 /*expect*/ { 0,0,0, +1, },
111 },
112 { /*input.*/ { { 0x0041,0x0061,0x0043,0x0000 },
113 { 0x0041,0x0042,0x0043,0x0000 }, }, /* #6 */
114 /*expect*/ { 0,0,0, -1, },
115 },
116 { /*input.*/ { { 0x0041,0x0042,0x0000 },
117 { 0x0041,0x0042,0x0049,0x0000 }, }, /* #7 */
118 /*expect*/ { 0,0,0, -1, },
119 },
120 { /*input.*/ { { 0x0041,0x0042,0x0049,0x0000 },
121 { 0x0041,0x0042,0x0000 }, }, /* #8 */
122 /*expect*/ { 0,0,0, +1, },
123 },
124 /* Do not assume position of character out of range. */
125 { /*input.*/ { { 0x0041,0x0092,0x0049,0x0000 },
126 { 0x0041,0x008E,0x0049,0x0000 }, }, /* #9 */
127 /*expect*/ { 0,0,0, 0, },
128 },
129 { /*input.*/ { { 0x0041,0x008E,0x0049,0x0000 },
130 { 0x0041,0x0092,0x0049,0x0000 }, }, /* #10 */
131 /*expect*/ { 0,0,0, 0, },
132 },
133 { .is_last = 1 }
134 }
135 },
136 { { Twcscoll, TST_LOC_eucJP },
137 {
138 { /*input.*/ { { 0x3041,0x3042,0x3043,0x0000 },
139 { 0x3041,0x3042,0x3043,0x0000 }, }, /* #1 */
140 /*expect*/ { 0,1,0, 0, },
141 },
142 { /*input.*/ { { 0x0000,0x3041,0x3043,0x0000 },
143 { 0x0000,0x3042,0x3043,0x0000 }, }, /* #2 */
144 /*expect*/ { 0,1,0, 0, },
145 },
146 { /*input.*/ { { 0x3041,0x3041,0x3043,0x0000 },
147 { 0x0000,0x3042,0x3043,0x0000 }, }, /* #3 */
148 /*expect*/ { 0,0,0, +1, },
149 },
150 { /*input.*/ { { 0x0000,0x3042,0x3043,0x0000 },
151 { 0x3041,0x3041,0x3043,0x0000 }, }, /* #4 */
152 /*expect*/ { 0,0,0, -1, },
153 },
154 { /*input.*/ { { 0x3041,0x0042,0x3043,0x0000 },
155 { 0x3041,0x0061,0x3043,0x0000 }, }, /* #5 */
156 /*expect*/ { 0,0,0, -1, },
157 },
158 { /*input.*/ { { 0x3041,0x0061,0x3043,0x0000 },
159 { 0x3041,0x0042,0x3043,0x0000 }, }, /* #6 */
160 /*expect*/ { 0,0,0, +1, },
161 },
162 { /*input.*/ { { 0x3041,0x3042,0xFF71,0x0000 },
163 { 0x3041,0x3042,0x30A2,0x0000 }, }, /* #7 */
164 /*expect*/ { 0,0,0, -1, },
165 },
166 { /*input.*/ { { 0x3041,0x3042,0x30A2,0x0000 },
167 { 0x3041,0x3042,0xFF71,0x0000 }, }, /* #8 */
168 /*expect*/ { 0,0,0, +1, },
169 },
170 { /*input.*/ { { 0x30FF,0x3092,0x3049,0x0000 },
171 { 0x3041,0x308E,0x3049,0x0000 }, }, /* #9 */
172 /*expect*/ { 0,0,0, -1, },
173 },
174 { /*input.*/ { { 0x3041,0x308E,0x3049,0x0000 },
175 { 0x30FF,0x3092,0x3049,0x0000 }, }, /* #10 */
176 /*expect*/ { 0,0,0, +1, },
177 },
178 { .is_last = 1 }
179 }
180 },
181 { { Twcscoll, TST_LOC_end } }
182};
183

source code of glibc/localedata/tests-mbwc/dat_wcscoll.c