xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t (revision d59bb9942320b767f2a19aaa7690c8c6e30b724c)
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..48\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);
40
41# [001F] UNIT SEPARATOR
42{
43    ok($Collator->eq("\0",   "\x1F"));
44    ok($Collator->eq("\x1F", "\x{200B}"));
45    ok($Collator->eq("\0",   "\x{200B}"));
46    ok($Collator->eq("\x{313}", "\x{343}"));
47    ok($Collator->eq("\x{2000}", "\x{2001}"));
48    ok($Collator->eq("\x{200B}", "\x{200C}"));
49    ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
50
51    $Collator->change(identical => 1);
52
53    ok($Collator->lt("\0",   "\x1F"));
54    ok($Collator->lt("\x1F", "\x{200B}"));
55    ok($Collator->lt("\0",   "\x{200B}"));
56    ok($Collator->lt("\x{313}", "\x{343}"));
57    ok($Collator->lt("\x{2000}", "\x{2001}"));
58    ok($Collator->lt("\x{200B}", "\x{200C}"));
59    ok($Collator->gt("\x{304C}", "\x{304B}\x{3099}"));
60
61    $Collator->change(identical => 0);
62
63    ok($Collator->eq("\0",   "\x1F"));
64    ok($Collator->eq("\x1F", "\x{200B}"));
65    ok($Collator->eq("\0",   "\x{200B}"));
66    ok($Collator->eq("\x{313}", "\x{343}"));
67    ok($Collator->eq("\x{2000}", "\x{2001}"));
68    ok($Collator->eq("\x{200B}", "\x{200C}"));
69    ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
70}
71
72#### 22
73
74eval { require Unicode::Normalize };
75if (!$@) {
76    $Collator->change(normalization => "NFD");
77
78    $Collator->change(identical => 1);
79
80    ok($Collator->lt("\0", "\x{200B}"));
81    ok($Collator->eq("\x{313}", "\x{343}"));
82    ok($Collator->lt("\x{2000}", "\x{2001}"));
83    ok($Collator->lt("\x{200B}", "\x{200C}"));
84    ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
85
86    $Collator->change(identical => 0);
87
88    ok($Collator->eq("\0", "\x{200B}"));
89    ok($Collator->eq("\x{313}", "\x{343}"));
90    ok($Collator->eq("\x{2000}", "\x{2001}"));
91    ok($Collator->eq("\x{200B}", "\x{200C}"));
92    ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
93} else {
94    ok(1) for 1..10;
95}
96
97$Collator->change(normalization => undef, identical => 1);
98
99##### 32
100
101ok($Collator->viewSortKey("\0"),       '[| | | | 0000 0000]');
102ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]');
103
104ok($Collator->viewSortKey('a'),
105    '[0A15 | 0020 | 0002 | FFFF | 0000 0061]');
106
107ok($Collator->viewSortKey("\x{304C}"),
108    '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]');
109
110ok($Collator->viewSortKey("\x{4E00}"),
111    '[FB40 CE00 | 0020 | 0002 | FFFF FFFF | 0000 4E00]');
112
113ok($Collator->viewSortKey("\x{100000}"),
114    '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]');
115
116##### 38
117
118eval { require Unicode::Normalize };
119if (!$@) {
120    $Collator->change(normalization => "NFD");
121
122    ok($Collator->viewSortKey("\x{304C}"),
123    '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]');
124} else {
125    ok(1);
126}
127
128$Collator->change(normalization => undef);
129
130##### 39
131
132$Collator->change(level => 3);
133
134ok($Collator->viewSortKey("\x{304C}"),
135    '[1926 | 0020 013D | 000E 0002 | | 0000 304C]');
136
137$Collator->change(level => 2);
138
139ok($Collator->viewSortKey("\x{304C}"),
140    '[1926 | 0020 013D | | | 0000 304C]');
141
142$Collator->change(level => 1);
143
144ok($Collator->viewSortKey("\x{304C}"),
145    '[1926 | | | | 0000 304C]');
146
147##### 42
148
149$Collator->change(UCA_Version => 8);
150
151ok($Collator->viewSortKey("\x{304C}"),
152    '[1926||||0000 304C]');
153
154$Collator->change(level => 2);
155
156ok($Collator->viewSortKey("\x{304C}"),
157    '[1926|0020 013D|||0000 304C]');
158
159$Collator->change(level => 3);
160
161ok($Collator->viewSortKey("\x{304C}"),
162    '[1926|0020 013D|000E 0002||0000 304C]');
163
164$Collator->change(level => 4);
165
166ok($Collator->viewSortKey("\x{304C}"),
167    '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]');
168
169ok($Collator->viewSortKey("\x{4E00}"),
170    '[4E00|0020|0002|FFFF|0000 4E00]');
171
172ok($Collator->viewSortKey("\x{100000}"),
173    '[FFA0 8000|0002|0001|FFFF FFFF|0010 0000]');
174
175##### 48
176