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..42\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 ignore_level2 => 1, 40 entry => << 'ENTRIES', 411B00 ; [.0000.00FF.0002.1B00] # BALINESE SIGN ULU RICEM 421B01 ; [.0000.0100.0002.1B01] # BALINESE SIGN ULU CANDRA 431B02 ; [.0000.0101.0002.1B02] # BALINESE SIGN CECEK 4403C6 ; [.1900.0020.0002.03C6] # GREEK SMALL LETTER PHI 4503D5 ; [.1900.0020.0004.03D5] # GREEK PHI SYMBOL; QQK 4603A6 ; [.1900.0020.0008.03A6] # GREEK CAPITAL LETTER PHI 47ENTRIES 48); 49 50ok($Collator->eq("camel", "came\x{300}l")); 51ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 52ok($Collator->lt("camel", "Camel")); 53 54# 4 55 56$Collator->change(ignore_level2 => 0); 57 58ok($Collator->lt("camel", "came\x{300}l")); 59ok($Collator->lt("camel", "ca\x{300}me\x{301}l")); 60ok($Collator->lt("camel", "Camel")); 61 62$Collator->change(level => 1); 63 64ok($Collator->eq("camel", "came\x{300}l")); 65ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 66ok($Collator->eq("camel", "Camel")); 67 68$Collator->change(level => 2); 69 70ok($Collator->lt("camel", "came\x{300}l")); 71ok($Collator->lt("camel", "ca\x{300}me\x{301}l")); 72ok($Collator->eq("camel", "Camel")); 73 74# 13 75 76$Collator->change(ignore_level2 => 1); 77 78ok($Collator->eq("camel", "came\x{300}l")); 79ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 80ok($Collator->eq("camel", "Camel")); 81 82$Collator->change(level => 3); 83 84ok($Collator->eq("camel", "came\x{300}l")); 85ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 86ok($Collator->lt("camel", "Camel")); 87 88# secondary: neither 00FF nor 0100 is zero 89ok($Collator->eq("camel", "came\x{1B00}l")); 90ok($Collator->eq("camel", "came\x{1B01}l")); 91ok($Collator->eq("camel", "came\x{1B02}l")); 92 93# primary: 1900 isn't zero 94ok($Collator->lt("\x{3C6}", "\x{3D5}")); 95ok($Collator->lt("\x{3D5}", "\x{3A6}")); 96 97# 24 98 99{ 100 my $s; 101 my $txt = "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L."; 102 103 $Collator->change(ignore_level2 => 0, level => 1); 104 105 $s = $txt; 106 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 107 ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 108 109 $Collator->change(level => 2); 110 111 $s = $txt; 112 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 113 ok($s, "=Camel= donkey zebra came\x{301}l =CAMEL= horse =cAm\0E\0L=."); 114 115 $Collator->change(level => 3); 116 117 $s = $txt; 118 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 119 ok($s, "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L."); 120 121 $Collator->change(ignore_level2 => 1); 122 123 $s = $txt; 124 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 125 ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse cAm\0E\0L."); 126 127 $Collator->change(level => 2); 128 $s = $txt; 129 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 130 ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 131 132 $Collator->change(level => 1); 133 $s = $txt; 134 $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 135 ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 136 137} 138 139# 30 140 141{ 142 my $c = Unicode::Collate->new( 143 table => 'keys.txt', normalization => undef, level => 1, 144 ); 145 my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 146 $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 147 ok($str, "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cam\0e\0l</b>..."); 148} 149 150{ 151 my $c = Unicode::Collate->new( 152 table => 'keys.txt', normalization => undef, level => 2, 153 ); 154 my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 155 $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 156 ok($str, "<b>Camel</b> donkey zebra came\x{301}l <b>CAMEL</b> horse <b>cam\0e\0l</b>..."); 157} 158 159{ 160 my $c = Unicode::Collate->new( 161 table => 'keys.txt', normalization => undef, ignore_level2 => 1, 162 ); 163 my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 164 $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 165 ok($str, "Camel donkey zebra <b>came\x{301}l</b> CAMEL horse <b>cam\0e\0l</b>..."); 166} 167 168{ 169 my $c = Unicode::Collate->new( 170 table => 'keys.txt', normalization => undef, level => 3, 171 ); 172 my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 173 $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 174 ok($str, "Camel donkey zebra came\x{301}l CAMEL horse <b>cam\0e\0l</b>..."); 175} 176 177# 34 178 179{ 180 my $str; 181 my $camel = "camel Camel came\x{301}l c-a-m-e-l cam\0e\0l"; 182 183 $Collator->change(ignore_level2 => 0); 184 185 $Collator->change(level => 1); 186 $str = $camel; 187 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 188 ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 189 190 $Collator->change(level => 2); 191 $str = $camel; 192 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 193 ok($str, "=camel= =Camel= came\x{301}l =c-a-m-e-l= =cam\0e\0l="); 194 195 $Collator->change(level => 3); 196 $str = $camel; 197 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 198 ok($str, "=camel= Camel came\x{301}l =c-a-m-e-l= =cam\0e\0l="); 199 200 $Collator->change(level => 4); 201 $str = $camel; 202 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 203 ok($str, "=camel= Camel came\x{301}l c-a-m-e-l =cam\0e\0l="); 204 205 $Collator->change(ignore_level2 => 1); 206 207 $Collator->change(level => 1); 208 $str = $camel; 209 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 210 ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 211 212 $Collator->change(level => 2); 213 $str = $camel; 214 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 215 ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 216 217 $Collator->change(level => 3); 218 $str = $camel; 219 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 220 ok($str, "=camel= Camel =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 221 222 $Collator->change(level => 4); 223 $str = $camel; 224 $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 225 ok($str, "=camel= Camel =came\x{301}l= c-a-m-e-l =cam\0e\0l="); 226} 227 228# 42 229 230