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