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