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 Test; 15BEGIN { plan tests => 37 }; 16 17use strict; 18use warnings; 19use Unicode::Collate; 20 21ok(1); 22 23######################### 24 25sub _pack_U { Unicode::Collate::pack_U(@_) } 26sub _unpack_U { Unicode::Collate::unpack_U(@_) } 27 28my $A_acute = _pack_U(0xC1); 29my $acute = _pack_U(0x0301); 30 31my $Collator = Unicode::Collate->new( 32 table => 'keys.txt', 33 normalization => undef, 34); 35 36my %origAlt = $Collator->change(alternate => 'Blanked'); 37 38ok($Collator->lt("death", "de luge")); 39ok($Collator->lt("de luge", "de-luge")); 40ok($Collator->lt("de-luge", "deluge")); 41ok($Collator->lt("deluge", "de\x{2010}luge")); 42ok($Collator->lt("deluge", "de Luge")); 43 44$Collator->change(alternate => 'Non-ignorable'); 45 46ok($Collator->lt("de luge", "de Luge")); 47ok($Collator->lt("de Luge", "de-luge")); 48ok($Collator->lt("de-Luge", "de\x{2010}luge")); 49ok($Collator->lt("de-luge", "death")); 50ok($Collator->lt("death", "deluge")); 51 52$Collator->change(alternate => 'Shifted'); 53 54ok($Collator->lt("death", "de luge")); 55ok($Collator->lt("de luge", "de-luge")); 56ok($Collator->lt("de-luge", "deluge")); 57ok($Collator->lt("deluge", "de Luge")); 58ok($Collator->lt("de Luge", "deLuge")); 59 60$Collator->change(alternate => 'Shift-Trimmed'); 61 62ok($Collator->lt("death", "deluge")); 63ok($Collator->lt("deluge", "de luge")); 64ok($Collator->lt("de luge", "de-luge")); 65ok($Collator->lt("de-luge", "deLuge")); 66ok($Collator->lt("deLuge", "de Luge")); 67 68$Collator->change(%origAlt); 69 70ok($Collator->{alternate}, 'shifted'); 71 72############## 73 74# ignorable after alternate 75 76# Shifted; 77ok($Collator->eq("?\x{300}!\x{301}\x{315}", "?!")); 78ok($Collator->eq("?\x{300}A\x{301}", "?$A_acute")); 79ok($Collator->eq("?\x{300}", "?")); 80ok($Collator->eq("?\x{344}", "?")); # U+0344 has two CEs. 81 82$Collator->change(level => 3); 83ok($Collator->eq("\cA", "?")); 84 85$Collator->change(alternate => 'blanked', level => 4); 86ok($Collator->eq("?\x{300}!\x{301}\x{315}", "?!")); 87ok($Collator->eq("?\x{300}A\x{301}", "?$A_acute")); 88ok($Collator->eq("?\x{300}", "?")); 89ok($Collator->eq("?\x{344}", "?")); # U+0344 has two CEs. 90 91$Collator->change(level => 3); 92ok($Collator->eq("\cA", "?")); 93 94$Collator->change(alternate => 'Non-ignorable', level => 4); 95 96ok($Collator->lt("?\x{300}", "?!")); 97ok($Collator->gt("?\x{300}A$acute", "?$A_acute")); 98ok($Collator->gt("?\x{300}", "?")); 99ok($Collator->gt("?\x{344}", "?")); 100 101$Collator->change(level => 3); 102ok($Collator->lt("\cA", "?")); 103 104$Collator->change(alternate => 'Shifted', level => 4); 105 106