BEGIN { unless ("A" eq pack('U', 0x41)) { print "1..0 # Unicode::Collate " . "cannot stringify a Unicode code point\n"; exit 0; } if ($ENV{PERL_CORE}) { chdir('t') if -d 't'; @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); } } use Test; BEGIN { plan tests => 42 }; use strict; use warnings; use Unicode::Collate; ok(1); ######################### my $Collator = Unicode::Collate->new( table => 'keys.txt', normalization => undef, ignore_level2 => 1, entry => << 'ENTRIES', 1B00 ; [.0000.00FF.0002.1B00] # BALINESE SIGN ULU RICEM 1B01 ; [.0000.0100.0002.1B01] # BALINESE SIGN ULU CANDRA 1B02 ; [.0000.0101.0002.1B02] # BALINESE SIGN CECEK 03C6 ; [.1900.0020.0002.03C6] # GREEK SMALL LETTER PHI 03D5 ; [.1900.0020.0004.03D5] # GREEK PHI SYMBOL; QQK 03A6 ; [.1900.0020.0008.03A6] # GREEK CAPITAL LETTER PHI ENTRIES ); ok($Collator->eq("camel", "came\x{300}l")); ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); ok($Collator->lt("camel", "Camel")); # 4 $Collator->change(ignore_level2 => 0); ok($Collator->lt("camel", "came\x{300}l")); ok($Collator->lt("camel", "ca\x{300}me\x{301}l")); ok($Collator->lt("camel", "Camel")); $Collator->change(level => 1); ok($Collator->eq("camel", "came\x{300}l")); ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); ok($Collator->eq("camel", "Camel")); $Collator->change(level => 2); ok($Collator->lt("camel", "came\x{300}l")); ok($Collator->lt("camel", "ca\x{300}me\x{301}l")); ok($Collator->eq("camel", "Camel")); # 13 $Collator->change(ignore_level2 => 1); ok($Collator->eq("camel", "came\x{300}l")); ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); ok($Collator->eq("camel", "Camel")); $Collator->change(level => 3); ok($Collator->eq("camel", "came\x{300}l")); ok($Collator->eq("camel", "ca\x{300}me\x{301}l")); ok($Collator->lt("camel", "Camel")); # secondary: neither 00FF nor 0100 is zero ok($Collator->eq("camel", "came\x{1B00}l")); ok($Collator->eq("camel", "came\x{1B01}l")); ok($Collator->eq("camel", "came\x{1B02}l")); # primary: 1900 isn't zero ok($Collator->lt("\x{3C6}", "\x{3D5}")); ok($Collator->lt("\x{3D5}", "\x{3A6}")); # 24 { my $s; my $txt = "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L."; $Collator->change(ignore_level2 => 0, level => 1); $s = $txt; $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); $Collator->change(level => 2); $s = $txt; $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); ok($s, "=Camel= donkey zebra came\x{301}l =CAMEL= horse =cAm\0E\0L=."); $Collator->change(level => 3); $s = $txt; $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); ok($s, "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L."); $Collator->change(ignore_level2 => 1); $s = $txt; $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse cAm\0E\0L."); $Collator->change(level => 2); $s = $txt; $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); $Collator->change(level => 1); $s = $txt; $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); } # 30 { my $c = Unicode::Collate->new( table => 'keys.txt', normalization => undef, level => 1, ); my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; $c->gsubst($str, "camel", sub { "$_[0]" }); ok($str, "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."); } { my $c = Unicode::Collate->new( table => 'keys.txt', normalization => undef, level => 2, ); my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; $c->gsubst($str, "camel", sub { "$_[0]" }); ok($str, "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."); } { my $c = Unicode::Collate->new( table => 'keys.txt', normalization => undef, ignore_level2 => 1, ); my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; $c->gsubst($str, "camel", sub { "$_[0]" }); ok($str, "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."); } { my $c = Unicode::Collate->new( table => 'keys.txt', normalization => undef, level => 3, ); my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; $c->gsubst($str, "camel", sub { "$_[0]" }); ok($str, "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."); } # 34 { my $str; my $camel = "camel Camel came\x{301}l c-a-m-e-l cam\0e\0l"; $Collator->change(ignore_level2 => 0); $Collator->change(level => 1); $str = $camel; $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); $Collator->change(level => 2); $str = $camel; $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); ok($str, "=camel= =Camel= came\x{301}l =c-a-m-e-l= =cam\0e\0l="); $Collator->change(level => 3); $str = $camel; $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); ok($str, "=camel= Camel came\x{301}l =c-a-m-e-l= =cam\0e\0l="); $Collator->change(level => 4); $str = $camel; $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); ok($str, "=camel= Camel came\x{301}l c-a-m-e-l =cam\0e\0l="); $Collator->change(ignore_level2 => 1); $Collator->change(level => 1); $str = $camel; $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); $Collator->change(level => 2); $str = $camel; $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); $Collator->change(level => 3); $str = $camel; $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); ok($str, "=camel= Camel =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); $Collator->change(level => 4); $str = $camel; $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); ok($str, "=camel= Camel =came\x{301}l= c-a-m-e-l =cam\0e\0l="); } # 42