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