Deleted Added
full compact
wctomb_test.c (106686) wctomb_test.c (128005)
1/*-
1/*-
2 * Copyright (c) 2002 Tim J. Robbins
2 * Copyright (c) 2002-2004 Tim J. Robbins
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27/*
28 * Test program for wctomb(), as specified by IEEE Std. 1003.1-2001 and
29 * ISO/IEC 9899:1999.
30 *
31 * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
32 * "ja_JP.eucJP". Other encodings are not tested.
33 */
34
35#include <sys/cdefs.h>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27/*
28 * Test program for wctomb(), as specified by IEEE Std. 1003.1-2001 and
29 * ISO/IEC 9899:1999.
30 *
31 * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
32 * "ja_JP.eucJP". Other encodings are not tested.
33 */
34
35#include <sys/cdefs.h>
36__FBSDID("$FreeBSD: head/tools/regression/lib/libc/locale/test-wctomb.c 106686 2002-11-09 04:33:02Z tjr $");
36__FBSDID("$FreeBSD: head/tools/regression/lib/libc/locale/test-wctomb.c 128005 2004-04-07 11:02:51Z tjr $");
37
38#include <assert.h>
39#include <errno.h>
40#include <limits.h>
41#include <locale.h>
42#include <stdio.h>
43#include <stdlib.h>
44#include <string.h>
45
46int
47main(int argc, char *argv[])
48{
49 size_t len;
50 char buf[MB_LEN_MAX + 1];
51
52 /*
53 * C/POSIX locale.
54 */
55
56 assert(MB_CUR_MAX == 1);
57
58 /* No shift states in C locale. */
59 assert(wctomb(NULL, L'\0') == 0);
60
61 /* Null wide character. */
62 memset(buf, 0xcc, sizeof(buf));
63 len = wctomb(buf, L'\0');
64 assert(len == 1);
65 assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
66
67 /* Latin letter A. */
68 memset(buf, 0xcc, sizeof(buf));
69 len = wctomb(buf, L'A');
70 assert(len == 1);
71 assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
72
73 /* Invalid code. */
74 assert(wctomb(buf, UCHAR_MAX + 1) == -1);
37
38#include <assert.h>
39#include <errno.h>
40#include <limits.h>
41#include <locale.h>
42#include <stdio.h>
43#include <stdlib.h>
44#include <string.h>
45
46int
47main(int argc, char *argv[])
48{
49 size_t len;
50 char buf[MB_LEN_MAX + 1];
51
52 /*
53 * C/POSIX locale.
54 */
55
56 assert(MB_CUR_MAX == 1);
57
58 /* No shift states in C locale. */
59 assert(wctomb(NULL, L'\0') == 0);
60
61 /* Null wide character. */
62 memset(buf, 0xcc, sizeof(buf));
63 len = wctomb(buf, L'\0');
64 assert(len == 1);
65 assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
66
67 /* Latin letter A. */
68 memset(buf, 0xcc, sizeof(buf));
69 len = wctomb(buf, L'A');
70 assert(len == 1);
71 assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
72
73 /* Invalid code. */
74 assert(wctomb(buf, UCHAR_MAX + 1) == -1);
75 assert(wctomb(NULL, 0) == 0);
75
76 /*
77 * Japanese (EUC) locale.
78 */
79
80 assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
81 assert(MB_CUR_MAX == 3);
82
83 /* No shift states in EUC encoding. */
84 assert(wctomb(NULL, L'\0') == 0);
85
86 /* Null wide character. */
87 memset(buf, 0xcc, sizeof(buf));
88 len = wctomb(buf, L'\0');
89 assert(len == 1);
90 assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
91
92 /* Latin letter A. */
93 memset(buf, 0xcc, sizeof(buf));
94 len = wctomb(buf, L'A');
95 assert(len == 1);
96 assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
97
98 /* Full width letter A. */
99 memset(buf, 0xcc, sizeof(buf));
100 len = wctomb(buf, 0xa3c1);
101 assert(len == 2);
102 assert((unsigned char)buf[0] == 0xa3 &&
103 (unsigned char)buf[1] == 0xc1 &&
104 (unsigned char)buf[2] == 0xcc);
105
106 printf("PASS wctomb()\n");
107
108 return (0);
109}
76
77 /*
78 * Japanese (EUC) locale.
79 */
80
81 assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
82 assert(MB_CUR_MAX == 3);
83
84 /* No shift states in EUC encoding. */
85 assert(wctomb(NULL, L'\0') == 0);
86
87 /* Null wide character. */
88 memset(buf, 0xcc, sizeof(buf));
89 len = wctomb(buf, L'\0');
90 assert(len == 1);
91 assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
92
93 /* Latin letter A. */
94 memset(buf, 0xcc, sizeof(buf));
95 len = wctomb(buf, L'A');
96 assert(len == 1);
97 assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
98
99 /* Full width letter A. */
100 memset(buf, 0xcc, sizeof(buf));
101 len = wctomb(buf, 0xa3c1);
102 assert(len == 2);
103 assert((unsigned char)buf[0] == 0xa3 &&
104 (unsigned char)buf[1] == 0xc1 &&
105 (unsigned char)buf[2] == 0xcc);
106
107 printf("PASS wctomb()\n");
108
109 return (0);
110}