1
2BEGIN {
3    if ($ENV{PERL_CORE}) {
4	chdir('t') if -d 't';
5	@INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
6    }
7}
8
9use strict;
10use warnings;
11BEGIN { $| = 1; print "1..302\n"; }
12my $count = 0;
13sub ok ($;$) {
14    my $p = my $r = shift;
15    if (@_) {
16	my $x = shift;
17	$p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
18    }
19    print $p ? "ok" : "not ok", ' ', ++$count, "\n";
20}
21
22use Unicode::Collate::Locale;
23
24ok(1);
25
26sub _pack_U   { Unicode::Collate::pack_U(@_) }
27sub _unpack_U { Unicode::Collate::unpack_U(@_) }
28
29#########################
30
31my $objZhB = Unicode::Collate::Locale->
32    new(locale => 'ZH__big5han', normalization => undef);
33
34ok($objZhB->getlocale, 'zh__big5han');
35
36$objZhB->change(level => 1);
37
38ok($objZhB->eq("a\x{304}", "a\x{301}"));
39ok($objZhB->eq("a\x{301}", "a\x{30C}"));
40ok($objZhB->eq("a\x{30C}", "a\x{300}"));
41ok($objZhB->eq("a\x{300}", "a"));
42ok($objZhB->eq("e\x{304}", "e\x{301}"));
43ok($objZhB->eq("e\x{301}", "e\x{30C}"));
44ok($objZhB->eq("e\x{30C}", "e\x{300}"));
45ok($objZhB->eq("e\x{300}", "e"));
46ok($objZhB->eq("e\x{302}\x{304}", "e\x{302}\x{301}"));
47ok($objZhB->eq("e\x{302}\x{301}", "e\x{302}\x{30C}"));
48ok($objZhB->eq("e\x{302}\x{30C}", "e\x{302}\x{300}"));
49ok($objZhB->eq("e\x{302}\x{300}", "e\x{302}"));
50ok($objZhB->eq("i\x{304}", "i\x{301}"));
51ok($objZhB->eq("i\x{301}", "i\x{30C}"));
52ok($objZhB->eq("i\x{30C}", "i\x{300}"));
53ok($objZhB->eq("i\x{300}", "i"));
54ok($objZhB->eq("m\x{304}", "m\x{301}"));
55ok($objZhB->eq("m\x{301}", "m\x{30C}"));
56ok($objZhB->eq("m\x{30C}", "m\x{300}"));
57ok($objZhB->eq("m\x{300}", "m"));
58ok($objZhB->eq("n\x{304}", "n\x{301}"));
59ok($objZhB->eq("n\x{301}", "n\x{30C}"));
60ok($objZhB->eq("n\x{30C}", "n\x{300}"));
61ok($objZhB->eq("n\x{300}", "n"));
62ok($objZhB->eq("o\x{304}", "o\x{301}"));
63ok($objZhB->eq("o\x{301}", "o\x{30C}"));
64ok($objZhB->eq("o\x{30C}", "o\x{300}"));
65ok($objZhB->eq("o\x{300}", "o"));
66ok($objZhB->eq("u\x{304}", "u\x{301}"));
67ok($objZhB->eq("u\x{301}", "u\x{30C}"));
68ok($objZhB->eq("u\x{30C}", "u\x{300}"));
69ok($objZhB->eq("u\x{300}", "u"));
70ok($objZhB->eq("u\x{308}\x{304}", "u\x{308}\x{301}"));
71ok($objZhB->eq("u\x{308}\x{301}", "u\x{308}\x{30C}"));
72ok($objZhB->eq("u\x{308}\x{30C}", "u\x{308}\x{300}"));
73ok($objZhB->eq("u\x{308}\x{300}", "u\x{308}"));
74
75# 38
76
77$objZhB->change(level => 2);
78
79ok($objZhB->lt("a\x{304}", "a\x{301}"));
80ok($objZhB->lt("a\x{301}", "a\x{30C}"));
81ok($objZhB->lt("a\x{30C}", "a\x{300}"));
82ok($objZhB->lt("a\x{300}", "a"));
83ok($objZhB->lt("e\x{304}", "e\x{301}"));
84ok($objZhB->lt("e\x{301}", "e\x{30C}"));
85ok($objZhB->lt("e\x{30C}", "e\x{300}"));
86ok($objZhB->lt("e\x{300}", "e"));
87ok($objZhB->lt("e\x{302}\x{304}", "e\x{302}\x{301}"));
88ok($objZhB->lt("e\x{302}\x{301}", "e\x{302}\x{30C}"));
89ok($objZhB->lt("e\x{302}\x{30C}", "e\x{302}\x{300}"));
90ok($objZhB->lt("e\x{302}\x{300}", "e\x{302}"));
91ok($objZhB->lt("i\x{304}", "i\x{301}"));
92ok($objZhB->lt("i\x{301}", "i\x{30C}"));
93ok($objZhB->lt("i\x{30C}", "i\x{300}"));
94ok($objZhB->lt("i\x{300}", "i"));
95ok($objZhB->lt("m\x{304}", "m\x{301}"));
96ok($objZhB->lt("m\x{301}", "m\x{30C}"));
97ok($objZhB->lt("m\x{30C}", "m\x{300}"));
98ok($objZhB->lt("m\x{300}", "m"));
99ok($objZhB->lt("n\x{304}", "n\x{301}"));
100ok($objZhB->lt("n\x{301}", "n\x{30C}"));
101ok($objZhB->lt("n\x{30C}", "n\x{300}"));
102ok($objZhB->lt("n\x{300}", "n"));
103ok($objZhB->lt("o\x{304}", "o\x{301}"));
104ok($objZhB->lt("o\x{301}", "o\x{30C}"));
105ok($objZhB->lt("o\x{30C}", "o\x{300}"));
106ok($objZhB->lt("o\x{300}", "o"));
107ok($objZhB->lt("u\x{304}", "u\x{301}"));
108ok($objZhB->lt("u\x{301}", "u\x{30C}"));
109ok($objZhB->lt("u\x{30C}", "u\x{300}"));
110ok($objZhB->lt("u\x{300}", "u"));
111ok($objZhB->lt("u\x{308}\x{304}", "u\x{308}\x{301}"));
112ok($objZhB->lt("u\x{308}\x{301}", "u\x{308}\x{30C}"));
113ok($objZhB->lt("u\x{308}\x{30C}", "u\x{308}\x{300}"));
114ok($objZhB->lt("u\x{308}\x{300}", "u\x{308}"));
115
116# 74
117
118ok($objZhB->eq("a\x{304}", "A\x{304}"));
119ok($objZhB->eq("a\x{301}", "A\x{301}"));
120ok($objZhB->eq("a\x{30C}", "A\x{30C}"));
121ok($objZhB->eq("a\x{300}", "A\x{300}"));
122ok($objZhB->eq("e\x{304}", "E\x{304}"));
123ok($objZhB->eq("e\x{301}", "E\x{301}"));
124ok($objZhB->eq("e\x{30C}", "E\x{30C}"));
125ok($objZhB->eq("e\x{300}", "E\x{300}"));
126ok($objZhB->eq("e\x{302}\x{304}", "E\x{302}\x{304}"));
127ok($objZhB->eq("e\x{302}\x{301}", "E\x{302}\x{301}"));
128ok($objZhB->eq("e\x{302}\x{30C}", "E\x{302}\x{30C}"));
129ok($objZhB->eq("e\x{302}\x{300}", "E\x{302}\x{300}"));
130ok($objZhB->eq("e\x{302}", "E\x{302}"));
131ok($objZhB->eq("i\x{304}", "I\x{304}"));
132ok($objZhB->eq("i\x{301}", "I\x{301}"));
133ok($objZhB->eq("i\x{30C}", "I\x{30C}"));
134ok($objZhB->eq("i\x{300}", "I\x{300}"));
135ok($objZhB->eq("m\x{304}", "M\x{304}"));
136ok($objZhB->eq("m\x{301}", "M\x{301}"));
137ok($objZhB->eq("m\x{30C}", "M\x{30C}"));
138ok($objZhB->eq("m\x{300}", "M\x{300}"));
139ok($objZhB->eq("n\x{304}", "N\x{304}"));
140ok($objZhB->eq("n\x{301}", "N\x{301}"));
141ok($objZhB->eq("n\x{30C}", "N\x{30C}"));
142ok($objZhB->eq("n\x{300}", "N\x{300}"));
143ok($objZhB->eq("o\x{304}", "O\x{304}"));
144ok($objZhB->eq("o\x{301}", "O\x{301}"));
145ok($objZhB->eq("o\x{30C}", "O\x{30C}"));
146ok($objZhB->eq("o\x{300}", "O\x{300}"));
147ok($objZhB->eq("u\x{304}", "U\x{304}"));
148ok($objZhB->eq("u\x{301}", "U\x{301}"));
149ok($objZhB->eq("u\x{30C}", "U\x{30C}"));
150ok($objZhB->eq("u\x{300}", "U\x{300}"));
151ok($objZhB->eq("u\x{308}\x{304}", "U\x{308}\x{304}"));
152ok($objZhB->eq("u\x{308}\x{301}", "U\x{308}\x{301}"));
153ok($objZhB->eq("u\x{308}\x{30C}", "U\x{308}\x{30C}"));
154ok($objZhB->eq("u\x{308}\x{300}", "U\x{308}\x{300}"));
155ok($objZhB->eq("u\x{308}", "U\x{308}"));
156
157# 112
158
159$objZhB->change(level => 3);
160
161ok($objZhB->lt("a\x{304}", "A\x{304}"));
162ok($objZhB->lt("a\x{301}", "A\x{301}"));
163ok($objZhB->lt("a\x{30C}", "A\x{30C}"));
164ok($objZhB->lt("a\x{300}", "A\x{300}"));
165ok($objZhB->lt("e\x{304}", "E\x{304}"));
166ok($objZhB->lt("e\x{301}", "E\x{301}"));
167ok($objZhB->lt("e\x{30C}", "E\x{30C}"));
168ok($objZhB->lt("e\x{300}", "E\x{300}"));
169ok($objZhB->lt("e\x{302}\x{304}", "E\x{302}\x{304}"));
170ok($objZhB->lt("e\x{302}\x{301}", "E\x{302}\x{301}"));
171ok($objZhB->lt("e\x{302}\x{30C}", "E\x{302}\x{30C}"));
172ok($objZhB->lt("e\x{302}\x{300}", "E\x{302}\x{300}"));
173ok($objZhB->lt("e\x{302}", "E\x{302}"));
174ok($objZhB->lt("i\x{304}", "I\x{304}"));
175ok($objZhB->lt("i\x{301}", "I\x{301}"));
176ok($objZhB->lt("i\x{30C}", "I\x{30C}"));
177ok($objZhB->lt("i\x{300}", "I\x{300}"));
178ok($objZhB->lt("m\x{304}", "M\x{304}"));
179ok($objZhB->lt("m\x{301}", "M\x{301}"));
180ok($objZhB->lt("m\x{30C}", "M\x{30C}"));
181ok($objZhB->lt("m\x{300}", "M\x{300}"));
182ok($objZhB->lt("n\x{304}", "N\x{304}"));
183ok($objZhB->lt("n\x{301}", "N\x{301}"));
184ok($objZhB->lt("n\x{30C}", "N\x{30C}"));
185ok($objZhB->lt("n\x{300}", "N\x{300}"));
186ok($objZhB->lt("o\x{304}", "O\x{304}"));
187ok($objZhB->lt("o\x{301}", "O\x{301}"));
188ok($objZhB->lt("o\x{30C}", "O\x{30C}"));
189ok($objZhB->lt("o\x{300}", "O\x{300}"));
190ok($objZhB->lt("u\x{304}", "U\x{304}"));
191ok($objZhB->lt("u\x{301}", "U\x{301}"));
192ok($objZhB->lt("u\x{30C}", "U\x{30C}"));
193ok($objZhB->lt("u\x{300}", "U\x{300}"));
194ok($objZhB->lt("u\x{308}\x{304}", "U\x{308}\x{304}"));
195ok($objZhB->lt("u\x{308}\x{301}", "U\x{308}\x{301}"));
196ok($objZhB->lt("u\x{308}\x{30C}", "U\x{308}\x{30C}"));
197ok($objZhB->lt("u\x{308}\x{300}", "U\x{308}\x{300}"));
198ok($objZhB->lt("u\x{308}", "U\x{308}"));
199
200# 150
201
202ok($objZhB->eq("a\x{304}", "\x{101}"));
203ok($objZhB->eq("A\x{304}", "\x{100}"));
204ok($objZhB->eq("a\x{301}", _pack_U(0xE1)));
205ok($objZhB->eq("a\x{301}", "a\x{341}"));
206ok($objZhB->eq("A\x{301}", _pack_U(0xC1)));
207ok($objZhB->eq("A\x{301}", "A\x{341}"));
208ok($objZhB->eq("a\x{30C}", "\x{1CE}"));
209ok($objZhB->eq("A\x{30C}", "\x{1CD}"));
210ok($objZhB->eq("a\x{300}", _pack_U(0xE0)));
211ok($objZhB->eq("a\x{300}", "a\x{340}"));
212ok($objZhB->eq("A\x{300}", _pack_U(0xC0)));
213ok($objZhB->eq("A\x{300}", "A\x{340}"));
214ok($objZhB->eq("e\x{304}", "\x{113}"));
215ok($objZhB->eq("E\x{304}", "\x{112}"));
216ok($objZhB->eq("e\x{301}", _pack_U(0xE9)));
217ok($objZhB->eq("e\x{301}", "e\x{341}"));
218ok($objZhB->eq("E\x{301}", _pack_U(0xC9)));
219ok($objZhB->eq("E\x{301}", "E\x{341}"));
220ok($objZhB->eq("e\x{30C}", "\x{11B}"));
221ok($objZhB->eq("E\x{30C}", "\x{11A}"));
222ok($objZhB->eq("e\x{300}", _pack_U(0xE8)));
223ok($objZhB->eq("e\x{300}", "e\x{340}"));
224ok($objZhB->eq("E\x{300}", _pack_U(0xC8)));
225ok($objZhB->eq("E\x{300}", "E\x{340}"));
226ok($objZhB->eq("e\x{302}\x{304}", _pack_U(0xEA, 0x304)));
227ok($objZhB->eq("E\x{302}\x{304}", _pack_U(0xCA, 0x304)));
228ok($objZhB->eq("e\x{302}\x{301}", "\x{1EBF}"));
229ok($objZhB->eq("e\x{302}\x{301}", "e\x{302}\x{341}"));
230ok($objZhB->eq("E\x{302}\x{301}", "\x{1EBE}"));
231ok($objZhB->eq("E\x{302}\x{301}", "E\x{302}\x{341}"));
232ok($objZhB->eq("e\x{302}\x{301}", _pack_U(0xEA, 0x301)));
233ok($objZhB->eq("e\x{302}\x{301}", _pack_U(0xEA, 0x341)));
234ok($objZhB->eq("E\x{302}\x{301}", _pack_U(0xCA, 0x301)));
235ok($objZhB->eq("E\x{302}\x{301}", _pack_U(0xCA, 0x341)));
236ok($objZhB->eq("e\x{302}\x{30C}", _pack_U(0xEA, 0x30C)));
237ok($objZhB->eq("E\x{302}\x{30C}", _pack_U(0xCA, 0x30C)));
238ok($objZhB->eq("e\x{302}\x{300}", "\x{1EC1}"));
239ok($objZhB->eq("e\x{302}\x{300}", "e\x{302}\x{340}"));
240ok($objZhB->eq("E\x{302}\x{300}", "\x{1EC0}"));
241ok($objZhB->eq("E\x{302}\x{300}", "E\x{302}\x{340}"));
242ok($objZhB->eq("e\x{302}\x{300}", _pack_U(0xEA, 0x300)));
243ok($objZhB->eq("e\x{302}\x{300}", _pack_U(0xEA, 0x340)));
244ok($objZhB->eq("E\x{302}\x{300}", _pack_U(0xCA, 0x300)));
245ok($objZhB->eq("E\x{302}\x{300}", _pack_U(0xCA, 0x340)));
246ok($objZhB->eq("e\x{302}", _pack_U(0xEA)));
247ok($objZhB->eq("E\x{302}", _pack_U(0xCA)));
248ok($objZhB->eq("i\x{304}", "\x{12B}"));
249ok($objZhB->eq("I\x{304}", "\x{12A}"));
250ok($objZhB->eq("i\x{301}", _pack_U(0xED)));
251ok($objZhB->eq("i\x{301}", "i\x{341}"));
252ok($objZhB->eq("I\x{301}", _pack_U(0xCD)));
253ok($objZhB->eq("I\x{301}", "I\x{341}"));
254ok($objZhB->eq("i\x{30C}", "\x{1D0}"));
255ok($objZhB->eq("I\x{30C}", "\x{1CF}"));
256ok($objZhB->eq("i\x{300}", _pack_U(0xEC)));
257ok($objZhB->eq("i\x{300}", "i\x{340}"));
258ok($objZhB->eq("I\x{300}", _pack_U(0xCC)));
259ok($objZhB->eq("I\x{300}", "I\x{340}"));
260ok($objZhB->eq("m\x{301}", "\x{1E3F}"));
261ok($objZhB->eq("m\x{301}", "m\x{341}"));
262ok($objZhB->eq("M\x{301}", "\x{1E3E}"));
263ok($objZhB->eq("M\x{301}", "M\x{341}"));
264ok($objZhB->eq("m\x{300}", "m\x{340}"));
265ok($objZhB->eq("M\x{300}", "M\x{340}"));
266ok($objZhB->eq("n\x{301}", "\x{144}"));
267ok($objZhB->eq("n\x{301}", "n\x{341}"));
268ok($objZhB->eq("N\x{301}", "\x{143}"));
269ok($objZhB->eq("N\x{301}", "N\x{341}"));
270ok($objZhB->eq("n\x{30C}", "\x{148}"));
271ok($objZhB->eq("N\x{30C}", "\x{147}"));
272ok($objZhB->eq("n\x{300}", "\x{1F9}"));
273ok($objZhB->eq("n\x{300}", "n\x{340}"));
274ok($objZhB->eq("N\x{300}", "\x{1F8}"));
275ok($objZhB->eq("N\x{300}", "N\x{340}"));
276ok($objZhB->eq("o\x{304}", "\x{14D}"));
277ok($objZhB->eq("O\x{304}", "\x{14C}"));
278ok($objZhB->eq("o\x{301}", _pack_U(0xF3)));
279ok($objZhB->eq("o\x{301}", "o\x{341}"));
280ok($objZhB->eq("O\x{301}", _pack_U(0xD3)));
281ok($objZhB->eq("O\x{301}", "O\x{341}"));
282ok($objZhB->eq("o\x{30C}", "\x{1D2}"));
283ok($objZhB->eq("O\x{30C}", "\x{1D1}"));
284ok($objZhB->eq("o\x{300}", _pack_U(0xF2)));
285ok($objZhB->eq("o\x{300}", "o\x{340}"));
286ok($objZhB->eq("O\x{300}", _pack_U(0xD2)));
287ok($objZhB->eq("O\x{300}", "O\x{340}"));
288ok($objZhB->eq("u\x{304}", "\x{16B}"));
289ok($objZhB->eq("U\x{304}", "\x{16A}"));
290ok($objZhB->eq("u\x{301}", _pack_U(0xFA)));
291ok($objZhB->eq("u\x{301}", "u\x{341}"));
292ok($objZhB->eq("U\x{301}", _pack_U(0xDA)));
293ok($objZhB->eq("U\x{301}", "U\x{341}"));
294ok($objZhB->eq("u\x{30C}", "\x{1D4}"));
295ok($objZhB->eq("U\x{30C}", "\x{1D3}"));
296ok($objZhB->eq("u\x{300}", _pack_U(0xF9)));
297ok($objZhB->eq("u\x{300}", "u\x{340}"));
298ok($objZhB->eq("U\x{300}", _pack_U(0xD9)));
299ok($objZhB->eq("U\x{300}", "U\x{340}"));
300ok($objZhB->eq("u\x{308}\x{304}", "\x{1D6}"));
301ok($objZhB->eq("U\x{308}\x{304}", "\x{1D5}"));
302ok($objZhB->eq("u\x{308}\x{304}", _pack_U(0xFC, 0x304)));
303ok($objZhB->eq("U\x{308}\x{304}", _pack_U(0xDC, 0x304)));
304ok($objZhB->eq("u\x{308}\x{301}", "\x{1D8}"));
305ok($objZhB->eq("u\x{308}\x{301}", "u\x{308}\x{341}"));
306ok($objZhB->eq("U\x{308}\x{301}", "\x{1D7}"));
307ok($objZhB->eq("U\x{308}\x{301}", "U\x{308}\x{341}"));
308ok($objZhB->eq("u\x{308}\x{301}", _pack_U(0xFC, 0x301)));
309ok($objZhB->eq("u\x{308}\x{301}", _pack_U(0xFC, 0x341)));
310ok($objZhB->eq("U\x{308}\x{301}", _pack_U(0xDC, 0x301)));
311ok($objZhB->eq("U\x{308}\x{301}", _pack_U(0xDC, 0x341)));
312ok($objZhB->eq("u\x{308}\x{30C}", "\x{1DA}"));
313ok($objZhB->eq("U\x{308}\x{30C}", "\x{1D9}"));
314ok($objZhB->eq("u\x{308}\x{30C}", _pack_U(0xFC, 0x30C)));
315ok($objZhB->eq("U\x{308}\x{30C}", _pack_U(0xDC, 0x30C)));
316ok($objZhB->eq("u\x{308}\x{300}", "\x{1DC}"));
317ok($objZhB->eq("u\x{308}\x{300}", "u\x{308}\x{340}"));
318ok($objZhB->eq("U\x{308}\x{300}", "\x{1DB}"));
319ok($objZhB->eq("U\x{308}\x{300}", "U\x{308}\x{340}"));
320ok($objZhB->eq("u\x{308}\x{300}", _pack_U(0xFC, 0x300)));
321ok($objZhB->eq("u\x{308}\x{300}", _pack_U(0xFC, 0x340)));
322ok($objZhB->eq("U\x{308}\x{300}", _pack_U(0xDC, 0x300)));
323ok($objZhB->eq("U\x{308}\x{300}", _pack_U(0xDC, 0x340)));
324ok($objZhB->eq("u\x{308}", _pack_U(0xFC)));
325ok($objZhB->eq("U\x{308}", _pack_U(0xDC)));
326
327# 274
328
329ok($objZhB->eq("e\x{302}\x{303}", "\x{1EC5}"));
330ok($objZhB->eq("E\x{302}\x{303}", "\x{1EC4}"));
331ok($objZhB->eq("e\x{302}\x{309}", "\x{1EC3}"));
332ok($objZhB->eq("E\x{302}\x{309}", "\x{1EC2}"));
333ok($objZhB->eq("e\x{302}\x{323}", "\x{1EC7}"));
334ok($objZhB->eq("E\x{302}\x{323}", "\x{1EC6}"));
335
336# 280
337
338$objZhB->change(level => 1);
339
340ok($objZhB->lt("\x{A000}", "\x{5159}"));
341ok($objZhB->lt("\x{5159}", "\x{515B}"));
342ok($objZhB->lt("\x{515B}", "\x{515E}"));
343ok($objZhB->lt("\x{515E}", "\x{515D}"));
344ok($objZhB->lt("\x{515D}", "\x{5161}"));
345ok($objZhB->lt("\x{5161}", "\x{5163}"));
346ok($objZhB->lt("\x{5163}", "\x{55E7}"));
347ok($objZhB->lt("\x{55E7}", "\x{74E9}"));
348ok($objZhB->lt("\x{74E9}", "\x{7CCE}"));
349ok($objZhB->lt("\x{7CCE}", "\x{4E00}"));
350ok($objZhB->lt("\x{4E00}", "\x{4E59}"));
351ok($objZhB->lt("\x{4E59}", "\x{4E01}"));
352ok($objZhB->lt("\x{4E01}", "\x{4E03}"));
353ok($objZhB->lt("\x{4E03}", "\x{4E43}"));
354ok($objZhB->lt("\x{4E43}", "\x{4E5D}"));
355ok($objZhB->lt("\x{4E5D}", "\x{4E86}"));
356ok($objZhB->lt("\x{4E86}", "\x{7069}"));
357ok($objZhB->lt("\x{7069}", "\x{706A}"));
358ok($objZhB->lt("\x{706A}", "\x{9EA4}"));
359ok($objZhB->lt("\x{9EA4}", "\x{9F7E}"));
360ok($objZhB->lt("\x{9F7E}", "\x{9F49}"));
361ok($objZhB->lt("\x{9F49}", "\x{9F98}"));
362
363# 302
364