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