1 | /* |
2 | * TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY |
3 | * |
4 | * FILE: dat_wcsrtombs.c |
5 | * |
6 | * WCSTOMBS: size_t wcsrtombs (char *s, const wchar_t **ws, |
7 | * size_t n, mbstate *ps) |
8 | */ |
9 | |
10 | |
11 | /* |
12 | * CAUTION: |
13 | * Do not use a value 0x01 for string data. The test program |
14 | * uses it. |
15 | * |
16 | */ |
17 | |
18 | |
19 | TST_WCSRTOMBS tst_wcsrtombs_loc [] = { |
20 | { |
21 | { Twcsrtombs, TST_LOC_de }, |
22 | { |
23 | /* #01 : Any chars including a null char should not be stored in s. */ |
24 | { /*input.*/ { 1,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 0, 0, 0}, |
25 | /*expect*/ { 0,1,0, "" }, |
26 | }, |
27 | /* #02 : Only one chars should be stored in s. No null termination. */ |
28 | { /*input.*/ { 1,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 1, 0, 0 }, |
29 | /*expect*/ { 0,1,1, "Ä" }, |
30 | }, |
31 | /* #03 : Only two chars should be stored in s. No null termination. */ |
32 | { /*input.*/ { 1,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 2, 0, 0 }, |
33 | /*expect*/ { 0,1,2, "ÄÖ" }, |
34 | }, |
35 | /* #04 : Only three chars should be stored in s. No null |
36 | termination. */ |
37 | { /*input.*/ { 1,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 3, 0, 0 }, |
38 | /*expect*/ { 0,1,3, "ÄÖÜ" }, |
39 | }, |
40 | /* #05 : Only three chars should be stored in s with a null |
41 | termination. */ |
42 | { /*input.*/ { 1,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 4, 0, 0 }, |
43 | /*expect*/ { 0,1,3, "ÄÖÜ" }, |
44 | }, |
45 | /* #06 : Only three chars should be stored in s with a null |
46 | termination. */ |
47 | { /*input.*/ { 1,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 5, 0, 0 }, |
48 | /*expect*/ { 0,1,3, "ÄÖÜ" }, |
49 | }, |
50 | /* #07 : Invalid mb sequence. No chars should be stored in s. */ |
51 | { /*input.*/ { 1,1, { 0x0201,0x0221,0x0000,0x0000 }, 2, 0, 0 }, |
52 | /*expect*/ { EILSEQ,1,(size_t)-1, "" }, |
53 | }, |
54 | /* #08 : s is a null pointer, no chars should be stored in s. */ |
55 | { /*input.*/ { 0,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 0, 0, 0 }, |
56 | /*expect*/ { 0,1,3, "" }, |
57 | }, |
58 | /* #09 : s is a null pointer, no chars should be stored in s. */ |
59 | { /*input.*/ { 0,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 1, 0, 0 }, |
60 | /*expect*/ { 0,1,3, "" }, |
61 | }, |
62 | /* #10 : s is a null pointer, no chars should be stored in s. */ |
63 | { /*input.*/ { 0,1, { 0x00C4,0x00D6,0x00DC,0x0000 }, 5, 0, 0 }, |
64 | /*expect*/ { 0,1,3, "" }, |
65 | }, |
66 | /* #11 : s is a null pointer. No chars should be stored in s. */ |
67 | { /*input.*/ { 0,1, { 0x0201,0x0221,0x0000,0x0000 }, 5, 0, 0 }, |
68 | /*expect*/ { EILSEQ,1,(size_t)-1, "" }, |
69 | }, |
70 | /* #12 : ws is a null wc string, no chars should be stored in s. */ |
71 | { /*input.*/ { 1,1, { 0x0000 }, 5, 0, 0 }, |
72 | /*expect*/ { 0,1,0, "" }, |
73 | }, |
74 | /* #13 : s is a null pointer, no chars should be stored in s. */ |
75 | { /*input.*/ { 0,1, { 0x0000 }, 5, 0, 0 }, |
76 | /*expect*/ { 0,1,0, "" }, |
77 | }, |
78 | { .is_last = 1 } |
79 | } |
80 | }, |
81 | { |
82 | { Twcsrtombs, TST_LOC_enUS }, |
83 | { |
84 | /* #01 : Any chars including a null char should not be stored in s. */ |
85 | { /*input.*/ { 1,1, { 0x0041,0x0042,0x0043,0x0000 }, 0, 0, 0 }, |
86 | /*expect*/ { 0,1,0, "" }, |
87 | }, |
88 | /* #02 : Only one chars should be stored in s. No null termination. */ |
89 | { /*input.*/ { 1,1, { 0x0041,0x0042,0x0043,0x0000 }, 1, 0, 0 }, |
90 | /*expect*/ { 0,1,1, "A" }, |
91 | }, |
92 | /* #03 : Only two chars should be stored in s. No null termination. */ |
93 | { /*input.*/ { 1,1, { 0x0041,0x0042,0x0043,0x0000 }, 2, 0, 0 }, |
94 | /*expect*/ { 0,1,2, "AB" }, |
95 | }, |
96 | /* #04 : Only three chars should be stored in s. No null |
97 | termination. */ |
98 | { /*input.*/ { 1,1, { 0x0041,0x0042,0x0043,0x0000 }, 3, 0, 0 }, |
99 | /*expect*/ { 0,1,3, "ABC" }, |
100 | }, |
101 | /* #05 : Only three chars should be stored in s with a null |
102 | termination. */ |
103 | { /*input.*/ { 1,1, { 0x0041,0x0042,0x0043,0x0000 }, 4, 0, 0 }, |
104 | /*expect*/ { 0,1,3, "ABC" }, |
105 | }, |
106 | /* #06 : Only three chars should be stored in s with a null |
107 | termination. */ |
108 | { /*input.*/ { 1,1, { 0x0041,0x0042,0x0043,0x0000 }, 5, 0, 0 }, |
109 | /*expect*/ { 0,1,3, "ABC" }, |
110 | }, |
111 | /* #07 : Invalid mb sequence. No chars should be stored in s. */ |
112 | { /*input.*/ { 1,1, { 0x0201,0x0221,0x0000,0x0000 }, 2, 0, 0 }, |
113 | /*expect*/ { EILSEQ,1,(size_t)-1, "" }, |
114 | }, |
115 | /* #08 : s is a null pointer, no chars should be stored in s. */ |
116 | { /*input.*/ { 0,1, { 0x0041,0x0042,0x0043,0x0000 }, 0, 0, 0 }, |
117 | /*expect*/ { 0,1,3, "" }, |
118 | }, |
119 | /* #09 : s is a null pointer, no chars should be stored in s. */ |
120 | { /*input.*/ { 0,1, { 0x0041,0x0042,0x0043,0x0000 }, 1, 0, 0 }, |
121 | /*expect*/ { 0,1,3, "" }, |
122 | }, |
123 | /* #10 : s is a null pointer, no chars should be stored in s. */ |
124 | { /*input.*/ { 0,1, { 0x0041,0x0042,0x0043,0x0000 }, 5, 0, 0 }, |
125 | /*expect*/ { 0,1,3, "" }, |
126 | }, |
127 | /* #11 : s is a null pointer. No chars should be stored in s. */ |
128 | { /*input.*/ { 0,1, { 0x0201,0x0221,0x0000,0x0000 }, 5, 0, 0 }, |
129 | /*expect*/ { EILSEQ,1,(size_t)-1, "" }, |
130 | }, |
131 | /* #12 : ws is a null wc string, no chars should be stored in s. */ |
132 | { /*input.*/ { 1,1, { 0x0000 }, 5, 0, 0 }, |
133 | /*expect*/ { 0,1,0, "" }, |
134 | }, |
135 | /* #13 : s is a null pointer, no chars should be stored in s. */ |
136 | { /*input.*/ { 0,1, { 0x0000 }, 5, 0, 0 }, |
137 | /*expect*/ { 0,1,0, "" }, |
138 | }, |
139 | { .is_last = 1 } |
140 | } |
141 | }, |
142 | { |
143 | { Twcsrtombs, TST_LOC_eucJP }, |
144 | { |
145 | |
146 | /* #01 : Any chars including a null char should not be stored in s. */ |
147 | { /*input.*/ { 1,1, { 0x3042,0x3044,0xFF73,0x0000 }, 0, 0, 0 }, |
148 | /*expect*/ { 0,1,0, "" }, |
149 | }, |
150 | /* #02 : Only one chars should be stored in s. No null termination. */ |
151 | { /*input.*/ { 1,1, { 0x3042,0x3044,0xFF73,0x0000 }, 2, 0, 0 }, |
152 | /*expect*/ { 0,1,2, "\244\242" }, |
153 | }, |
154 | /* #03 : Only two chars should be stored in s. No null termination. */ |
155 | { /*input.*/ { 1,1, { 0x3042,0x3044,0xFF73,0x0000 }, 4, 0, 0 }, |
156 | /*expect*/ { 0,1,4, "\244\242\244\244" }, |
157 | }, |
158 | /* #04 : Only three chars should be stored in s. No null |
159 | termination. */ |
160 | { /*input.*/ { 1,1, { 0x3042,0x3044,0xFF73,0x0000 }, 6, 0, 0 }, |
161 | /*expect*/ { 0,1,6, "\244\242\244\244\216\263" }, |
162 | }, |
163 | /* #05 : Only three chars should be stored in s with a null |
164 | termination. */ |
165 | { /*input.*/ { 1,1, { 0x3042,0x3044,0xFF73,0x0000 }, 7, 0, 0 }, |
166 | /*expect*/ { 0,1,6, "\244\242\244\244\216\263" }, |
167 | }, |
168 | /* #06 : Only three chars should be stored in s with a null |
169 | termination. */ |
170 | { /*input.*/ { 1,1, { 0x3042,0x3044,0xFF73,0x0000 }, 8, 0, 0 }, |
171 | /*expect*/ { 0,1,6, "\244\242\244\244\216\263" }, |
172 | }, |
173 | /* #07 : Invalid mb sequence. No chars should be stored in s. */ |
174 | { /*input.*/ { 1,1, { 0x0201,0x0221,0x0000,0x0000 }, 2, 0, 0 }, |
175 | /*expect*/ { EILSEQ,1,-1, "" }, |
176 | }, |
177 | /* #08 : s is a null pointer, no chars should be stored in s. */ |
178 | { /*input.*/ { 0,1, { 0x3042,0x3044,0xFF73,0x0000 }, 0, 0, 0 }, |
179 | /*expect*/ { 0,1,6, "" }, |
180 | }, |
181 | /* #09 : s is a null pointer, no chars should be stored in s. */ |
182 | { /*input.*/ { 0,1, { 0x3042,0x3044,0xFF73,0x0000 }, 1, 0, 0 }, |
183 | /*expect*/ { 0,1,6, "" }, |
184 | }, |
185 | /* #10 : s is a null pointer, no chars should be stored in s. */ |
186 | { /*input.*/ { 0,1, { 0x3042,0x3044,0xFF73,0x0000 }, 8, 0, 0 }, |
187 | /*expect*/ { 0,1,6, "" }, |
188 | }, |
189 | /* #11 : s is a null pointer. No chars should be stored in s. */ |
190 | { /*input.*/ { 0,1, { 0x0201,0x0221,0x0000,0x0000 }, 5, 0, 0 }, |
191 | /*expect*/ { EILSEQ,1,(size_t)-1, "" }, |
192 | }, |
193 | /* #12 : ws is a null wc string, no chars should be stored in s. */ |
194 | { /*input.*/ { 1,1, { 0x0000 }, 5, 0, 0 }, |
195 | /*expect*/ { 0,1,0, "" }, |
196 | }, |
197 | /* #13 : s is a null pointer, no chars should be stored in s. */ |
198 | { /*input.*/ { 0,1, { 0x0000 }, 5, 0, 0 }, |
199 | /*expect*/ { 0,1,0, "" }, |
200 | }, |
201 | { .is_last = 1 } |
202 | } |
203 | }, |
204 | { |
205 | { Twcsrtombs, TST_LOC_end } |
206 | } |
207 | }; |
208 | |