This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Unicode-Collate to CPAN version 1.27
[perl5.git] / cpan / Unicode-Collate / t / ident.t
CommitLineData
750da838
CBW
1
2BEGIN {
d8e4b4ea
CBW
3 unless ('A' eq pack('U', 0x41)) {
4 print "1..0 # Unicode::Collate cannot pack a Unicode code point\n";
5 exit 0;
6 }
7 unless (0x41 == unpack('U', 'A')) {
8 print "1..0 # Unicode::Collate cannot get a Unicode code point\n";
750da838
CBW
9 exit 0;
10 }
11 if ($ENV{PERL_CORE}) {
12 chdir('t') if -d 't';
13 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
14 }
15}
16
17use strict;
18use warnings;
6330ea69 19BEGIN { $| = 1; print "1..54\n"; }
750da838
CBW
20my $count = 0;
21sub ok ($;$) {
22 my $p = my $r = shift;
23 if (@_) {
24 my $x = shift;
25 $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
26 }
27 print $p ? "ok" : "not ok", ' ', ++$count, "\n";
28}
29
30use Unicode::Collate;
31
32ok(1);
33
34#########################
35
36my $Collator = Unicode::Collate->new(
37 table => 'keys.txt',
38 normalization => undef,
6330ea69 39 UCA_Version => 24,
750da838
CBW
40);
41
42# [001F] UNIT SEPARATOR
43{
44 ok($Collator->eq("\0", "\x1F"));
45 ok($Collator->eq("\x1F", "\x{200B}"));
46 ok($Collator->eq("\0", "\x{200B}"));
47 ok($Collator->eq("\x{313}", "\x{343}"));
48 ok($Collator->eq("\x{2000}", "\x{2001}"));
49 ok($Collator->eq("\x{200B}", "\x{200C}"));
50 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
51
52 $Collator->change(identical => 1);
53
54 ok($Collator->lt("\0", "\x1F"));
55 ok($Collator->lt("\x1F", "\x{200B}"));
56 ok($Collator->lt("\0", "\x{200B}"));
57 ok($Collator->lt("\x{313}", "\x{343}"));
58 ok($Collator->lt("\x{2000}", "\x{2001}"));
59 ok($Collator->lt("\x{200B}", "\x{200C}"));
60 ok($Collator->gt("\x{304C}", "\x{304B}\x{3099}"));
61
62 $Collator->change(identical => 0);
63
64 ok($Collator->eq("\0", "\x1F"));
65 ok($Collator->eq("\x1F", "\x{200B}"));
66 ok($Collator->eq("\0", "\x{200B}"));
67 ok($Collator->eq("\x{313}", "\x{343}"));
68 ok($Collator->eq("\x{2000}", "\x{2001}"));
69 ok($Collator->eq("\x{200B}", "\x{200C}"));
70 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
71}
72
73#### 22
74
75eval { require Unicode::Normalize };
76if (!$@) {
77 $Collator->change(normalization => "NFD");
78
79 $Collator->change(identical => 1);
80
81 ok($Collator->lt("\0", "\x{200B}"));
82 ok($Collator->eq("\x{313}", "\x{343}"));
83 ok($Collator->lt("\x{2000}", "\x{2001}"));
84 ok($Collator->lt("\x{200B}", "\x{200C}"));
85 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
86
87 $Collator->change(identical => 0);
88
89 ok($Collator->eq("\0", "\x{200B}"));
90 ok($Collator->eq("\x{313}", "\x{343}"));
91 ok($Collator->eq("\x{2000}", "\x{2001}"));
92 ok($Collator->eq("\x{200B}", "\x{200C}"));
93 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
94} else {
95 ok(1) for 1..10;
96}
97
98$Collator->change(normalization => undef, identical => 1);
99
100##### 32
101
102ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]');
103ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]');
104
105ok($Collator->viewSortKey('a'),
106 '[0A15 | 0020 | 0002 | FFFF | 0000 0061]');
107
108ok($Collator->viewSortKey("\x{304C}"),
109 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]');
110
126be117
JH
111ok($Collator->viewSortKey("\x{4E00}"),
112 '[FB40 CE00 | 0020 | 0002 | FFFF FFFF | 0000 4E00]');
113
750da838
CBW
114ok($Collator->viewSortKey("\x{100000}"),
115 '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]');
116
126be117
JH
117##### 38
118
750da838
CBW
119eval { require Unicode::Normalize };
120if (!$@) {
121 $Collator->change(normalization => "NFD");
122
123 ok($Collator->viewSortKey("\x{304C}"),
124 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]');
125} else {
126 ok(1);
127}
128
129$Collator->change(normalization => undef);
130
126be117 131##### 39
750da838
CBW
132
133$Collator->change(level => 3);
134
135ok($Collator->viewSortKey("\x{304C}"),
136 '[1926 | 0020 013D | 000E 0002 | | 0000 304C]');
137
138$Collator->change(level => 2);
139
140ok($Collator->viewSortKey("\x{304C}"),
141 '[1926 | 0020 013D | | | 0000 304C]');
142
143$Collator->change(level => 1);
144
145ok($Collator->viewSortKey("\x{304C}"),
146 '[1926 | | | | 0000 304C]');
147
126be117 148##### 42
750da838
CBW
149
150$Collator->change(UCA_Version => 8);
151
152ok($Collator->viewSortKey("\x{304C}"),
153 '[1926||||0000 304C]');
154
155$Collator->change(level => 2);
156
157ok($Collator->viewSortKey("\x{304C}"),
158 '[1926|0020 013D|||0000 304C]');
159
160$Collator->change(level => 3);
161
162ok($Collator->viewSortKey("\x{304C}"),
163 '[1926|0020 013D|000E 0002||0000 304C]');
164
165$Collator->change(level => 4);
166
167ok($Collator->viewSortKey("\x{304C}"),
168 '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]');
169
126be117
JH
170ok($Collator->viewSortKey("\x{4E00}"),
171 '[4E00|0020|0002|FFFF|0000 4E00]');
172
173ok($Collator->viewSortKey("\x{100000}"),
174 '[FFA0 8000|0002|0001|FFFF FFFF|0010 0000]');
175
176##### 48
6330ea69
CBW
177
178$Collator->change(UCA_Version => 36);
179
180ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]');
181ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]');
182
183ok($Collator->viewSortKey('a'),
184 '[0A15 | 0020 | 0002 | FFFF | 0000 0061]');
185
186ok($Collator->viewSortKey("\x{304C}"),
187 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]');
188
189ok($Collator->viewSortKey("\x{4E00}"),
190 '[FB40 CE00 | 0020 | 0002 | FFFF | 0000 4E00]');
191
192ok($Collator->viewSortKey("\x{100000}"),
193 '[FBE0 8000 | 0020 | 0002 | FFFF | 0010 0000]');
194
195##### 54