1 2BEGIN { 3 unless ('A' eq pack('U', 0x41)) { 4 print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; 5 exit 0; 6 } 7 unless (0x41 == unpack('U', 'A')) { 8 print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; 9 exit 0; 10 } 11 if ($ENV{PERL_CORE}) { 12 chdir('t') if -d 't'; 13 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 14 } 15} 16 17use strict; 18use warnings; 19BEGIN { $| = 1; print "1..54\n"; } 20my $count = 0; 21sub ok ($;$) { 22 my $p = my $r = shift; 23 if (@_) { 24 my $x = shift; 25 $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x; 26 } 27 print $p ? "ok" : "not ok", ' ', ++$count, "\n"; 28} 29 30use Unicode::Collate; 31 32ok(1); 33 34######################### 35 36my $Collator = Unicode::Collate->new( 37 table => 'keys.txt', 38 normalization => undef, 39 UCA_Version => 24, 40); 41 42# [001F] UNIT SEPARATOR 43{ 44 ok($Collator->eq("\0", "\x1F")); 45 ok($Collator->eq("\x1F", "\x{200B}")); 46 ok($Collator->eq("\0", "\x{200B}")); 47 ok($Collator->eq("\x{313}", "\x{343}")); 48 ok($Collator->eq("\x{2000}", "\x{2001}")); 49 ok($Collator->eq("\x{200B}", "\x{200C}")); 50 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}")); 51 52 $Collator->change(identical => 1); 53 54 ok($Collator->lt("\0", "\x1F")); 55 ok($Collator->lt("\x1F", "\x{200B}")); 56 ok($Collator->lt("\0", "\x{200B}")); 57 ok($Collator->lt("\x{313}", "\x{343}")); 58 ok($Collator->lt("\x{2000}", "\x{2001}")); 59 ok($Collator->lt("\x{200B}", "\x{200C}")); 60 ok($Collator->gt("\x{304C}", "\x{304B}\x{3099}")); 61 62 $Collator->change(identical => 0); 63 64 ok($Collator->eq("\0", "\x1F")); 65 ok($Collator->eq("\x1F", "\x{200B}")); 66 ok($Collator->eq("\0", "\x{200B}")); 67 ok($Collator->eq("\x{313}", "\x{343}")); 68 ok($Collator->eq("\x{2000}", "\x{2001}")); 69 ok($Collator->eq("\x{200B}", "\x{200C}")); 70 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}")); 71} 72 73#### 22 74 75eval { require Unicode::Normalize }; 76if (!$@) { 77 $Collator->change(normalization => "NFD"); 78 79 $Collator->change(identical => 1); 80 81 ok($Collator->lt("\0", "\x{200B}")); 82 ok($Collator->eq("\x{313}", "\x{343}")); 83 ok($Collator->lt("\x{2000}", "\x{2001}")); 84 ok($Collator->lt("\x{200B}", "\x{200C}")); 85 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}")); 86 87 $Collator->change(identical => 0); 88 89 ok($Collator->eq("\0", "\x{200B}")); 90 ok($Collator->eq("\x{313}", "\x{343}")); 91 ok($Collator->eq("\x{2000}", "\x{2001}")); 92 ok($Collator->eq("\x{200B}", "\x{200C}")); 93 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}")); 94} else { 95 ok(1) for 1..10; 96} 97 98$Collator->change(normalization => undef, identical => 1); 99 100##### 32 101 102ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]'); 103ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]'); 104 105ok($Collator->viewSortKey('a'), 106 '[0A15 | 0020 | 0002 | FFFF | 0000 0061]'); 107 108ok($Collator->viewSortKey("\x{304C}"), 109 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]'); 110 111ok($Collator->viewSortKey("\x{4E00}"), 112 '[FB40 CE00 | 0020 | 0002 | FFFF FFFF | 0000 4E00]'); 113 114ok($Collator->viewSortKey("\x{100000}"), 115 '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]'); 116 117##### 38 118 119eval { require Unicode::Normalize }; 120if (!$@) { 121 $Collator->change(normalization => "NFD"); 122 123 ok($Collator->viewSortKey("\x{304C}"), 124 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]'); 125} else { 126 ok(1); 127} 128 129$Collator->change(normalization => undef); 130 131##### 39 132 133$Collator->change(level => 3); 134 135ok($Collator->viewSortKey("\x{304C}"), 136 '[1926 | 0020 013D | 000E 0002 | | 0000 304C]'); 137 138$Collator->change(level => 2); 139 140ok($Collator->viewSortKey("\x{304C}"), 141 '[1926 | 0020 013D | | | 0000 304C]'); 142 143$Collator->change(level => 1); 144 145ok($Collator->viewSortKey("\x{304C}"), 146 '[1926 | | | | 0000 304C]'); 147 148##### 42 149 150$Collator->change(UCA_Version => 8); 151 152ok($Collator->viewSortKey("\x{304C}"), 153 '[1926||||0000 304C]'); 154 155$Collator->change(level => 2); 156 157ok($Collator->viewSortKey("\x{304C}"), 158 '[1926|0020 013D|||0000 304C]'); 159 160$Collator->change(level => 3); 161 162ok($Collator->viewSortKey("\x{304C}"), 163 '[1926|0020 013D|000E 0002||0000 304C]'); 164 165$Collator->change(level => 4); 166 167ok($Collator->viewSortKey("\x{304C}"), 168 '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]'); 169 170ok($Collator->viewSortKey("\x{4E00}"), 171 '[4E00|0020|0002|FFFF|0000 4E00]'); 172 173ok($Collator->viewSortKey("\x{100000}"), 174 '[FFA0 8000|0002|0001|FFFF FFFF|0010 0000]'); 175 176##### 48 177 178$Collator->change(UCA_Version => 36); 179 180ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]'); 181ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]'); 182 183ok($Collator->viewSortKey('a'), 184 '[0A15 | 0020 | 0002 | FFFF | 0000 0061]'); 185 186ok($Collator->viewSortKey("\x{304C}"), 187 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]'); 188 189ok($Collator->viewSortKey("\x{4E00}"), 190 '[FB40 CE00 | 0020 | 0002 | FFFF | 0000 4E00]'); 191 192ok($Collator->viewSortKey("\x{100000}"), 193 '[FBE0 8000 | 0020 | 0002 | FFFF | 0010 0000]'); 194 195##### 54 196