xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_test.t (revision 50b7afb2c2c0993b0894d4e34bf857cb13ed9c80)
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