2 unless ("A" eq pack('U', 0x41)) {
3 print "1..0 # Unicode::Collate " .
4 "cannot stringify a Unicode code point\n";
9 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
14 BEGIN { plan tests => 76 };
24 my $all_undef_8 = Unicode::Collate->new(
26 normalization => undef,
28 overrideHangul => undef,
32 # All in the Unicode code point order.
33 # No hangul decomposition.
35 ok($all_undef_8->lt("\x{3402}", "\x{4E00}"));
36 ok($all_undef_8->lt("\x{4DFF}", "\x{4E00}"));
37 ok($all_undef_8->lt("\x{4E00}", "\x{AC00}"));
38 ok($all_undef_8->gt("\x{AC00}", "\x{1100}\x{1161}"));
39 ok($all_undef_8->gt("\x{AC00}", "\x{ABFF}"));
44 my $all_undef_9 = Unicode::Collate->new(
46 normalization => undef,
48 overrideHangul => undef,
52 # CJK Ideo. < CJK ext A/B < Others.
53 # No hangul decomposition.
55 ok($all_undef_9->lt("\x{4E00}", "\x{3402}"));
56 ok($all_undef_9->lt("\x{3402}", "\x{20000}"));
57 ok($all_undef_9->lt("\x{20000}", "\x{AC00}"));
58 ok($all_undef_9->gt("\x{AC00}", "\x{1100}\x{1161}"));
59 ok($all_undef_9->gt("\x{AC00}", "\x{ABFF}")); # U+ABFF: not assigned
63 my $ignoreHangul = Unicode::Collate->new(
65 normalization => undef,
66 overrideHangul => sub {()},
68 AE00 ; [.0100.0020.0002.AE00] # Hangul GEUL
72 # All Hangul Syllables except U+AE00 are ignored.
74 ok($ignoreHangul->eq("\x{AC00}", ""));
75 ok($ignoreHangul->lt("\x{AC00}", "\0"));
76 ok($ignoreHangul->lt("\x{AC00}", "\x{AE00}"));
77 ok($ignoreHangul->lt("\x{AC00}", "\x{1100}\x{1161}")); # Jamo are not ignored.
78 ok($ignoreHangul->lt("Pe\x{AE00}rl", "Perl")); # 'r' is unassigned.
81 my $ignoreCJK = Unicode::Collate->new(
83 normalization => undef,
84 overrideCJK => sub {()},
86 5B57 ; [.0107.0020.0002.5B57] # CJK Ideograph "Letter"
90 # All CJK Unified Ideographs except U+5B57 are ignored.
93 ok($ignoreCJK->eq("\x{4E00}", ""));
94 ok($ignoreCJK->lt("\x{4E00}", "\0"));
95 ok($ignoreCJK->eq("Pe\x{4E00}rl", "Perl")); # U+4E00 is a CJK.
96 ok($ignoreCJK->gt("\x{4DFF}", "\x{4E00}")); # U+4DFF is not CJK.
97 ok($ignoreCJK->lt("Pe\x{5B57}rl", "Perl")); # 'r' is unassigned.
100 ok($ignoreCJK->eq("\x{3400}", ""));
101 ok($ignoreCJK->eq("\x{4DB5}", ""));
102 ok($ignoreCJK->eq("\x{9FA5}", ""));
103 ok($ignoreCJK->eq("\x{9FA6}", "")); # UI since Unicode 4.1.0
104 ok($ignoreCJK->eq("\x{9FBB}", "")); # UI since Unicode 4.1.0
105 ok($ignoreCJK->gt("\x{9FBC}", "Perl"));
106 ok($ignoreCJK->eq("\x{20000}", ""));
107 ok($ignoreCJK->eq("\x{2A6D6}", ""));
110 $ignoreCJK->change(UCA_Version => 9);
111 ok($ignoreCJK->eq("\x{3400}", ""));
112 ok($ignoreCJK->eq("\x{4DB5}", ""));
113 ok($ignoreCJK->eq("\x{9FA5}", ""));
114 ok($ignoreCJK->gt("\x{9FA6}", "Perl"));
115 ok($ignoreCJK->gt("\x{9FBB}", "Perl"));
116 ok($ignoreCJK->gt("\x{9FBC}", "Perl"));
117 ok($ignoreCJK->eq("\x{20000}", ""));
118 ok($ignoreCJK->eq("\x{2A6D6}", ""));
121 $ignoreCJK->change(UCA_Version => 8);
122 ok($ignoreCJK->eq("\x{3400}", ""));
123 ok($ignoreCJK->eq("\x{4DB5}", ""));
124 ok($ignoreCJK->eq("\x{9FA5}", ""));
125 ok($ignoreCJK->gt("\x{9FA6}", "Perl"));
126 ok($ignoreCJK->gt("\x{9FBB}", "Perl"));
127 ok($ignoreCJK->gt("\x{9FBC}", "Perl"));
128 ok($ignoreCJK->eq("\x{20000}", ""));
129 ok($ignoreCJK->eq("\x{2A6D6}", ""));
132 $ignoreCJK->change(UCA_Version => 14);
133 ok($ignoreCJK->eq("\x{3400}", ""));
134 ok($ignoreCJK->eq("\x{4DB5}", ""));
135 ok($ignoreCJK->eq("\x{9FA5}", ""));
136 ok($ignoreCJK->eq("\x{9FA6}", "")); # UI since Unicode 4.1.0
137 ok($ignoreCJK->eq("\x{9FBB}", "")); # UI since Unicode 4.1.0
138 ok($ignoreCJK->gt("\x{9FBC}", "Perl"));
139 ok($ignoreCJK->eq("\x{20000}", ""));
140 ok($ignoreCJK->eq("\x{2A6D6}", ""));
143 my $overCJK = Unicode::Collate->new(
145 normalization => undef,
146 entry => <<'ENTRIES',
147 0061 ; [.0101.0020.0002.0061] # latin a
148 0041 ; [.0101.0020.0008.0041] # LATIN A
149 4E00 ; [.B1FC.0030.0004.4E00] # Ideograph; B1FC = FFFF - 4E03.
152 my $u = 0xFFFF - $_[0]; # reversed
157 ok($overCJK->lt("a", "A")); # diff. at level 3.
158 ok($overCJK->lt( "\x{4E03}", "\x{4E00}")); # diff. at level 2.
159 ok($overCJK->lt("A\x{4E03}", "A\x{4E00}"));
160 ok($overCJK->lt("A\x{4E03}", "a\x{4E00}"));
161 ok($overCJK->lt("a\x{4E03}", "A\x{4E00}"));
163 ok($overCJK->gt("a\x{3400}", "A\x{4DB5}"));
164 ok($overCJK->gt("a\x{4DB5}", "A\x{9FA5}"));
165 ok($overCJK->gt("a\x{9FA5}", "A\x{9FA6}"));
166 ok($overCJK->gt("a\x{9FA6}", "A\x{9FBB}"));
167 ok($overCJK->lt("a\x{9FBB}", "A\x{9FBC}"));
168 ok($overCJK->lt("a\x{9FBC}", "A\x{9FBF}"));
170 $overCJK->change(UCA_Version => 9);
172 ok($overCJK->gt("a\x{3400}", "A\x{4DB5}"));
173 ok($overCJK->gt("a\x{4DB5}", "A\x{9FA5}"));
174 ok($overCJK->lt("a\x{9FA5}", "A\x{9FA6}"));
175 ok($overCJK->lt("a\x{9FA6}", "A\x{9FBB}"));
176 ok($overCJK->lt("a\x{9FBB}", "A\x{9FBC}"));
177 ok($overCJK->lt("a\x{9FBC}", "A\x{9FBF}"));
179 $overCJK->change(UCA_Version => 14);
181 ok($overCJK->gt("a\x{3400}", "A\x{4DB5}"));
182 ok($overCJK->gt("a\x{4DB5}", "A\x{9FA5}"));
183 ok($overCJK->gt("a\x{9FA5}", "A\x{9FA6}"));
184 ok($overCJK->gt("a\x{9FA6}", "A\x{9FBB}"));
185 ok($overCJK->lt("a\x{9FBB}", "A\x{9FBC}"));
186 ok($overCJK->lt("a\x{9FBC}", "A\x{9FBF}"));