xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/view.t (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
1
2BEGIN {
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";
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;
19BEGIN { $| = 1; print "1..93\n"; } # 53 + 4 x @Versions
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##### 1
35
36my $Collator = Unicode::Collate->new(
37  table => 'keys.txt',
38  normalization => undef,
39  UCA_Version => 24,
40);
41
42ok($Collator->viewSortKey(""), "[| | |]");
43
44ok($Collator->viewSortKey("A"), "[0A15 | 0020 | 0008 | FFFF]");
45
46ok($Collator->viewSortKey("ABC"),
47    "[0A15 0A29 0A3D | 0020 0020 0020 | 0008 0008 0008 | FFFF FFFF FFFF]");
48
49ok($Collator->viewSortKey("(12)"),
50    "[0A0C 0A0D | 0020 0020 | 0002 0002 | 027A FFFF FFFF 027B]");
51
52ok($Collator->viewSortKey("!\x{300}"), "[| | | 024B]");
53
54ok($Collator->viewSortKey("\x{300}"), "[| 0035 | 0002 | FFFF]");
55
56$Collator->change(level => 3);
57ok($Collator->viewSortKey("A"), "[0A15 | 0020 | 0008 |]");
58
59$Collator->change(level => 2);
60ok($Collator->viewSortKey("A"), "[0A15 | 0020 | |]");
61
62$Collator->change(level => 1);
63ok($Collator->viewSortKey("A"), "[0A15 | | |]");
64
65##### 10
66
67$Collator->change(level => 4, UCA_Version => 8);
68
69ok($Collator->viewSortKey(""), "[|||]");
70
71ok($Collator->viewSortKey("A"), "[0A15|0020|0008|FFFF]");
72
73ok($Collator->viewSortKey("ABC"),
74    "[0A15 0A29 0A3D|0020 0020 0020|0008 0008 0008|FFFF FFFF FFFF]");
75
76ok($Collator->viewSortKey("(12)"),
77    "[0A0C 0A0D|0020 0020|0002 0002|027A FFFF FFFF 027B]");
78
79ok($Collator->viewSortKey("!\x{300}"), "[|0035|0002|024B FFFF]");
80
81ok($Collator->viewSortKey("\x{300}"), "[|0035|0002|FFFF]");
82
83$Collator->change(level => 3);
84ok($Collator->viewSortKey("A"), "[0A15|0020|0008|]");
85
86$Collator->change(level => 2);
87ok($Collator->viewSortKey("A"), "[0A15|0020||]");
88
89$Collator->change(level => 1);
90ok($Collator->viewSortKey("A"), "[0A15|||]");
91
92##### 19
93
94$Collator->change(level => 3, UCA_Version => 9);
95ok($Collator->viewSortKey("A\x{300}z\x{301}"),
96    "[0A15 0C13 | 0020 0035 0020 0032 | 0008 0002 0002 0002 |]");
97
98$Collator->change(backwards => 1);
99ok($Collator->viewSortKey("A\x{300}z\x{301}"),
100    "[0C13 0A15 | 0020 0035 0020 0032 | 0008 0002 0002 0002 |]");
101
102$Collator->change(backwards => 2);
103ok($Collator->viewSortKey("A\x{300}z\x{301}"),
104    "[0A15 0C13 | 0032 0020 0035 0020 | 0008 0002 0002 0002 |]");
105
106$Collator->change(backwards => [1,3]);
107ok($Collator->viewSortKey("A\x{300}z\x{301}"),
108    "[0C13 0A15 | 0020 0035 0020 0032 | 0002 0002 0002 0008 |]");
109
110$Collator->change(backwards => [2]);
111ok($Collator->viewSortKey("\x{300}\x{301}\x{302}\x{303}"),
112    "[| 004E 003C 0032 0035 | 0002 0002 0002 0002 |]");
113
114$Collator->change(backwards => []);
115ok($Collator->viewSortKey("A\x{300}z\x{301}"),
116    "[0A15 0C13 | 0020 0035 0020 0032 | 0008 0002 0002 0002 |]");
117
118$Collator->change(level => 4);
119
120# Variable
121
122our %origVar = $Collator->change(variable => 'Blanked');
123ok($Collator->viewSortKey("1+2"),
124    '[0A0C 0A0D | 0020 0020 | 0002 0002 | 0031 002B 0032]');
125
126ok($Collator->viewSortKey("?\x{300}!\x{301}\x{315}."),
127    '[| | | 003F 0021 002E]');
128
129ok($Collator->viewSortKey("?!."), '[| | | 003F 0021 002E]');
130
131$Collator->change(variable => 'Non-ignorable');
132ok($Collator->viewSortKey("1+2"),
133    '[0A0C 039F 0A0D | 0020 0020 0020 | 0002 0002 0002 | 0031 002B 0032]');
134
135ok($Collator->viewSortKey("?\x{300}!"),
136    '[024E 024B | 0020 0035 0020 | 0002 0002 0002 | 003F 0300 0021]');
137
138ok($Collator->viewSortKey("?!."),
139    '[024E 024B 0255 | 0020 0020 0020 | 0002 0002 0002 | 003F 0021 002E]');
140
141$Collator->change(variable => 'Shifted');
142ok($Collator->viewSortKey("1+2"),
143    '[0A0C 0A0D | 0020 0020 | 0002 0002 | FFFF 039F FFFF]');
144
145ok($Collator->viewSortKey("?\x{300}!\x{301}\x{315}."),
146    '[| | | 024E 024B 0255]');
147
148ok($Collator->viewSortKey("?!."), '[| | | 024E 024B 0255]');
149
150$Collator->change(variable => 'Shift-Trimmed');
151ok($Collator->viewSortKey("1+2"),
152    '[0A0C 0A0D | 0020 0020 | 0002 0002 | 039F]');
153
154ok($Collator->viewSortKey("?\x{300}!\x{301}\x{315}."),
155    '[| | | 024E 024B 0255]');
156
157ok($Collator->viewSortKey("?!."), '[| | | 024E 024B 0255]');
158
159$Collator->change(%origVar);
160
161##### 37
162
163# Level 3 weight
164
165ok($Collator->viewSortKey("a\x{3042}"),
166    '[0A15 1921 | 0020 0020 | 0002 000E | FFFF FFFF]');
167
168ok($Collator->viewSortKey("A\x{30A2}"),
169    '[0A15 1921 | 0020 0020 | 0008 0011 | FFFF FFFF]');
170
171$Collator->change(upper_before_lower => 1);
172
173ok($Collator->viewSortKey("a\x{3042}"),
174    '[0A15 1921 | 0020 0020 | 0008 000E | FFFF FFFF]');
175
176ok($Collator->viewSortKey("A\x{30A2}"),
177    '[0A15 1921 | 0020 0020 | 0002 0011 | FFFF FFFF]');
178
179$Collator->change(katakana_before_hiragana => 1);
180
181ok($Collator->viewSortKey("a\x{3042}"),
182    '[0A15 1921 | 0020 0020 | 0008 0013 | FFFF FFFF]');
183ok($Collator->viewSortKey("A\x{30A2}"),
184    '[0A15 1921 | 0020 0020 | 0002 000F | FFFF FFFF]');
185
186$Collator->change(upper_before_lower => 0);
187
188ok($Collator->viewSortKey("a\x{3042}"),
189    '[0A15 1921 | 0020 0020 | 0002 0013 | FFFF FFFF]');
190
191ok($Collator->viewSortKey("A\x{30A2}"),
192    '[0A15 1921 | 0020 0020 | 0008 000F | FFFF FFFF]');
193
194$Collator->change(katakana_before_hiragana => 0);
195
196ok($Collator->viewSortKey("a\x{3042}"),
197    '[0A15 1921 | 0020 0020 | 0002 000E | FFFF FFFF]');
198
199ok($Collator->viewSortKey("A\x{30A2}"),
200    '[0A15 1921 | 0020 0020 | 0008 0011 | FFFF FFFF]');
201
202##### 47
203
204our $el = Unicode::Collate->new(
205  entry => <<'ENTRY',
206006C ; [.0B03.0020.0002.006C] # LATIN SMALL LETTER L
207FF4C ; [.0B03.0020.0003.FF4C] # FULLWIDTH LATIN SMALL LETTER L; QQK
208217C ; [.0B03.0020.0004.217C] # SMALL ROMAN NUMERAL FIFTY; QQK
2092113 ; [.0B03.0020.0005.2113] # SCRIPT SMALL L; QQK
21024DB ; [.0B03.0020.0006.24DB] # CIRCLED LATIN SMALL LETTER L; QQK
211004C ; [.0B03.0020.0008.004C] # LATIN CAPITAL LETTER L
212FF2C ; [.0B03.0020.0009.FF2C] # FULLWIDTH LATIN CAPITAL LETTER L; QQK
213216C ; [.0B03.0020.000A.216C] # ROMAN NUMERAL FIFTY; QQK
2142112 ; [.0B03.0020.000B.2112] # SCRIPT CAPITAL L; QQK
21524C1 ; [.0B03.0020.000C.24C1] # CIRCLED LATIN CAPITAL LETTER L; QQK
216ENTRY
217  table => undef,
218  normalization => undef,
219  UCA_Version => 24,
220);
221
222our $el12 = '0B03 0B03 0B03 0B03 0B03 | 0020 0020 0020 0020 0020';
223
224ok($el->viewSortKey("l\x{FF4C}\x{217C}\x{2113}\x{24DB}"),
225    "[$el12 | 0002 0003 0004 0005 0006 | FFFF FFFF FFFF FFFF FFFF]");
226
227ok($el->viewSortKey("L\x{FF2C}\x{216C}\x{2112}\x{24C1}"),
228    "[$el12 | 0008 0009 000A 000B 000C | FFFF FFFF FFFF FFFF FFFF]");
229
230$el->change(upper_before_lower => 1);
231
232ok($el->viewSortKey("l\x{FF4C}\x{217C}\x{2113}\x{24DB}"),
233    "[$el12 | 0008 0009 000A 000B 000C | FFFF FFFF FFFF FFFF FFFF]");
234
235ok($el->viewSortKey("L\x{FF2C}\x{216C}\x{2112}\x{24C1}"),
236    "[$el12 | 0002 0003 0004 0005 0006 | FFFF FFFF FFFF FFFF FFFF]");
237
238$el->change(upper_before_lower => 0);
239
240ok($el->viewSortKey("l\x{FF4C}\x{217C}\x{2113}\x{24DB}"),
241    "[$el12 | 0002 0003 0004 0005 0006 | FFFF FFFF FFFF FFFF FFFF]");
242
243ok($el->viewSortKey("L\x{FF2C}\x{216C}\x{2112}\x{24C1}"),
244    "[$el12 | 0008 0009 000A 000B 000C | FFFF FFFF FFFF FFFF FFFF]");
245
246##### 53
247
248my @Versions = (9, 11, 14, 16, 18, 20, 22, 24, 26, 28);
249
250for my $v (@Versions) {
251    $Collator->change(UCA_Version => $v);
252    my $app = $v >= 26 ? ' |]' : ']';
253
254    $Collator->change(variable => 'Shifted', level => 4);
255    ok($Collator->viewSortKey("1+2"),
256	'[0A0C 0A0D | 0020 0020 | 0002 0002 | FFFF 039F FFFF'.$app);
257
258    $Collator->change(variable => 'Shift-Trimmed');
259    ok($Collator->viewSortKey("1+2"),
260	'[0A0C 0A0D | 0020 0020 | 0002 0002 | 039F'.$app);
261
262    $Collator->change(variable => 'Non-ignorable', level => 3);
263    ok($Collator->viewSortKey("1+2"),
264	'[0A0C 039F 0A0D | 0020 0020 0020 | 0002 0002 0002 |]');
265
266    $Collator->change(variable => 'Blanked');
267    ok($Collator->viewSortKey("1+2"),
268	'[0A0C 0A0D | 0020 0020 | 0002 0002 |]');
269}
270
271