1/*-
2 * Copyright (c) 2002 Tim J. Robbins
3 * All rights reserved.
4 *
5 * Copyright (c) 2013 Ed Schouten <ed@FreeBSD.org>
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
--- 17 unchanged lines hidden (view full) ---
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29/*
30 * Test program for c16rtomb() as specified by ISO/IEC 9899:2011.
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/tools/regression/lib/libc/locale/test-c16rtomb.c 251314 2013-06-03 17:17:56Z ed $");
35
36#include <assert.h>
37#include <errno.h>
38#include <limits.h>
39#include <locale.h>
40#include <stdio.h>
41#include <string.h>
42#include <uchar.h>
--- 34 unchanged lines hidden (view full) ---
77 assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
78
79 /* Unicode character 'Pile of poo'. */
80 memset(&s, 0, sizeof(s));
81 memset(buf, 0xcc, sizeof(buf));
82 assert(c16rtomb(buf, 0xd83d, &s) == 0);
83 assert(c16rtomb(buf, 0xdca9, &s) == (size_t)-1);
84 assert(errno == EILSEQ);
85 assert((unsigned char)buf[0] == 0xcc);
86
87 /*
88 * ISO8859-1.
89 */
90
91 assert(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-1"),
92 "en_US.ISO8859-1") == 0);
93
94 /* Unicode character 'Euro sign'. */
95 memset(&s, 0, sizeof(s));
96 memset(buf, 0xcc, sizeof(buf));
97 assert(c16rtomb(buf, 0x20ac, &s) == (size_t)-1);
98 assert(errno == EILSEQ);
99 assert((unsigned char)buf[0] == 0xcc);
100
101 /*
102 * ISO8859-15.
103 */
104
105 assert(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-15"),
106 "en_US.ISO8859-15") == 0);
107
108 /* Unicode character 'Euro sign'. */
109 memset(&s, 0, sizeof(s));
110 memset(buf, 0xcc, sizeof(buf));
111 assert(c16rtomb(buf, 0x20ac, &s) == 1);
112 assert((unsigned char)buf[0] == 0xa4 && (unsigned char)buf[1] == 0xcc);
113
114 /*
115 * UTF-8.
116 */
117
118 assert(strcmp(setlocale(LC_CTYPE, "en_US.UTF-8"), "en_US.UTF-8") == 0);
119
120 /* Unicode character 'Pile of poo'. */
121 memset(&s, 0, sizeof(s));
122 memset(buf, 0xcc, sizeof(buf));
--- 4 unchanged lines hidden (view full) ---
127 (unsigned char)buf[4] == 0xcc);
128
129 /* Invalid code; 'Pile of poo' without the trail surrogate. */
130 memset(&s, 0, sizeof(s));
131 memset(buf, 0xcc, sizeof(buf));
132 assert(c16rtomb(buf, 0xd83d, &s) == 0);
133 assert(c16rtomb(buf, L'A', &s) == (size_t)-1);
134 assert(errno == EILSEQ);
135 assert((unsigned char)buf[0] == 0xcc);
136
137 /* Invalid code; 'Pile of poo' without the lead surrogate. */
138 memset(&s, 0, sizeof(s));
139 memset(buf, 0xcc, sizeof(buf));
140 assert(c16rtomb(buf, 0xdca9, &s) == (size_t)-1);
141 assert(errno == EILSEQ);
142 assert((unsigned char)buf[0] == 0xcc);
143
144 printf("ok 1 - c16rtomb()\n");
145}
2 * Copyright (c) 2002 Tim J. Robbins
3 * All rights reserved.
4 *
5 * Copyright (c) 2013 Ed Schouten <ed@FreeBSD.org>
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
--- 17 unchanged lines hidden (view full) ---
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29/*
30 * Test program for c16rtomb() as specified by ISO/IEC 9899:2011.
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/tools/regression/lib/libc/locale/test-c16rtomb.c 251314 2013-06-03 17:17:56Z ed $");
35
36#include <assert.h>
37#include <errno.h>
38#include <limits.h>
39#include <locale.h>
40#include <stdio.h>
41#include <string.h>
42#include <uchar.h>
--- 34 unchanged lines hidden (view full) ---
77 assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
78
79 /* Unicode character 'Pile of poo'. */
80 memset(&s, 0, sizeof(s));
81 memset(buf, 0xcc, sizeof(buf));
82 assert(c16rtomb(buf, 0xd83d, &s) == 0);
83 assert(c16rtomb(buf, 0xdca9, &s) == (size_t)-1);
84 assert(errno == EILSEQ);
85 assert((unsigned char)buf[0] == 0xcc);
86
87 /*
88 * ISO8859-1.
89 */
90
91 assert(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-1"),
92 "en_US.ISO8859-1") == 0);
93
94 /* Unicode character 'Euro sign'. */
95 memset(&s, 0, sizeof(s));
96 memset(buf, 0xcc, sizeof(buf));
97 assert(c16rtomb(buf, 0x20ac, &s) == (size_t)-1);
98 assert(errno == EILSEQ);
99 assert((unsigned char)buf[0] == 0xcc);
100
101 /*
102 * ISO8859-15.
103 */
104
105 assert(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-15"),
106 "en_US.ISO8859-15") == 0);
107
108 /* Unicode character 'Euro sign'. */
109 memset(&s, 0, sizeof(s));
110 memset(buf, 0xcc, sizeof(buf));
111 assert(c16rtomb(buf, 0x20ac, &s) == 1);
112 assert((unsigned char)buf[0] == 0xa4 && (unsigned char)buf[1] == 0xcc);
113
114 /*
115 * UTF-8.
116 */
117
118 assert(strcmp(setlocale(LC_CTYPE, "en_US.UTF-8"), "en_US.UTF-8") == 0);
119
120 /* Unicode character 'Pile of poo'. */
121 memset(&s, 0, sizeof(s));
122 memset(buf, 0xcc, sizeof(buf));
--- 4 unchanged lines hidden (view full) ---
127 (unsigned char)buf[4] == 0xcc);
128
129 /* Invalid code; 'Pile of poo' without the trail surrogate. */
130 memset(&s, 0, sizeof(s));
131 memset(buf, 0xcc, sizeof(buf));
132 assert(c16rtomb(buf, 0xd83d, &s) == 0);
133 assert(c16rtomb(buf, L'A', &s) == (size_t)-1);
134 assert(errno == EILSEQ);
135 assert((unsigned char)buf[0] == 0xcc);
136
137 /* Invalid code; 'Pile of poo' without the lead surrogate. */
138 memset(&s, 0, sizeof(s));
139 memset(buf, 0xcc, sizeof(buf));
140 assert(c16rtomb(buf, 0xdca9, &s) == (size_t)-1);
141 assert(errno == EILSEQ);
142 assert((unsigned char)buf[0] == 0xcc);
143
144 printf("ok 1 - c16rtomb()\n");
145}