xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t (revision 5a38ef86d0b61900239c7913d24a05e7b88a58f0)
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..54\n"; }
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,
39    UCA_Version => 24,
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
111ok($Collator->viewSortKey("\x{4E00}"),
112    '[FB40 CE00 | 0020 | 0002 | FFFF FFFF | 0000 4E00]');
113
114ok($Collator->viewSortKey("\x{100000}"),
115    '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]');
116
117##### 38
118
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
131##### 39
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
148##### 42
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
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
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
196