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