1
/* -*- buffer-read-only: t -*- vi: set ro: */
2
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
3
/* Test of conversion of multibyte character to wide character.
4
Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
6
This program is free software: you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 3 of the License, or
9
(at your option) any later version.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
/* Written by Bruno Haible <bruno@clisp.org>, 2008. */
25
#include "signature.h"
26
SIGNATURE_CHECK (mbrtowc, size_t, (wchar_t *, char const *, size_t,
36
main (int argc, char *argv[])
42
/* configure should already have checked that the locale is supported. */
43
if (setlocale (LC_ALL, "") == NULL)
46
/* Test zero-length input. */
48
memset (&state, '\0', sizeof (mbstate_t));
49
wc = (wchar_t) 0xBADFACE;
50
ret = mbrtowc (&wc, "x", 0, &state);
51
/* gnulib's implementation returns (size_t)(-2).
52
The AIX 5.1 implementation returns (size_t)(-1).
53
glibc's implementation returns 0. */
54
ASSERT (ret == (size_t)(-2) || ret == (size_t)(-1) || ret == 0);
55
ASSERT (mbsinit (&state));
58
/* Test NUL byte input. */
60
memset (&state, '\0', sizeof (mbstate_t));
61
wc = (wchar_t) 0xBADFACE;
62
ret = mbrtowc (&wc, "", 1, &state);
65
ASSERT (mbsinit (&state));
66
ret = mbrtowc (NULL, "", 1, &state);
68
ASSERT (mbsinit (&state));
71
/* Test single-byte input. */
76
memset (&state, '\0', sizeof (mbstate_t));
77
for (c = 0; c < 0x100; c++)
80
case '\t': case '\v': case '\f':
81
case ' ': case '!': case '"': case '#': case '%':
82
case '&': case '\'': case '(': case ')': case '*':
83
case '+': case ',': case '-': case '.': case '/':
84
case '0': case '1': case '2': case '3': case '4':
85
case '5': case '6': case '7': case '8': case '9':
86
case ':': case ';': case '<': case '=': case '>':
88
case 'A': case 'B': case 'C': case 'D': case 'E':
89
case 'F': case 'G': case 'H': case 'I': case 'J':
90
case 'K': case 'L': case 'M': case 'N': case 'O':
91
case 'P': case 'Q': case 'R': case 'S': case 'T':
92
case 'U': case 'V': case 'W': case 'X': case 'Y':
94
case '[': case '\\': case ']': case '^': case '_':
95
case 'a': case 'b': case 'c': case 'd': case 'e':
96
case 'f': case 'g': case 'h': case 'i': case 'j':
97
case 'k': case 'l': case 'm': case 'n': case 'o':
98
case 'p': case 'q': case 'r': case 's': case 't':
99
case 'u': case 'v': case 'w': case 'x': case 'y':
100
case 'z': case '{': case '|': case '}': case '~':
101
/* c is in the ISO C "basic character set". */
103
wc = (wchar_t) 0xBADFACE;
104
ret = mbrtowc (&wc, buf, 1, &state);
107
ASSERT (mbsinit (&state));
108
ret = mbrtowc (NULL, buf, 1, &state);
110
ASSERT (mbsinit (&state));
115
/* Test special calling convention, passing a NULL pointer. */
117
memset (&state, '\0', sizeof (mbstate_t));
118
wc = (wchar_t) 0xBADFACE;
119
ret = mbrtowc (&wc, NULL, 5, &state);
121
ASSERT (wc == (wchar_t) 0xBADFACE);
122
ASSERT (mbsinit (&state));
129
/* Locale encoding is ISO-8859-1 or ISO-8859-15. */
131
char input[] = "B\374\337er"; /* "Büßer" */
132
memset (&state, '\0', sizeof (mbstate_t));
134
wc = (wchar_t) 0xBADFACE;
135
ret = mbrtowc (&wc, input, 1, &state);
138
ASSERT (mbsinit (&state));
141
wc = (wchar_t) 0xBADFACE;
142
ret = mbrtowc (&wc, input + 1, 1, &state);
144
ASSERT (wctob (wc) == (unsigned char) '\374');
145
ASSERT (mbsinit (&state));
148
wc = (wchar_t) 0xBADFACE;
149
ret = mbrtowc (&wc, input + 2, 3, &state);
151
ASSERT (wctob (wc) == (unsigned char) '\337');
152
ASSERT (mbsinit (&state));
155
wc = (wchar_t) 0xBADFACE;
156
ret = mbrtowc (&wc, input + 3, 2, &state);
159
ASSERT (mbsinit (&state));
162
wc = (wchar_t) 0xBADFACE;
163
ret = mbrtowc (&wc, input + 4, 1, &state);
166
ASSERT (mbsinit (&state));
171
/* Locale encoding is UTF-8. */
173
char input[] = "B\303\274\303\237er"; /* "Büßer" */
174
memset (&state, '\0', sizeof (mbstate_t));
176
wc = (wchar_t) 0xBADFACE;
177
ret = mbrtowc (&wc, input, 1, &state);
180
ASSERT (mbsinit (&state));
183
wc = (wchar_t) 0xBADFACE;
184
ret = mbrtowc (&wc, input + 1, 1, &state);
185
ASSERT (ret == (size_t)(-2));
186
ASSERT (wc == (wchar_t) 0xBADFACE);
187
ASSERT (!mbsinit (&state));
190
wc = (wchar_t) 0xBADFACE;
191
ret = mbrtowc (&wc, input + 2, 5, &state);
193
ASSERT (wctob (wc) == EOF);
194
ASSERT (mbsinit (&state));
197
wc = (wchar_t) 0xBADFACE;
198
ret = mbrtowc (&wc, input + 3, 4, &state);
200
ASSERT (wctob (wc) == EOF);
201
ASSERT (mbsinit (&state));
205
wc = (wchar_t) 0xBADFACE;
206
ret = mbrtowc (&wc, input + 5, 2, &state);
209
ASSERT (mbsinit (&state));
212
wc = (wchar_t) 0xBADFACE;
213
ret = mbrtowc (&wc, input + 6, 1, &state);
216
ASSERT (mbsinit (&state));
221
/* Locale encoding is EUC-JP. */
223
char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */
224
memset (&state, '\0', sizeof (mbstate_t));
226
wc = (wchar_t) 0xBADFACE;
227
ret = mbrtowc (&wc, input, 1, &state);
230
ASSERT (mbsinit (&state));
233
wc = (wchar_t) 0xBADFACE;
234
ret = mbrtowc (&wc, input + 1, 2, &state);
236
ASSERT (wctob (wc) == EOF);
237
ASSERT (mbsinit (&state));
241
wc = (wchar_t) 0xBADFACE;
242
ret = mbrtowc (&wc, input + 3, 1, &state);
243
ASSERT (ret == (size_t)(-2));
244
ASSERT (wc == (wchar_t) 0xBADFACE);
245
ASSERT (!mbsinit (&state));
248
wc = (wchar_t) 0xBADFACE;
249
ret = mbrtowc (&wc, input + 4, 4, &state);
251
ASSERT (wctob (wc) == EOF);
252
ASSERT (mbsinit (&state));
255
wc = (wchar_t) 0xBADFACE;
256
ret = mbrtowc (&wc, input + 5, 3, &state);
258
ASSERT (wctob (wc) == EOF);
259
ASSERT (mbsinit (&state));
263
wc = (wchar_t) 0xBADFACE;
264
ret = mbrtowc (&wc, input + 7, 1, &state);
267
ASSERT (mbsinit (&state));
272
/* Locale encoding is GB18030. */
274
char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
275
memset (&state, '\0', sizeof (mbstate_t));
277
wc = (wchar_t) 0xBADFACE;
278
ret = mbrtowc (&wc, input, 1, &state);
281
ASSERT (mbsinit (&state));
284
wc = (wchar_t) 0xBADFACE;
285
ret = mbrtowc (&wc, input + 1, 1, &state);
286
ASSERT (ret == (size_t)(-2));
287
ASSERT (wc == (wchar_t) 0xBADFACE);
288
ASSERT (!mbsinit (&state));
291
wc = (wchar_t) 0xBADFACE;
292
ret = mbrtowc (&wc, input + 2, 7, &state);
294
ASSERT (wctob (wc) == EOF);
295
ASSERT (mbsinit (&state));
298
wc = (wchar_t) 0xBADFACE;
299
ret = mbrtowc (&wc, input + 3, 6, &state);
301
ASSERT (wctob (wc) == EOF);
302
ASSERT (mbsinit (&state));
308
wc = (wchar_t) 0xBADFACE;
309
ret = mbrtowc (&wc, input + 7, 2, &state);
312
ASSERT (mbsinit (&state));
315
wc = (wchar_t) 0xBADFACE;
316
ret = mbrtowc (&wc, input + 8, 1, &state);
319
ASSERT (mbsinit (&state));