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