1 /* Test of compatibility decomposition of Unicode characters.
2 Copyright (C) 2009 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* Written by Bruno Haible <bruno@clisp.org>, 2009. */
21 #include "uninorm/decompose-internal.h"
28 #define ASSERT(expr) \
33 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
43 ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH];
47 ret = uc_compat_decomposition (0x0020, decomposed);
50 /* LATIN CAPITAL LETTER A WITH DIAERESIS */
51 ret = uc_compat_decomposition (0x00C4, decomposed);
53 ASSERT (decomposed[0] == 0x0041);
54 ASSERT (decomposed[1] == 0x0308);
56 /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
57 ret = uc_compat_decomposition (0x01DE, decomposed);
59 ASSERT (decomposed[0] == 0x00C4);
60 ASSERT (decomposed[1] == 0x0304);
62 /* GREEK DIALYTIKA AND PERISPOMENI */
63 ret = uc_compat_decomposition (0x1FC1, decomposed);
65 ASSERT (decomposed[0] == 0x00A8);
66 ASSERT (decomposed[1] == 0x0342);
69 ret = uc_compat_decomposition (0x2113, decomposed);
71 ASSERT (decomposed[0] == 0x006C);
74 ret = uc_compat_decomposition (0x00A0, decomposed);
76 ASSERT (decomposed[0] == 0x0020);
78 /* ARABIC LETTER VEH INITIAL FORM */
79 ret = uc_compat_decomposition (0xFB6C, decomposed);
81 ASSERT (decomposed[0] == 0x06A4);
83 /* ARABIC LETTER VEH MEDIAL FORM */
84 ret = uc_compat_decomposition (0xFB6D, decomposed);
86 ASSERT (decomposed[0] == 0x06A4);
88 /* ARABIC LETTER VEH FINAL FORM */
89 ret = uc_compat_decomposition (0xFB6B, decomposed);
91 ASSERT (decomposed[0] == 0x06A4);
93 /* ARABIC LETTER VEH ISOLATED FORM */
94 ret = uc_compat_decomposition (0xFB6A, decomposed);
96 ASSERT (decomposed[0] == 0x06A4);
98 /* CIRCLED NUMBER FIFTEEN */
99 ret = uc_compat_decomposition (0x246E, decomposed);
101 ASSERT (decomposed[0] == 0x0031);
102 ASSERT (decomposed[1] == 0x0035);
104 /* TRADE MARK SIGN */
105 ret = uc_compat_decomposition (0x2122, decomposed);
107 ASSERT (decomposed[0] == 0x0054);
108 ASSERT (decomposed[1] == 0x004D);
110 /* LATIN SUBSCRIPT SMALL LETTER I */
111 ret = uc_compat_decomposition (0x1D62, decomposed);
113 ASSERT (decomposed[0] == 0x0069);
115 /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */
116 ret = uc_compat_decomposition (0xFE35, decomposed);
118 ASSERT (decomposed[0] == 0x0028);
120 /* FULLWIDTH LATIN CAPITAL LETTER A */
121 ret = uc_compat_decomposition (0xFF21, decomposed);
123 ASSERT (decomposed[0] == 0x0041);
125 /* HALFWIDTH IDEOGRAPHIC COMMA */
126 ret = uc_compat_decomposition (0xFF64, decomposed);
128 ASSERT (decomposed[0] == 0x3001);
130 /* SMALL IDEOGRAPHIC COMMA */
131 ret = uc_compat_decomposition (0xFE51, decomposed);
133 ASSERT (decomposed[0] == 0x3001);
136 ret = uc_compat_decomposition (0x3392, decomposed);
138 ASSERT (decomposed[0] == 0x004D);
139 ASSERT (decomposed[1] == 0x0048);
140 ASSERT (decomposed[2] == 0x007A);
142 /* VULGAR FRACTION THREE EIGHTHS */
143 ret = uc_compat_decomposition (0x215C, decomposed);
145 ASSERT (decomposed[0] == 0x0033);
146 ASSERT (decomposed[1] == 0x2044);
147 ASSERT (decomposed[2] == 0x0038);
150 ret = uc_compat_decomposition (0x00B5, decomposed);
152 ASSERT (decomposed[0] == 0x03BC);
154 /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */
155 ret = uc_compat_decomposition (0xFDFA, decomposed);
157 ASSERT (decomposed[0] == 0x0635);
158 ASSERT (decomposed[1] == 0x0644);
159 ASSERT (decomposed[2] == 0x0649);
160 ASSERT (decomposed[3] == 0x0020);
161 ASSERT (decomposed[4] == 0x0627);
162 ASSERT (decomposed[5] == 0x0644);
163 ASSERT (decomposed[6] == 0x0644);
164 ASSERT (decomposed[7] == 0x0647);
165 ASSERT (decomposed[8] == 0x0020);
166 ASSERT (decomposed[9] == 0x0639);
167 ASSERT (decomposed[10] == 0x0644);
168 ASSERT (decomposed[11] == 0x064A);
169 ASSERT (decomposed[12] == 0x0647);
170 ASSERT (decomposed[13] == 0x0020);
171 ASSERT (decomposed[14] == 0x0648);
172 ASSERT (decomposed[15] == 0x0633);
173 ASSERT (decomposed[16] == 0x0644);
174 ASSERT (decomposed[17] == 0x0645);
176 /* HANGUL SYLLABLE GEUL */
177 ret = uc_compat_decomposition (0xAE00, decomposed);
178 /* See the clarification at <http://www.unicode.org/versions/Unicode5.1.0/>,
179 section "Clarification of Hangul Jamo Handling". */
182 ASSERT (decomposed[0] == 0xADF8);
183 ASSERT (decomposed[1] == 0x11AF);
186 ASSERT (decomposed[0] == 0x1100);
187 ASSERT (decomposed[1] == 0x1173);
188 ASSERT (decomposed[2] == 0x11AF);
191 /* HANGUL SYLLABLE GEU */
192 ret = uc_compat_decomposition (0xADF8, decomposed);
194 ASSERT (decomposed[0] == 0x1100);
195 ASSERT (decomposed[1] == 0x1173);