xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/lib/Unicode/Collate/t/view.t (revision 0:68f95e015346)
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}
9
10BEGIN {
11    if ($ENV{PERL_CORE}) {
12        chdir('t') if -d 't';
13        @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
14    }
15}
16
17use Test;
18BEGIN { plan tests => 53 };
19
20use strict;
21use warnings;
22use Unicode::Collate;
23
24#########################
25
26ok(1);
27
28my $Collator = Unicode::Collate->new(
29  table => 'keys.txt',
30  normalization => undef,
31);
32
33##############
34
35ok($Collator->viewSortKey(""), "[| | |]");
36
37ok($Collator->viewSortKey("A"), "[0A15 | 0020 | 0008 | FFFF]");
38
39ok($Collator->viewSortKey("ABC"),
40    "[0A15 0A29 0A3D | 0020 0020 0020 | 0008 0008 0008 | FFFF FFFF FFFF]");
41
42ok($Collator->viewSortKey("(12)"),
43    "[0A0C 0A0D | 0020 0020 | 0002 0002 | 027A FFFF FFFF 027B]");
44
45ok($Collator->viewSortKey("!\x{300}"), "[| | | 024B]");
46
47ok($Collator->viewSortKey("\x{300}"), "[| 0035 | 0002 | FFFF]");
48
49$Collator->change(level => 3);
50ok($Collator->viewSortKey("A"), "[0A15 | 0020 | 0008 |]");
51
52$Collator->change(level => 2);
53ok($Collator->viewSortKey("A"), "[0A15 | 0020 | |]");
54
55$Collator->change(level => 1);
56ok($Collator->viewSortKey("A"), "[0A15 | | |]");
57
58### Version 8
59
60$Collator->change(level => 4, UCA_Version => 8);
61
62ok($Collator->viewSortKey(""), "[|||]");
63
64ok($Collator->viewSortKey("A"), "[0A15|0020|0008|FFFF]");
65
66ok($Collator->viewSortKey("ABC"),
67    "[0A15 0A29 0A3D|0020 0020 0020|0008 0008 0008|FFFF FFFF FFFF]");
68
69ok($Collator->viewSortKey("(12)"),
70    "[0A0C 0A0D|0020 0020|0002 0002|027A FFFF FFFF 027B]");
71
72ok($Collator->viewSortKey("!\x{300}"), "[|0035|0002|024B FFFF]");
73
74ok($Collator->viewSortKey("\x{300}"), "[|0035|0002|FFFF]");
75
76$Collator->change(level => 3);
77ok($Collator->viewSortKey("A"), "[0A15|0020|0008|]");
78
79$Collator->change(level => 2);
80ok($Collator->viewSortKey("A"), "[0A15|0020||]");
81
82$Collator->change(level => 1);
83ok($Collator->viewSortKey("A"), "[0A15|||]");
84
85# Version 9
86
87$Collator->change(level => 3, UCA_Version => 9);
88ok($Collator->viewSortKey("A\x{300}z\x{301}"),
89    "[0A15 0C13 | 0020 0035 0020 0032 | 0008 0002 0002 0002 |]");
90
91$Collator->change(backwards => 1);
92ok($Collator->viewSortKey("A\x{300}z\x{301}"),
93    "[0C13 0A15 | 0020 0035 0020 0032 | 0008 0002 0002 0002 |]");
94
95$Collator->change(backwards => 2);
96ok($Collator->viewSortKey("A\x{300}z\x{301}"),
97    "[0A15 0C13 | 0032 0020 0035 0020 | 0008 0002 0002 0002 |]");
98
99$Collator->change(backwards => [1,3]);
100ok($Collator->viewSortKey("A\x{300}z\x{301}"),
101    "[0C13 0A15 | 0020 0035 0020 0032 | 0002 0002 0002 0008 |]");
102
103$Collator->change(backwards => [2]);
104ok($Collator->viewSortKey("\x{300}\x{301}\x{302}\x{303}"),
105    "[| 004E 003C 0032 0035 | 0002 0002 0002 0002 |]");
106
107$Collator->change(backwards => []);
108ok($Collator->viewSortKey("A\x{300}z\x{301}"),
109    "[0A15 0C13 | 0020 0035 0020 0032 | 0008 0002 0002 0002 |]");
110
111$Collator->change(level => 4);
112
113# Variable
114
115our %origVar = $Collator->change(variable => 'Blanked');
116ok($Collator->viewSortKey("1+2"),
117    '[0A0C 0A0D | 0020 0020 | 0002 0002 | 0031 002B 0032]');
118
119ok($Collator->viewSortKey("?\x{300}!\x{301}\x{315}."),
120    '[| | | 003F 0021 002E]');
121
122ok($Collator->viewSortKey("?!."), '[| | | 003F 0021 002E]');
123
124$Collator->change(variable => 'Non-ignorable');
125ok($Collator->viewSortKey("1+2"),
126    '[0A0C 039F 0A0D | 0020 0020 0020 | 0002 0002 0002 | 0031 002B 0032]');
127
128ok($Collator->viewSortKey("?\x{300}!"),
129    '[024E 024B | 0020 0035 0020 | 0002 0002 0002 | 003F 0300 0021]');
130
131ok($Collator->viewSortKey("?!."),
132    '[024E 024B 0255 | 0020 0020 0020 | 0002 0002 0002 | 003F 0021 002E]');
133
134$Collator->change(variable => 'Shifted');
135ok($Collator->viewSortKey("1+2"),
136    '[0A0C 0A0D | 0020 0020 | 0002 0002 | FFFF 039F FFFF]');
137
138ok($Collator->viewSortKey("?\x{300}!\x{301}\x{315}."),
139    '[| | | 024E 024B 0255]');
140
141ok($Collator->viewSortKey("?!."), '[| | | 024E 024B 0255]');
142
143$Collator->change(variable => 'Shift-Trimmed');
144ok($Collator->viewSortKey("1+2"),
145    '[0A0C 0A0D | 0020 0020 | 0002 0002 | 039F]');
146
147ok($Collator->viewSortKey("?\x{300}!\x{301}\x{315}."),
148    '[| | | 024E 024B 0255]');
149
150ok($Collator->viewSortKey("?!."), '[| | | 024E 024B 0255]');
151
152$Collator->change(%origVar);
153
154#####
155
156# Level 3 weight
157
158ok($Collator->viewSortKey("a\x{3042}"),
159    '[0A15 1921 | 0020 0020 | 0002 000E | FFFF FFFF]');
160
161ok($Collator->viewSortKey("A\x{30A2}"),
162    '[0A15 1921 | 0020 0020 | 0008 0011 | FFFF FFFF]');
163
164$Collator->change(upper_before_lower => 1);
165
166ok($Collator->viewSortKey("a\x{3042}"),
167    '[0A15 1921 | 0020 0020 | 0008 000E | FFFF FFFF]');
168
169ok($Collator->viewSortKey("A\x{30A2}"),
170    '[0A15 1921 | 0020 0020 | 0002 0011 | FFFF FFFF]');
171
172$Collator->change(katakana_before_hiragana => 1);
173
174ok($Collator->viewSortKey("a\x{3042}"),
175    '[0A15 1921 | 0020 0020 | 0008 0013 | FFFF FFFF]');
176ok($Collator->viewSortKey("A\x{30A2}"),
177    '[0A15 1921 | 0020 0020 | 0002 000F | FFFF FFFF]');
178
179$Collator->change(upper_before_lower => 0);
180
181ok($Collator->viewSortKey("a\x{3042}"),
182    '[0A15 1921 | 0020 0020 | 0002 0013 | FFFF FFFF]');
183
184ok($Collator->viewSortKey("A\x{30A2}"),
185    '[0A15 1921 | 0020 0020 | 0008 000F | FFFF FFFF]');
186
187$Collator->change(katakana_before_hiragana => 0);
188
189ok($Collator->viewSortKey("a\x{3042}"),
190    '[0A15 1921 | 0020 0020 | 0002 000E | FFFF FFFF]');
191
192ok($Collator->viewSortKey("A\x{30A2}"),
193    '[0A15 1921 | 0020 0020 | 0008 0011 | FFFF FFFF]');
194
195#####
196
197our $el = Unicode::Collate->new(
198  entry => <<'ENTRY',
199006C ; [.0B03.0020.0002.006C] # LATIN SMALL LETTER L
200FF4C ; [.0B03.0020.0003.FF4C] # FULLWIDTH LATIN SMALL LETTER L; QQK
201217C ; [.0B03.0020.0004.217C] # SMALL ROMAN NUMERAL FIFTY; QQK
2022113 ; [.0B03.0020.0005.2113] # SCRIPT SMALL L; QQK
20324DB ; [.0B03.0020.0006.24DB] # CIRCLED LATIN SMALL LETTER L; QQK
204004C ; [.0B03.0020.0008.004C] # LATIN CAPITAL LETTER L
205FF2C ; [.0B03.0020.0009.FF2C] # FULLWIDTH LATIN CAPITAL LETTER L; QQK
206216C ; [.0B03.0020.000A.216C] # ROMAN NUMERAL FIFTY; QQK
2072112 ; [.0B03.0020.000B.2112] # SCRIPT CAPITAL L; QQK
20824C1 ; [.0B03.0020.000C.24C1] # CIRCLED LATIN CAPITAL LETTER L; QQK
209ENTRY
210  table => undef,
211  normalization => undef,
212);
213
214our $el12 = '0B03 0B03 0B03 0B03 0B03 | 0020 0020 0020 0020 0020';
215
216ok($el->viewSortKey("l\x{FF4C}\x{217C}\x{2113}\x{24DB}"),
217    "[$el12 | 0002 0003 0004 0005 0006 | FFFF FFFF FFFF FFFF FFFF]");
218
219ok($el->viewSortKey("L\x{FF2C}\x{216C}\x{2112}\x{24C1}"),
220    "[$el12 | 0008 0009 000A 000B 000C | FFFF FFFF FFFF FFFF FFFF]");
221
222$el->change(upper_before_lower => 1);
223
224ok($el->viewSortKey("l\x{FF4C}\x{217C}\x{2113}\x{24DB}"),
225    "[$el12 | 0008 0009 000A 000B 000C | FFFF FFFF FFFF FFFF FFFF]");
226
227ok($el->viewSortKey("L\x{FF2C}\x{216C}\x{2112}\x{24C1}"),
228    "[$el12 | 0002 0003 0004 0005 0006 | FFFF FFFF FFFF FFFF FFFF]");
229
230$el->change(upper_before_lower => 0);
231
232ok($el->viewSortKey("l\x{FF4C}\x{217C}\x{2113}\x{24DB}"),
233    "[$el12 | 0002 0003 0004 0005 0006 | FFFF FFFF FFFF FFFF FFFF]");
234
235ok($el->viewSortKey("L\x{FF2C}\x{216C}\x{2112}\x{24C1}"),
236    "[$el12 | 0008 0009 000A 000B 000C | FFFF FFFF FFFF FFFF FFFF]");
237
238#####
239
240