1/* Test of canonical 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.h"
22
23#include "macros.h"
24
25int
26main ()
27{
28  ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH];
29  int ret;
30
31  /* SPACE */
32  ret = uc_canonical_decomposition (0x0020, decomposed);
33  ASSERT (ret == -1);
34
35  /* LATIN CAPITAL LETTER A WITH DIAERESIS */
36  ret = uc_canonical_decomposition (0x00C4, decomposed);
37  ASSERT (ret == 2);
38  ASSERT (decomposed[0] == 0x0041);
39  ASSERT (decomposed[1] == 0x0308);
40
41  /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
42  ret = uc_canonical_decomposition (0x01DE, decomposed);
43  ASSERT (ret == 2);
44  ASSERT (decomposed[0] == 0x00C4);
45  ASSERT (decomposed[1] == 0x0304);
46
47  /* GREEK DIALYTIKA AND PERISPOMENI */
48  ret = uc_canonical_decomposition (0x1FC1, decomposed);
49  ASSERT (ret == 2);
50  ASSERT (decomposed[0] == 0x00A8);
51  ASSERT (decomposed[1] == 0x0342);
52
53  /* SCRIPT SMALL L */
54  ret = uc_canonical_decomposition (0x2113, decomposed);
55  ASSERT (ret == -1);
56
57  /* NO-BREAK SPACE */
58  ret = uc_canonical_decomposition (0x00A0, decomposed);
59  ASSERT (ret == -1);
60
61  /* ARABIC LETTER VEH INITIAL FORM */
62  ret = uc_canonical_decomposition (0xFB6C, decomposed);
63  ASSERT (ret == -1);
64
65  /* ARABIC LETTER VEH MEDIAL FORM */
66  ret = uc_canonical_decomposition (0xFB6D, decomposed);
67  ASSERT (ret == -1);
68
69  /* ARABIC LETTER VEH FINAL FORM */
70  ret = uc_canonical_decomposition (0xFB6B, decomposed);
71  ASSERT (ret == -1);
72
73  /* ARABIC LETTER VEH ISOLATED FORM */
74  ret = uc_canonical_decomposition (0xFB6A, decomposed);
75  ASSERT (ret == -1);
76
77  /* CIRCLED NUMBER FIFTEEN */
78  ret = uc_canonical_decomposition (0x246E, decomposed);
79  ASSERT (ret == -1);
80
81  /* TRADE MARK SIGN */
82  ret = uc_canonical_decomposition (0x2122, decomposed);
83  ASSERT (ret == -1);
84
85  /* LATIN SUBSCRIPT SMALL LETTER I */
86  ret = uc_canonical_decomposition (0x1D62, decomposed);
87  ASSERT (ret == -1);
88
89  /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */
90  ret = uc_canonical_decomposition (0xFE35, decomposed);
91  ASSERT (ret == -1);
92
93  /* FULLWIDTH LATIN CAPITAL LETTER A */
94  ret = uc_canonical_decomposition (0xFF21, decomposed);
95  ASSERT (ret == -1);
96
97  /* HALFWIDTH IDEOGRAPHIC COMMA */
98  ret = uc_canonical_decomposition (0xFF64, decomposed);
99  ASSERT (ret == -1);
100
101  /* SMALL IDEOGRAPHIC COMMA */
102  ret = uc_canonical_decomposition (0xFE51, decomposed);
103  ASSERT (ret == -1);
104
105  /* SQUARE MHZ */
106  ret = uc_canonical_decomposition (0x3392, decomposed);
107  ASSERT (ret == -1);
108
109  /* VULGAR FRACTION THREE EIGHTHS */
110  ret = uc_canonical_decomposition (0x215C, decomposed);
111  ASSERT (ret == -1);
112
113  /* MICRO SIGN */
114  ret = uc_canonical_decomposition (0x00B5, decomposed);
115  ASSERT (ret == -1);
116
117  /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */
118  ret = uc_canonical_decomposition (0xFDFA, decomposed);
119  ASSERT (ret == -1);
120
121  /* HANGUL SYLLABLE GEUL */
122  ret = uc_canonical_decomposition (0xAE00, decomposed);
123  /* See the clarification at <http://www.unicode.org/versions/Unicode5.1.0/>,
124     section "Clarification of Hangul Jamo Handling".  */
125#if 1
126  ASSERT (ret == 2);
127  ASSERT (decomposed[0] == 0xADF8);
128  ASSERT (decomposed[1] == 0x11AF);
129#else
130  ASSERT (ret == 3);
131  ASSERT (decomposed[0] == 0x1100);
132  ASSERT (decomposed[1] == 0x1173);
133  ASSERT (decomposed[2] == 0x11AF);
134#endif
135
136  /* HANGUL SYLLABLE GEU */
137  ret = uc_canonical_decomposition (0xADF8, decomposed);
138  ASSERT (ret == 2);
139  ASSERT (decomposed[0] == 0x1100);
140  ASSERT (decomposed[1] == 0x1173);
141
142  return 0;
143}
144