1b39c5158Smillert 2b39c5158SmillertBEGIN { 3b39c5158Smillert if ($ENV{PERL_CORE}) { 4b39c5158Smillert chdir('t') if -d 't'; 5b39c5158Smillert @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 6b39c5158Smillert } 7b39c5158Smillert} 8b39c5158Smillert 9b39c5158Smillertuse strict; 10b39c5158Smillertuse warnings; 11898184e3SsthenBEGIN { $| = 1; print "1..37\n"; } 12898184e3Ssthenmy $count = 0; 13898184e3Ssthensub ok ($;$) { 14898184e3Ssthen my $p = my $r = shift; 15898184e3Ssthen if (@_) { 16898184e3Ssthen my $x = shift; 17898184e3Ssthen $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x; 18898184e3Ssthen } 19898184e3Ssthen print $p ? "ok" : "not ok", ' ', ++$count, "\n"; 20898184e3Ssthen} 21898184e3Ssthen 22b39c5158Smillertuse Unicode::Collate; 23b39c5158Smillert 24b39c5158Smillertok(1); 25b39c5158Smillert 26b39c5158Smillertsub _pack_U { Unicode::Collate::pack_U(@_) } 27b39c5158Smillertsub _unpack_U { Unicode::Collate::unpack_U(@_) } 28b39c5158Smillert 29*256a93a4Safresh1######################### 30*256a93a4Safresh1 31b39c5158Smillertmy $A_acute = _pack_U(0xC1); 32b39c5158Smillertmy $acute = _pack_U(0x0301); 33b39c5158Smillert 34b39c5158Smillertmy $Collator = Unicode::Collate->new( 35b39c5158Smillert table => 'keys.txt', 36b39c5158Smillert normalization => undef, 37b39c5158Smillert); 38b39c5158Smillert 39b39c5158Smillertmy %origAlt = $Collator->change(alternate => 'Blanked'); 40b39c5158Smillert 41b39c5158Smillertok($Collator->lt("death", "de luge")); 42b39c5158Smillertok($Collator->lt("de luge", "de-luge")); 43b39c5158Smillertok($Collator->lt("de-luge", "deluge")); 44b39c5158Smillertok($Collator->lt("deluge", "de\x{2010}luge")); 45b39c5158Smillertok($Collator->lt("deluge", "de Luge")); 46b39c5158Smillert 47b39c5158Smillert$Collator->change(alternate => 'Non-ignorable'); 48b39c5158Smillert 49b39c5158Smillertok($Collator->lt("de luge", "de Luge")); 50b39c5158Smillertok($Collator->lt("de Luge", "de-luge")); 51b39c5158Smillertok($Collator->lt("de-Luge", "de\x{2010}luge")); 52b39c5158Smillertok($Collator->lt("de-luge", "death")); 53b39c5158Smillertok($Collator->lt("death", "deluge")); 54b39c5158Smillert 55b39c5158Smillert$Collator->change(alternate => 'Shifted'); 56b39c5158Smillert 57b39c5158Smillertok($Collator->lt("death", "de luge")); 58b39c5158Smillertok($Collator->lt("de luge", "de-luge")); 59b39c5158Smillertok($Collator->lt("de-luge", "deluge")); 60b39c5158Smillertok($Collator->lt("deluge", "de Luge")); 61b39c5158Smillertok($Collator->lt("de Luge", "deLuge")); 62b39c5158Smillert 63b39c5158Smillert$Collator->change(alternate => 'Shift-Trimmed'); 64b39c5158Smillert 65b39c5158Smillertok($Collator->lt("death", "deluge")); 66b39c5158Smillertok($Collator->lt("deluge", "de luge")); 67b39c5158Smillertok($Collator->lt("de luge", "de-luge")); 68b39c5158Smillertok($Collator->lt("de-luge", "deLuge")); 69b39c5158Smillertok($Collator->lt("deLuge", "de Luge")); 70b39c5158Smillert 71b39c5158Smillert$Collator->change(%origAlt); 72b39c5158Smillert 73b39c5158Smillertok($Collator->{alternate}, 'shifted'); 74b39c5158Smillert 75b39c5158Smillert############## 76b39c5158Smillert 77b39c5158Smillert# ignorable after alternate 78b39c5158Smillert 79b39c5158Smillert# Shifted; 80b39c5158Smillertok($Collator->eq("?\x{300}!\x{301}\x{315}", "?!")); 81b39c5158Smillertok($Collator->eq("?\x{300}A\x{301}", "?$A_acute")); 82b39c5158Smillertok($Collator->eq("?\x{300}", "?")); 83b39c5158Smillertok($Collator->eq("?\x{344}", "?")); # U+0344 has two CEs. 84b39c5158Smillert 85b39c5158Smillert$Collator->change(level => 3); 86b39c5158Smillertok($Collator->eq("\cA", "?")); 87b39c5158Smillert 88b39c5158Smillert$Collator->change(alternate => 'blanked', level => 4); 89b39c5158Smillertok($Collator->eq("?\x{300}!\x{301}\x{315}", "?!")); 90b39c5158Smillertok($Collator->eq("?\x{300}A\x{301}", "?$A_acute")); 91b39c5158Smillertok($Collator->eq("?\x{300}", "?")); 92b39c5158Smillertok($Collator->eq("?\x{344}", "?")); # U+0344 has two CEs. 93b39c5158Smillert 94b39c5158Smillert$Collator->change(level => 3); 95b39c5158Smillertok($Collator->eq("\cA", "?")); 96b39c5158Smillert 97b39c5158Smillert$Collator->change(alternate => 'Non-ignorable', level => 4); 98b39c5158Smillert 99b39c5158Smillertok($Collator->lt("?\x{300}", "?!")); 100b39c5158Smillertok($Collator->gt("?\x{300}A$acute", "?$A_acute")); 101b39c5158Smillertok($Collator->gt("?\x{300}", "?")); 102b39c5158Smillertok($Collator->gt("?\x{344}", "?")); 103b39c5158Smillert 104b39c5158Smillert$Collator->change(level => 3); 105b39c5158Smillertok($Collator->lt("\cA", "?")); 106b39c5158Smillert 107b39c5158Smillert$Collator->change(alternate => 'Shifted', level => 4); 108b39c5158Smillert 109