191f110e0Safresh1 291f110e0Safresh1BEGIN { 391f110e0Safresh1 if ($ENV{PERL_CORE}) { 491f110e0Safresh1 chdir('t') if -d 't'; 591f110e0Safresh1 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 691f110e0Safresh1 } 791f110e0Safresh1} 891f110e0Safresh1 991f110e0Safresh1use strict; 1091f110e0Safresh1use warnings; 11b46d8ef2Safresh1BEGIN { $| = 1; print "1..54\n"; } 1291f110e0Safresh1my $count = 0; 1391f110e0Safresh1sub ok ($;$) { 1491f110e0Safresh1 my $p = my $r = shift; 1591f110e0Safresh1 if (@_) { 1691f110e0Safresh1 my $x = shift; 1791f110e0Safresh1 $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x; 1891f110e0Safresh1 } 1991f110e0Safresh1 print $p ? "ok" : "not ok", ' ', ++$count, "\n"; 2091f110e0Safresh1} 2191f110e0Safresh1 2291f110e0Safresh1use Unicode::Collate; 2391f110e0Safresh1 2491f110e0Safresh1ok(1); 2591f110e0Safresh1 26*eac174f2Safresh1sub _pack_U { Unicode::Collate::pack_U(@_) } 27*eac174f2Safresh1sub _unpack_U { Unicode::Collate::unpack_U(@_) } 28*eac174f2Safresh1 2991f110e0Safresh1######################### 3091f110e0Safresh1 3191f110e0Safresh1my $Collator = Unicode::Collate->new( 3291f110e0Safresh1 table => 'keys.txt', 3391f110e0Safresh1 normalization => undef, 34b46d8ef2Safresh1 UCA_Version => 24, 3591f110e0Safresh1); 3691f110e0Safresh1 3791f110e0Safresh1# [001F] UNIT SEPARATOR 3891f110e0Safresh1{ 3991f110e0Safresh1 ok($Collator->eq("\0", "\x1F")); 4091f110e0Safresh1 ok($Collator->eq("\x1F", "\x{200B}")); 4191f110e0Safresh1 ok($Collator->eq("\0", "\x{200B}")); 4291f110e0Safresh1 ok($Collator->eq("\x{313}", "\x{343}")); 4391f110e0Safresh1 ok($Collator->eq("\x{2000}", "\x{2001}")); 4491f110e0Safresh1 ok($Collator->eq("\x{200B}", "\x{200C}")); 4591f110e0Safresh1 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}")); 4691f110e0Safresh1 4791f110e0Safresh1 $Collator->change(identical => 1); 4891f110e0Safresh1 4991f110e0Safresh1 ok($Collator->lt("\0", "\x1F")); 5091f110e0Safresh1 ok($Collator->lt("\x1F", "\x{200B}")); 5191f110e0Safresh1 ok($Collator->lt("\0", "\x{200B}")); 5291f110e0Safresh1 ok($Collator->lt("\x{313}", "\x{343}")); 5391f110e0Safresh1 ok($Collator->lt("\x{2000}", "\x{2001}")); 5491f110e0Safresh1 ok($Collator->lt("\x{200B}", "\x{200C}")); 5591f110e0Safresh1 ok($Collator->gt("\x{304C}", "\x{304B}\x{3099}")); 5691f110e0Safresh1 5791f110e0Safresh1 $Collator->change(identical => 0); 5891f110e0Safresh1 5991f110e0Safresh1 ok($Collator->eq("\0", "\x1F")); 6091f110e0Safresh1 ok($Collator->eq("\x1F", "\x{200B}")); 6191f110e0Safresh1 ok($Collator->eq("\0", "\x{200B}")); 6291f110e0Safresh1 ok($Collator->eq("\x{313}", "\x{343}")); 6391f110e0Safresh1 ok($Collator->eq("\x{2000}", "\x{2001}")); 6491f110e0Safresh1 ok($Collator->eq("\x{200B}", "\x{200C}")); 6591f110e0Safresh1 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}")); 6691f110e0Safresh1} 6791f110e0Safresh1 6891f110e0Safresh1#### 22 6991f110e0Safresh1 7091f110e0Safresh1eval { require Unicode::Normalize }; 7191f110e0Safresh1if (!$@) { 7291f110e0Safresh1 $Collator->change(normalization => "NFD"); 7391f110e0Safresh1 7491f110e0Safresh1 $Collator->change(identical => 1); 7591f110e0Safresh1 7691f110e0Safresh1 ok($Collator->lt("\0", "\x{200B}")); 7791f110e0Safresh1 ok($Collator->eq("\x{313}", "\x{343}")); 7891f110e0Safresh1 ok($Collator->lt("\x{2000}", "\x{2001}")); 7991f110e0Safresh1 ok($Collator->lt("\x{200B}", "\x{200C}")); 8091f110e0Safresh1 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}")); 8191f110e0Safresh1 8291f110e0Safresh1 $Collator->change(identical => 0); 8391f110e0Safresh1 8491f110e0Safresh1 ok($Collator->eq("\0", "\x{200B}")); 8591f110e0Safresh1 ok($Collator->eq("\x{313}", "\x{343}")); 8691f110e0Safresh1 ok($Collator->eq("\x{2000}", "\x{2001}")); 8791f110e0Safresh1 ok($Collator->eq("\x{200B}", "\x{200C}")); 8891f110e0Safresh1 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}")); 8991f110e0Safresh1} else { 9091f110e0Safresh1 ok(1) for 1..10; 9191f110e0Safresh1} 9291f110e0Safresh1 9391f110e0Safresh1$Collator->change(normalization => undef, identical => 1); 9491f110e0Safresh1 9591f110e0Safresh1##### 32 9691f110e0Safresh1 9791f110e0Safresh1ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]'); 9891f110e0Safresh1ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]'); 9991f110e0Safresh1 10091f110e0Safresh1ok($Collator->viewSortKey('a'), 10191f110e0Safresh1 '[0A15 | 0020 | 0002 | FFFF | 0000 0061]'); 10291f110e0Safresh1 103*eac174f2Safresh1# 0061 FOR 'a' SHOULD BE A UNICODE CODE POINT, NOT A NATIVE CODE POINT. 104*eac174f2Safresh1 10591f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"), 10691f110e0Safresh1 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]'); 10791f110e0Safresh1 108b8851fccSafresh1ok($Collator->viewSortKey("\x{4E00}"), 109b8851fccSafresh1 '[FB40 CE00 | 0020 | 0002 | FFFF FFFF | 0000 4E00]'); 110b8851fccSafresh1 11191f110e0Safresh1ok($Collator->viewSortKey("\x{100000}"), 11291f110e0Safresh1 '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]'); 11391f110e0Safresh1 114b8851fccSafresh1##### 38 115b8851fccSafresh1 11691f110e0Safresh1eval { require Unicode::Normalize }; 11791f110e0Safresh1if (!$@) { 11891f110e0Safresh1 $Collator->change(normalization => "NFD"); 11991f110e0Safresh1 12091f110e0Safresh1 ok($Collator->viewSortKey("\x{304C}"), 12191f110e0Safresh1 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]'); 12291f110e0Safresh1} else { 12391f110e0Safresh1 ok(1); 12491f110e0Safresh1} 12591f110e0Safresh1 12691f110e0Safresh1$Collator->change(normalization => undef); 12791f110e0Safresh1 128b8851fccSafresh1##### 39 12991f110e0Safresh1 13091f110e0Safresh1$Collator->change(level => 3); 13191f110e0Safresh1 13291f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"), 13391f110e0Safresh1 '[1926 | 0020 013D | 000E 0002 | | 0000 304C]'); 13491f110e0Safresh1 13591f110e0Safresh1$Collator->change(level => 2); 13691f110e0Safresh1 13791f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"), 13891f110e0Safresh1 '[1926 | 0020 013D | | | 0000 304C]'); 13991f110e0Safresh1 14091f110e0Safresh1$Collator->change(level => 1); 14191f110e0Safresh1 14291f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"), 14391f110e0Safresh1 '[1926 | | | | 0000 304C]'); 14491f110e0Safresh1 145b8851fccSafresh1##### 42 14691f110e0Safresh1 14791f110e0Safresh1$Collator->change(UCA_Version => 8); 14891f110e0Safresh1 14991f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"), 15091f110e0Safresh1 '[1926||||0000 304C]'); 15191f110e0Safresh1 15291f110e0Safresh1$Collator->change(level => 2); 15391f110e0Safresh1 15491f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"), 15591f110e0Safresh1 '[1926|0020 013D|||0000 304C]'); 15691f110e0Safresh1 15791f110e0Safresh1$Collator->change(level => 3); 15891f110e0Safresh1 15991f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"), 16091f110e0Safresh1 '[1926|0020 013D|000E 0002||0000 304C]'); 16191f110e0Safresh1 16291f110e0Safresh1$Collator->change(level => 4); 16391f110e0Safresh1 16491f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"), 16591f110e0Safresh1 '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]'); 16691f110e0Safresh1 167b8851fccSafresh1ok($Collator->viewSortKey("\x{4E00}"), 168b8851fccSafresh1 '[4E00|0020|0002|FFFF|0000 4E00]'); 169b8851fccSafresh1 170b8851fccSafresh1ok($Collator->viewSortKey("\x{100000}"), 171b8851fccSafresh1 '[FFA0 8000|0002|0001|FFFF FFFF|0010 0000]'); 172b8851fccSafresh1 173b8851fccSafresh1##### 48 174b46d8ef2Safresh1 175b46d8ef2Safresh1$Collator->change(UCA_Version => 36); 176b46d8ef2Safresh1 177b46d8ef2Safresh1ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]'); 178b46d8ef2Safresh1ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]'); 179b46d8ef2Safresh1 180b46d8ef2Safresh1ok($Collator->viewSortKey('a'), 181b46d8ef2Safresh1 '[0A15 | 0020 | 0002 | FFFF | 0000 0061]'); 182b46d8ef2Safresh1 183*eac174f2Safresh1# 0061 FOR 'a' SHOULD BE A UNICODE CODE POINT, NOT A NATIVE CODE POINT. 184*eac174f2Safresh1 185b46d8ef2Safresh1ok($Collator->viewSortKey("\x{304C}"), 186b46d8ef2Safresh1 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]'); 187b46d8ef2Safresh1 188b46d8ef2Safresh1ok($Collator->viewSortKey("\x{4E00}"), 189b46d8ef2Safresh1 '[FB40 CE00 | 0020 | 0002 | FFFF | 0000 4E00]'); 190b46d8ef2Safresh1 191b46d8ef2Safresh1ok($Collator->viewSortKey("\x{100000}"), 192b46d8ef2Safresh1 '[FBE0 8000 | 0020 | 0002 | FFFF | 0010 0000]'); 193b46d8ef2Safresh1 194b46d8ef2Safresh1##### 54 195