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