1 2BEGIN { 3 unless ("A" eq pack('U', 0x41)) { 4 print "1..0 # Unicode::Collate " . 5 "cannot stringify a Unicode code point\n"; 6 exit 0; 7 } 8 if ($ENV{PERL_CORE}) { 9 chdir('t') if -d 't'; 10 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 11 } 12} 13 14use strict; 15use warnings; 16BEGIN { $| = 1; print "1..42\n"; } 17my $count = 0; 18sub ok ($;$) { 19 my $p = my $r = shift; 20 if (@_) { 21 my $x = shift; 22 $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x; 23 } 24 print $p ? "ok" : "not ok", ' ', ++$count, "\n"; 25} 26 27use Unicode::Collate; 28 29ok(1); 30 31######################### 32 33my $Collator = Unicode::Collate->new( 34 table => 'keys.txt', 35 normalization => undef, 36 ignore_level2 => 1, 37 entry => << 'ENTRIES', 381B00 ; [.0000.00FF.0002.1B00] # BALINESE SIGN ULU RICEM 391B01 ; [.0000.0100.0002.1B01] # BALINESE SIGN ULU CANDRA 401B02 ; [.0000.0101.0002.1B02] # BALINESE SIGN CECEK 4103C6 ; [.1900.0020.0002.03C6] # GREEK SMALL LETTER PHI 4203D5 ; [.1900.0020.0004.03D5] # GREEK PHI SYMBOL; QQK 4303A6 ; [.1900.0020.0008.03A6] # GREEK CAPITAL LETTER PHI 44ENTRIES 45); 46 47ok($Collator->eq("camel", "came\x{300}l")); 48ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 49ok($Collator->lt("camel", "Camel")); 50 51# 4 52 53$Collator->change(ignore_level2 => 0); 54 55ok($Collator->lt("camel", "came\x{300}l")); 56ok($Collator->lt("camel", "ca\x{300}me\x{301}l")); 57ok($Collator->lt("camel", "Camel")); 58 59$Collator->change(level => 1); 60 61ok($Collator->eq("camel", "came\x{300}l")); 62ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 63ok($Collator->eq("camel", "Camel")); 64 65$Collator->change(level => 2); 66 67ok($Collator->lt("camel", "came\x{300}l")); 68ok($Collator->lt("camel", "ca\x{300}me\x{301}l")); 69ok($Collator->eq("camel", "Camel")); 70 71# 13 72 73$Collator->change(ignore_level2 => 1); 74 75ok($Collator->eq("camel", "came\x{300}l")); 76ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 77ok($Collator->eq("camel", "Camel")); 78 79$Collator->change(level => 3); 80 81ok($Collator->eq("camel", "came\x{300}l")); 82ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 83ok($Collator->lt("camel", "Camel")); 84 85# secondary: neither 00FF nor 0100 is zero 86ok($Collator->eq("camel", "came\x{1B00}l")); 87ok($Collator->eq("camel", "came\x{1B01}l")); 88ok($Collator->eq("camel", "came\x{1B02}l")); 89 90# primary: 1900 isn't zero 91ok($Collator->lt("\x{3C6}", "\x{3D5}")); 92ok($Collator->lt("\x{3D5}", "\x{3A6}")); 93 94# 24 95 96{ 97 my $s; 98 my $txt = "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L."; 99 100 $Collator->change(ignore_level2 => 0, level => 1); 101 102 $s = $txt; 103 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 104 ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 105 106 $Collator->change(level => 2); 107 108 $s = $txt; 109 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 110 ok($s, "=Camel= donkey zebra came\x{301}l =CAMEL= horse =cAm\0E\0L=."); 111 112 $Collator->change(level => 3); 113 114 $s = $txt; 115 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 116 ok($s, "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L."); 117 118 $Collator->change(ignore_level2 => 1); 119 120 $s = $txt; 121 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 122 ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse cAm\0E\0L."); 123 124 $Collator->change(level => 2); 125 $s = $txt; 126 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 127 ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 128 129 $Collator->change(level => 1); 130 $s = $txt; 131 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 132 ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 133 134} 135 136# 30 137 138{ 139 my $c = Unicode::Collate->new( 140 table => 'keys.txt', normalization => undef, level => 1, 141 ); 142 my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 143 $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 144 ok($str, "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cam\0e\0l</b>..."); 145} 146 147{ 148 my $c = Unicode::Collate->new( 149 table => 'keys.txt', normalization => undef, level => 2, 150 ); 151 my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 152 $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 153 ok($str, "<b>Camel</b> donkey zebra came\x{301}l <b>CAMEL</b> horse <b>cam\0e\0l</b>..."); 154} 155 156{ 157 my $c = Unicode::Collate->new( 158 table => 'keys.txt', normalization => undef, ignore_level2 => 1, 159 ); 160 my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 161 $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 162 ok($str, "Camel donkey zebra <b>came\x{301}l</b> CAMEL horse <b>cam\0e\0l</b>..."); 163} 164 165{ 166 my $c = Unicode::Collate->new( 167 table => 'keys.txt', normalization => undef, level => 3, 168 ); 169 my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 170 $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 171 ok($str, "Camel donkey zebra came\x{301}l CAMEL horse <b>cam\0e\0l</b>..."); 172} 173 174# 34 175 176{ 177 my $str; 178 my $camel = "camel Camel came\x{301}l c-a-m-e-l cam\0e\0l"; 179 180 $Collator->change(ignore_level2 => 0); 181 182 $Collator->change(level => 1); 183 $str = $camel; 184 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 185 ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 186 187 $Collator->change(level => 2); 188 $str = $camel; 189 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 190 ok($str, "=camel= =Camel= came\x{301}l =c-a-m-e-l= =cam\0e\0l="); 191 192 $Collator->change(level => 3); 193 $str = $camel; 194 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 195 ok($str, "=camel= Camel came\x{301}l =c-a-m-e-l= =cam\0e\0l="); 196 197 $Collator->change(level => 4); 198 $str = $camel; 199 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 200 ok($str, "=camel= Camel came\x{301}l c-a-m-e-l =cam\0e\0l="); 201 202 $Collator->change(ignore_level2 => 1); 203 204 $Collator->change(level => 1); 205 $str = $camel; 206 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 207 ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 208 209 $Collator->change(level => 2); 210 $str = $camel; 211 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 212 ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 213 214 $Collator->change(level => 3); 215 $str = $camel; 216 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 217 ok($str, "=camel= Camel =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 218 219 $Collator->change(level => 4); 220 $str = $camel; 221 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 222 ok($str, "=camel= Camel =came\x{301}l= c-a-m-e-l =cam\0e\0l="); 223} 224 225# 42 226 227