1/* Test of compatibility decomposition of Unicode characters.
2   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
3
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.
8
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.
13
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/>.  */
16
17/* Written by Bruno Haible <bruno@clisp.org>, 2009.  */
18
19#include <config.h>
20
21#include "uninorm/decompose-internal.h"
22
23#include "uninorm.h"
24#include "macros.h"
25
26int
27main ()
28{
29  ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH];
30  int ret;
31
32  /* SPACE */
33  ret = uc_compat_decomposition (0x0020, decomposed);
34  ASSERT (ret == -1);
35
36  /* LATIN CAPITAL LETTER A WITH DIAERESIS */
37  ret = uc_compat_decomposition (0x00C4, decomposed);
38  ASSERT (ret == 2);
39  ASSERT (decomposed[0] == 0x0041);
40  ASSERT (decomposed[1] == 0x0308);
41
42  /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
43  ret = uc_compat_decomposition (0x01DE, decomposed);
44  ASSERT (ret == 2);
45  ASSERT (decomposed[0] == 0x00C4);
46  ASSERT (decomposed[1] == 0x0304);
47
48  /* GREEK DIALYTIKA AND PERISPOMENI */
49  ret = uc_compat_decomposition (0x1FC1, decomposed);
50  ASSERT (ret == 2);
51  ASSERT (decomposed[0] == 0x00A8);
52  ASSERT (decomposed[1] == 0x0342);
53
54  /* SCRIPT SMALL L */
55  ret = uc_compat_decomposition (0x2113, decomposed);
56  ASSERT (ret == 1);
57  ASSERT (decomposed[0] == 0x006C);
58
59  /* NO-BREAK SPACE */
60  ret = uc_compat_decomposition (0x00A0, decomposed);
61  ASSERT (ret == 1);
62  ASSERT (decomposed[0] == 0x0020);
63
64  /* ARABIC LETTER VEH INITIAL FORM */
65  ret = uc_compat_decomposition (0xFB6C, decomposed);
66  ASSERT (ret == 1);
67  ASSERT (decomposed[0] == 0x06A4);
68
69  /* ARABIC LETTER VEH MEDIAL FORM */
70  ret = uc_compat_decomposition (0xFB6D, decomposed);
71  ASSERT (ret == 1);
72  ASSERT (decomposed[0] == 0x06A4);
73
74  /* ARABIC LETTER VEH FINAL FORM */
75  ret = uc_compat_decomposition (0xFB6B, decomposed);
76  ASSERT (ret == 1);
77  ASSERT (decomposed[0] == 0x06A4);
78
79  /* ARABIC LETTER VEH ISOLATED FORM */
80  ret = uc_compat_decomposition (0xFB6A, decomposed);
81  ASSERT (ret == 1);
82  ASSERT (decomposed[0] == 0x06A4);
83
84  /* CIRCLED NUMBER FIFTEEN */
85  ret = uc_compat_decomposition (0x246E, decomposed);
86  ASSERT (ret == 2);
87  ASSERT (decomposed[0] == 0x0031);
88  ASSERT (decomposed[1] == 0x0035);
89
90  /* TRADE MARK SIGN */
91  ret = uc_compat_decomposition (0x2122, decomposed);
92  ASSERT (ret == 2);
93  ASSERT (decomposed[0] == 0x0054);
94  ASSERT (decomposed[1] == 0x004D);
95
96  /* LATIN SUBSCRIPT SMALL LETTER I */
97  ret = uc_compat_decomposition (0x1D62, decomposed);
98  ASSERT (ret == 1);
99  ASSERT (decomposed[0] == 0x0069);
100
101  /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */
102  ret = uc_compat_decomposition (0xFE35, decomposed);
103  ASSERT (ret == 1);
104  ASSERT (decomposed[0] == 0x0028);
105
106  /* FULLWIDTH LATIN CAPITAL LETTER A */
107  ret = uc_compat_decomposition (0xFF21, decomposed);
108  ASSERT (ret == 1);
109  ASSERT (decomposed[0] == 0x0041);
110
111  /* HALFWIDTH IDEOGRAPHIC COMMA */
112  ret = uc_compat_decomposition (0xFF64, decomposed);
113  ASSERT (ret == 1);
114  ASSERT (decomposed[0] == 0x3001);
115
116  /* SMALL IDEOGRAPHIC COMMA */
117  ret = uc_compat_decomposition (0xFE51, decomposed);
118  ASSERT (ret == 1);
119  ASSERT (decomposed[0] == 0x3001);
120
121  /* SQUARE MHZ */
122  ret = uc_compat_decomposition (0x3392, decomposed);
123  ASSERT (ret == 3);
124  ASSERT (decomposed[0] == 0x004D);
125  ASSERT (decomposed[1] == 0x0048);
126  ASSERT (decomposed[2] == 0x007A);
127
128  /* VULGAR FRACTION THREE EIGHTHS */
129  ret = uc_compat_decomposition (0x215C, decomposed);
130  ASSERT (ret == 3);
131  ASSERT (decomposed[0] == 0x0033);
132  ASSERT (decomposed[1] == 0x2044);
133  ASSERT (decomposed[2] == 0x0038);
134
135  /* MICRO SIGN */
136  ret = uc_compat_decomposition (0x00B5, decomposed);
137  ASSERT (ret == 1);
138  ASSERT (decomposed[0] == 0x03BC);
139
140  /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */
141  ret = uc_compat_decomposition (0xFDFA, decomposed);
142  ASSERT (ret == 18);
143  ASSERT (decomposed[0] == 0x0635);
144  ASSERT (decomposed[1] == 0x0644);
145  ASSERT (decomposed[2] == 0x0649);
146  ASSERT (decomposed[3] == 0x0020);
147  ASSERT (decomposed[4] == 0x0627);
148  ASSERT (decomposed[5] == 0x0644);
149  ASSERT (decomposed[6] == 0x0644);
150  ASSERT (decomposed[7] == 0x0647);
151  ASSERT (decomposed[8] == 0x0020);
152  ASSERT (decomposed[9] == 0x0639);
153  ASSERT (decomposed[10] == 0x0644);
154  ASSERT (decomposed[11] == 0x064A);
155  ASSERT (decomposed[12] == 0x0647);
156  ASSERT (decomposed[13] == 0x0020);
157  ASSERT (decomposed[14] == 0x0648);
158  ASSERT (decomposed[15] == 0x0633);
159  ASSERT (decomposed[16] == 0x0644);
160  ASSERT (decomposed[17] == 0x0645);
161
162  /* HANGUL SYLLABLE GEUL */
163  ret = uc_compat_decomposition (0xAE00, decomposed);
164  /* See the clarification at <http://www.unicode.org/versions/Unicode5.1.0/>,
165     section "Clarification of Hangul Jamo Handling".  */
166#if 1
167  ASSERT (ret == 2);
168  ASSERT (decomposed[0] == 0xADF8);
169  ASSERT (decomposed[1] == 0x11AF);
170#else
171  ASSERT (ret == 3);
172  ASSERT (decomposed[0] == 0x1100);
173  ASSERT (decomposed[1] == 0x1173);
174  ASSERT (decomposed[2] == 0x11AF);
175#endif
176
177  /* HANGUL SYLLABLE GEU */
178  ret = uc_compat_decomposition (0xADF8, decomposed);
179  ASSERT (ret == 2);
180  ASSERT (decomposed[0] == 0x1100);
181  ASSERT (decomposed[1] == 0x1173);
182
183  return 0;
184}
185