This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Unicode-Collate to CPAN version 0.92
[perl5.git] / cpan / Unicode-Collate / t / ident.t
CommitLineData
750da838
CBW
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..45\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#########################
32
33my $Collator = Unicode::Collate->new(
34 table => 'keys.txt',
35 normalization => undef,
36);
37
38# [001F] UNIT SEPARATOR
39{
40 ok($Collator->eq("\0", "\x1F"));
41 ok($Collator->eq("\x1F", "\x{200B}"));
42 ok($Collator->eq("\0", "\x{200B}"));
43 ok($Collator->eq("\x{313}", "\x{343}"));
44 ok($Collator->eq("\x{2000}", "\x{2001}"));
45 ok($Collator->eq("\x{200B}", "\x{200C}"));
46 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
47
48 $Collator->change(identical => 1);
49
50 ok($Collator->lt("\0", "\x1F"));
51 ok($Collator->lt("\x1F", "\x{200B}"));
52 ok($Collator->lt("\0", "\x{200B}"));
53 ok($Collator->lt("\x{313}", "\x{343}"));
54 ok($Collator->lt("\x{2000}", "\x{2001}"));
55 ok($Collator->lt("\x{200B}", "\x{200C}"));
56 ok($Collator->gt("\x{304C}", "\x{304B}\x{3099}"));
57
58 $Collator->change(identical => 0);
59
60 ok($Collator->eq("\0", "\x1F"));
61 ok($Collator->eq("\x1F", "\x{200B}"));
62 ok($Collator->eq("\0", "\x{200B}"));
63 ok($Collator->eq("\x{313}", "\x{343}"));
64 ok($Collator->eq("\x{2000}", "\x{2001}"));
65 ok($Collator->eq("\x{200B}", "\x{200C}"));
66 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
67}
68
69#### 22
70
71eval { require Unicode::Normalize };
72if (!$@) {
73 $Collator->change(normalization => "NFD");
74
75 $Collator->change(identical => 1);
76
77 ok($Collator->lt("\0", "\x{200B}"));
78 ok($Collator->eq("\x{313}", "\x{343}"));
79 ok($Collator->lt("\x{2000}", "\x{2001}"));
80 ok($Collator->lt("\x{200B}", "\x{200C}"));
81 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
82
83 $Collator->change(identical => 0);
84
85 ok($Collator->eq("\0", "\x{200B}"));
86 ok($Collator->eq("\x{313}", "\x{343}"));
87 ok($Collator->eq("\x{2000}", "\x{2001}"));
88 ok($Collator->eq("\x{200B}", "\x{200C}"));
89 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
90} else {
91 ok(1) for 1..10;
92}
93
94$Collator->change(normalization => undef, identical => 1);
95
96##### 32
97
98ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]');
99ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]');
100
101ok($Collator->viewSortKey('a'),
102 '[0A15 | 0020 | 0002 | FFFF | 0000 0061]');
103
104ok($Collator->viewSortKey("\x{304C}"),
105 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]');
106
107ok($Collator->viewSortKey("\x{100000}"),
108 '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]');
109
110eval { require Unicode::Normalize };
111if (!$@) {
112 $Collator->change(normalization => "NFD");
113
114 ok($Collator->viewSortKey("\x{304C}"),
115 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]');
116} else {
117 ok(1);
118}
119
120$Collator->change(normalization => undef);
121
122##### 38
123
124$Collator->change(level => 3);
125
126ok($Collator->viewSortKey("\x{304C}"),
127 '[1926 | 0020 013D | 000E 0002 | | 0000 304C]');
128
129$Collator->change(level => 2);
130
131ok($Collator->viewSortKey("\x{304C}"),
132 '[1926 | 0020 013D | | | 0000 304C]');
133
134$Collator->change(level => 1);
135
136ok($Collator->viewSortKey("\x{304C}"),
137 '[1926 | | | | 0000 304C]');
138
139##### 41
140
141$Collator->change(UCA_Version => 8);
142
143ok($Collator->viewSortKey("\x{304C}"),
144 '[1926||||0000 304C]');
145
146$Collator->change(level => 2);
147
148ok($Collator->viewSortKey("\x{304C}"),
149 '[1926|0020 013D|||0000 304C]');
150
151$Collator->change(level => 3);
152
153ok($Collator->viewSortKey("\x{304C}"),
154 '[1926|0020 013D|000E 0002||0000 304C]');
155
156$Collator->change(level => 4);
157
158ok($Collator->viewSortKey("\x{304C}"),
159 '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]');
160
161##### 45