1*898184e3Ssthen 2*898184e3SsthenBEGIN { 3*898184e3Ssthen unless ("A" eq pack('U', 0x41)) { 4*898184e3Ssthen print "1..0 # Unicode::Collate " . 5*898184e3Ssthen "cannot stringify a Unicode code point\n"; 6*898184e3Ssthen exit 0; 7*898184e3Ssthen } 8*898184e3Ssthen if ($ENV{PERL_CORE}) { 9*898184e3Ssthen chdir('t') if -d 't'; 10*898184e3Ssthen @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 11*898184e3Ssthen } 12*898184e3Ssthen} 13*898184e3Ssthen 14*898184e3Ssthenuse strict; 15*898184e3Ssthenuse warnings; 16*898184e3SsthenBEGIN { $| = 1; print "1..130\n"; } 17*898184e3Ssthenmy $count = 0; 18*898184e3Ssthensub ok ($;$) { 19*898184e3Ssthen my $p = my $r = shift; 20*898184e3Ssthen if (@_) { 21*898184e3Ssthen my $x = shift; 22*898184e3Ssthen $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x; 23*898184e3Ssthen } 24*898184e3Ssthen print $p ? "ok" : "not ok", ' ', ++$count, "\n"; 25*898184e3Ssthen} 26*898184e3Ssthen 27*898184e3Ssthenuse Unicode::Collate::Locale; 28*898184e3Ssthen 29*898184e3Ssthenok(1); 30*898184e3Ssthen 31*898184e3Ssthen######################### 32*898184e3Ssthen 33*898184e3Ssthenour (@listEs, @listEsT, @listFr); 34*898184e3Ssthen 35*898184e3Ssthen@listEs = qw( 36*898184e3Ssthen cambio camella camello camelo Camer�n 37*898184e3Ssthen chico chile Chile CHILE chocolate 38*898184e3Ssthen cielo curso espacio espanto espa�ol esperanza lama l�quido 39*898184e3Ssthen llama Llama LLAMA llamar luz nos nueve �u ojo 40*898184e3Ssthen); 41*898184e3Ssthen 42*898184e3Ssthen@listEsT = qw( 43*898184e3Ssthen cambio camelo camella camello Camer�n cielo curso 44*898184e3Ssthen chico chile Chile CHILE chocolate 45*898184e3Ssthen espacio espanto espa�ol esperanza lama l�quido luz 46*898184e3Ssthen llama Llama LLAMA llamar nos nueve �u ojo 47*898184e3Ssthen); 48*898184e3Ssthen 49*898184e3Ssthen@listFr = ( 50*898184e3Ssthen qw( 51*898184e3Ssthen cadurcien c�cum c�CUM C�CUM C�CUM caennais c�sium cafard 52*898184e3Ssthen coercitif cote c�te C�te cot� Cot� c�t� C�t� coter 53*898184e3Ssthen �l�ve �lev� g�ne g�ne M�CON ma�on 54*898184e3Ssthen p�che P�CHE p�che P�CHE p�ch� P�CH� p�cher p�cher 55*898184e3Ssthen rel�ve relev� r�v�le r�v�l� 56*898184e3Ssthen sur�l�vation s�rement sur�minent s�ret� 57*898184e3Ssthen vice-consul vicennal vice-pr�sident vice-roi vic�simal), 58*898184e3Ssthen "vice versa", "vice-versa", 59*898184e3Ssthen); 60*898184e3Ssthen 61*898184e3Ssthenok(@listEs, 27); 62*898184e3Ssthenok(@listEsT, 27); 63*898184e3Ssthenok(@listFr, 46); 64*898184e3Ssthen 65*898184e3Ssthenok(Unicode::Collate::Locale::_locale('es_MX'), 'es'); 66*898184e3Ssthenok(Unicode::Collate::Locale::_locale('en_CA'), 'default'); 67*898184e3Ssthen 68*898184e3Ssthen# 6 69*898184e3Ssthen 70*898184e3Ssthenmy $Collator = Unicode::Collate::Locale-> 71*898184e3Ssthen new(normalization => undef); 72*898184e3Ssthenok($Collator->getlocale, 'default'); 73*898184e3Ssthen 74*898184e3Ssthenok( 75*898184e3Ssthen join(':', $Collator->sort( 76*898184e3Ssthen qw/ lib strict Carp ExtUtils CGI Time warnings Math overload Pod CPAN / 77*898184e3Ssthen ) ), 78*898184e3Ssthen join(':', 79*898184e3Ssthen qw/ Carp CGI CPAN ExtUtils lib Math overload Pod strict Time warnings / 80*898184e3Ssthen ), 81*898184e3Ssthen); 82*898184e3Ssthen 83*898184e3Ssthenok($Collator->cmp("", ""), 0); 84*898184e3Ssthenok($Collator->eq("", "")); 85*898184e3Ssthenok($Collator->cmp("", "perl"), -1); 86*898184e3Ssthenok($Collator->gt("PERL", "perl")); 87*898184e3Ssthen 88*898184e3Ssthen# 12 89*898184e3Ssthen 90*898184e3Ssthen$Collator->change(level => 2); 91*898184e3Ssthen 92*898184e3Ssthenok($Collator->eq("PERL", "perl")); 93*898184e3Ssthen 94*898184e3Ssthenmy $objEs = Unicode::Collate::Locale->new 95*898184e3Ssthen (normalization => undef, locale => 'ES'); 96*898184e3Ssthenok($objEs->getlocale, 'es'); 97*898184e3Ssthen 98*898184e3Ssthenmy $objEsT = Unicode::Collate::Locale->new 99*898184e3Ssthen (normalization => undef, locale => 'es_ES_traditional'); 100*898184e3Ssthenok($objEsT->getlocale, 'es__traditional'); 101*898184e3Ssthen 102*898184e3Ssthenmy $objFr = Unicode::Collate::Locale->new 103*898184e3Ssthen (normalization => undef, locale => 'FR'); 104*898184e3Ssthenok($objFr->getlocale, 'fr'); 105*898184e3Ssthen 106*898184e3Ssthen# 16 107*898184e3Ssthen 108*898184e3Ssthensub randomize { my %hash; @hash{@_} = (); keys %hash; } # ?! 109*898184e3Ssthen 110*898184e3Ssthenfor (my $i = 0; $i < $#listEs; $i++) { 111*898184e3Ssthen ok($objEs->lt($listEs[$i], $listEs[$i+1])); 112*898184e3Ssthen} 113*898184e3Ssthen# 42 114*898184e3Ssthen 115*898184e3Ssthenfor (my $i = 0; $i < $#listEsT; $i++) { 116*898184e3Ssthen ok($objEsT->lt($listEsT[$i], $listEsT[$i+1])); 117*898184e3Ssthen} 118*898184e3Ssthen# 68 119*898184e3Ssthen 120*898184e3Ssthenfor (my $i = 0; $i < $#listFr; $i++) { 121*898184e3Ssthen ok($objFr->lt($listFr[$i], $listFr[$i+1])); 122*898184e3Ssthen} 123*898184e3Ssthen# 113 124*898184e3Ssthen 125*898184e3Ssthenour @randEs = randomize(@listEs); 126*898184e3Ssthenour @sortEs = $objEs->sort(@randEs); 127*898184e3Ssthenok("@sortEs" eq "@listEs"); 128*898184e3Ssthen 129*898184e3Ssthenour @randEsT = randomize(@listEsT); 130*898184e3Ssthenour @sortEsT = $objEsT->sort(@randEsT); 131*898184e3Ssthenok("@sortEsT" eq "@listEsT"); 132*898184e3Ssthen 133*898184e3Ssthenour @randFr = randomize(@listFr); 134*898184e3Ssthenour @sortFr = $objFr->sort(@randFr); 135*898184e3Ssthenok("@sortFr" eq "@listFr"); 136*898184e3Ssthen 137*898184e3Ssthen# 116 138*898184e3Ssthen 139*898184e3Ssthen{ 140*898184e3Ssthen my $keyXS = '__useXS'; # see Unicode::Collate internal 141*898184e3Ssthen my $noLoc = Unicode::Collate->new(normalization => undef); 142*898184e3Ssthen my $UseXS = ref($noLoc->{$keyXS}); 143*898184e3Ssthen ok(ref($Collator->{$keyXS}), $UseXS); 144*898184e3Ssthen ok(ref($objFr ->{$keyXS}), $UseXS); 145*898184e3Ssthen ok(ref($objEs ->{$keyXS}), $UseXS); 146*898184e3Ssthen ok(ref($objEsT ->{$keyXS}), $UseXS); 147*898184e3Ssthen} 148*898184e3Ssthen# 120 149*898184e3Ssthen 150*898184e3Ssthenok(Unicode::Collate::Locale::_locale('sr'), 'sr'); 151*898184e3Ssthenok(Unicode::Collate::Locale::_locale('sr_Cyrl'), 'sr'); 152*898184e3Ssthenok(Unicode::Collate::Locale::_locale('sr_Latn'), 'sr_Latn'); 153*898184e3Ssthenok(Unicode::Collate::Locale::_locale('sr_LATN'), 'sr_Latn'); 154*898184e3Ssthenok(Unicode::Collate::Locale::_locale('sr_latn'), 'sr_Latn'); 155*898184e3Ssthenok(Unicode::Collate::Locale::_locale('de'), 'default'); 156*898184e3Ssthenok(Unicode::Collate::Locale::_locale('de_phone'), 'de__phonebook'); 157*898184e3Ssthenok(Unicode::Collate::Locale::_locale('de__phonebook'), 'de__phonebook'); 158*898184e3Ssthenok(Unicode::Collate::Locale::_locale('de-phonebk'), 'de__phonebook'); 159*898184e3Ssthenok(Unicode::Collate::Locale::_locale('de--phonebk'), 'de__phonebook'); 160*898184e3Ssthen 161*898184e3Ssthen# 130 162