xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t (revision eac174f2741a08d8deb8aae59a7f778ef9b5d770)
191f110e0Safresh1
291f110e0Safresh1BEGIN {
391f110e0Safresh1    if ($ENV{PERL_CORE}) {
491f110e0Safresh1	chdir('t') if -d 't';
591f110e0Safresh1	@INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
691f110e0Safresh1    }
791f110e0Safresh1}
891f110e0Safresh1
991f110e0Safresh1use strict;
1091f110e0Safresh1use warnings;
11b46d8ef2Safresh1BEGIN { $| = 1; print "1..54\n"; }
1291f110e0Safresh1my $count = 0;
1391f110e0Safresh1sub ok ($;$) {
1491f110e0Safresh1    my $p = my $r = shift;
1591f110e0Safresh1    if (@_) {
1691f110e0Safresh1	my $x = shift;
1791f110e0Safresh1	$p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
1891f110e0Safresh1    }
1991f110e0Safresh1    print $p ? "ok" : "not ok", ' ', ++$count, "\n";
2091f110e0Safresh1}
2191f110e0Safresh1
2291f110e0Safresh1use Unicode::Collate;
2391f110e0Safresh1
2491f110e0Safresh1ok(1);
2591f110e0Safresh1
26*eac174f2Safresh1sub _pack_U   { Unicode::Collate::pack_U(@_) }
27*eac174f2Safresh1sub _unpack_U { Unicode::Collate::unpack_U(@_) }
28*eac174f2Safresh1
2991f110e0Safresh1#########################
3091f110e0Safresh1
3191f110e0Safresh1my $Collator = Unicode::Collate->new(
3291f110e0Safresh1    table => 'keys.txt',
3391f110e0Safresh1    normalization => undef,
34b46d8ef2Safresh1    UCA_Version => 24,
3591f110e0Safresh1);
3691f110e0Safresh1
3791f110e0Safresh1# [001F] UNIT SEPARATOR
3891f110e0Safresh1{
3991f110e0Safresh1    ok($Collator->eq("\0",   "\x1F"));
4091f110e0Safresh1    ok($Collator->eq("\x1F", "\x{200B}"));
4191f110e0Safresh1    ok($Collator->eq("\0",   "\x{200B}"));
4291f110e0Safresh1    ok($Collator->eq("\x{313}", "\x{343}"));
4391f110e0Safresh1    ok($Collator->eq("\x{2000}", "\x{2001}"));
4491f110e0Safresh1    ok($Collator->eq("\x{200B}", "\x{200C}"));
4591f110e0Safresh1    ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
4691f110e0Safresh1
4791f110e0Safresh1    $Collator->change(identical => 1);
4891f110e0Safresh1
4991f110e0Safresh1    ok($Collator->lt("\0",   "\x1F"));
5091f110e0Safresh1    ok($Collator->lt("\x1F", "\x{200B}"));
5191f110e0Safresh1    ok($Collator->lt("\0",   "\x{200B}"));
5291f110e0Safresh1    ok($Collator->lt("\x{313}", "\x{343}"));
5391f110e0Safresh1    ok($Collator->lt("\x{2000}", "\x{2001}"));
5491f110e0Safresh1    ok($Collator->lt("\x{200B}", "\x{200C}"));
5591f110e0Safresh1    ok($Collator->gt("\x{304C}", "\x{304B}\x{3099}"));
5691f110e0Safresh1
5791f110e0Safresh1    $Collator->change(identical => 0);
5891f110e0Safresh1
5991f110e0Safresh1    ok($Collator->eq("\0",   "\x1F"));
6091f110e0Safresh1    ok($Collator->eq("\x1F", "\x{200B}"));
6191f110e0Safresh1    ok($Collator->eq("\0",   "\x{200B}"));
6291f110e0Safresh1    ok($Collator->eq("\x{313}", "\x{343}"));
6391f110e0Safresh1    ok($Collator->eq("\x{2000}", "\x{2001}"));
6491f110e0Safresh1    ok($Collator->eq("\x{200B}", "\x{200C}"));
6591f110e0Safresh1    ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
6691f110e0Safresh1}
6791f110e0Safresh1
6891f110e0Safresh1#### 22
6991f110e0Safresh1
7091f110e0Safresh1eval { require Unicode::Normalize };
7191f110e0Safresh1if (!$@) {
7291f110e0Safresh1    $Collator->change(normalization => "NFD");
7391f110e0Safresh1
7491f110e0Safresh1    $Collator->change(identical => 1);
7591f110e0Safresh1
7691f110e0Safresh1    ok($Collator->lt("\0", "\x{200B}"));
7791f110e0Safresh1    ok($Collator->eq("\x{313}", "\x{343}"));
7891f110e0Safresh1    ok($Collator->lt("\x{2000}", "\x{2001}"));
7991f110e0Safresh1    ok($Collator->lt("\x{200B}", "\x{200C}"));
8091f110e0Safresh1    ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
8191f110e0Safresh1
8291f110e0Safresh1    $Collator->change(identical => 0);
8391f110e0Safresh1
8491f110e0Safresh1    ok($Collator->eq("\0", "\x{200B}"));
8591f110e0Safresh1    ok($Collator->eq("\x{313}", "\x{343}"));
8691f110e0Safresh1    ok($Collator->eq("\x{2000}", "\x{2001}"));
8791f110e0Safresh1    ok($Collator->eq("\x{200B}", "\x{200C}"));
8891f110e0Safresh1    ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
8991f110e0Safresh1} else {
9091f110e0Safresh1    ok(1) for 1..10;
9191f110e0Safresh1}
9291f110e0Safresh1
9391f110e0Safresh1$Collator->change(normalization => undef, identical => 1);
9491f110e0Safresh1
9591f110e0Safresh1##### 32
9691f110e0Safresh1
9791f110e0Safresh1ok($Collator->viewSortKey("\0"),       '[| | | | 0000 0000]');
9891f110e0Safresh1ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]');
9991f110e0Safresh1
10091f110e0Safresh1ok($Collator->viewSortKey('a'),
10191f110e0Safresh1    '[0A15 | 0020 | 0002 | FFFF | 0000 0061]');
10291f110e0Safresh1
103*eac174f2Safresh1# 0061 FOR 'a' SHOULD BE A UNICODE CODE POINT, NOT A NATIVE CODE POINT.
104*eac174f2Safresh1
10591f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"),
10691f110e0Safresh1    '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]');
10791f110e0Safresh1
108b8851fccSafresh1ok($Collator->viewSortKey("\x{4E00}"),
109b8851fccSafresh1    '[FB40 CE00 | 0020 | 0002 | FFFF FFFF | 0000 4E00]');
110b8851fccSafresh1
11191f110e0Safresh1ok($Collator->viewSortKey("\x{100000}"),
11291f110e0Safresh1    '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]');
11391f110e0Safresh1
114b8851fccSafresh1##### 38
115b8851fccSafresh1
11691f110e0Safresh1eval { require Unicode::Normalize };
11791f110e0Safresh1if (!$@) {
11891f110e0Safresh1    $Collator->change(normalization => "NFD");
11991f110e0Safresh1
12091f110e0Safresh1    ok($Collator->viewSortKey("\x{304C}"),
12191f110e0Safresh1    '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]');
12291f110e0Safresh1} else {
12391f110e0Safresh1    ok(1);
12491f110e0Safresh1}
12591f110e0Safresh1
12691f110e0Safresh1$Collator->change(normalization => undef);
12791f110e0Safresh1
128b8851fccSafresh1##### 39
12991f110e0Safresh1
13091f110e0Safresh1$Collator->change(level => 3);
13191f110e0Safresh1
13291f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"),
13391f110e0Safresh1    '[1926 | 0020 013D | 000E 0002 | | 0000 304C]');
13491f110e0Safresh1
13591f110e0Safresh1$Collator->change(level => 2);
13691f110e0Safresh1
13791f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"),
13891f110e0Safresh1    '[1926 | 0020 013D | | | 0000 304C]');
13991f110e0Safresh1
14091f110e0Safresh1$Collator->change(level => 1);
14191f110e0Safresh1
14291f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"),
14391f110e0Safresh1    '[1926 | | | | 0000 304C]');
14491f110e0Safresh1
145b8851fccSafresh1##### 42
14691f110e0Safresh1
14791f110e0Safresh1$Collator->change(UCA_Version => 8);
14891f110e0Safresh1
14991f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"),
15091f110e0Safresh1    '[1926||||0000 304C]');
15191f110e0Safresh1
15291f110e0Safresh1$Collator->change(level => 2);
15391f110e0Safresh1
15491f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"),
15591f110e0Safresh1    '[1926|0020 013D|||0000 304C]');
15691f110e0Safresh1
15791f110e0Safresh1$Collator->change(level => 3);
15891f110e0Safresh1
15991f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"),
16091f110e0Safresh1    '[1926|0020 013D|000E 0002||0000 304C]');
16191f110e0Safresh1
16291f110e0Safresh1$Collator->change(level => 4);
16391f110e0Safresh1
16491f110e0Safresh1ok($Collator->viewSortKey("\x{304C}"),
16591f110e0Safresh1    '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]');
16691f110e0Safresh1
167b8851fccSafresh1ok($Collator->viewSortKey("\x{4E00}"),
168b8851fccSafresh1    '[4E00|0020|0002|FFFF|0000 4E00]');
169b8851fccSafresh1
170b8851fccSafresh1ok($Collator->viewSortKey("\x{100000}"),
171b8851fccSafresh1    '[FFA0 8000|0002|0001|FFFF FFFF|0010 0000]');
172b8851fccSafresh1
173b8851fccSafresh1##### 48
174b46d8ef2Safresh1
175b46d8ef2Safresh1$Collator->change(UCA_Version => 36);
176b46d8ef2Safresh1
177b46d8ef2Safresh1ok($Collator->viewSortKey("\0"),       '[| | | | 0000 0000]');
178b46d8ef2Safresh1ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]');
179b46d8ef2Safresh1
180b46d8ef2Safresh1ok($Collator->viewSortKey('a'),
181b46d8ef2Safresh1    '[0A15 | 0020 | 0002 | FFFF | 0000 0061]');
182b46d8ef2Safresh1
183*eac174f2Safresh1# 0061 FOR 'a' SHOULD BE A UNICODE CODE POINT, NOT A NATIVE CODE POINT.
184*eac174f2Safresh1
185b46d8ef2Safresh1ok($Collator->viewSortKey("\x{304C}"),
186b46d8ef2Safresh1    '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]');
187b46d8ef2Safresh1
188b46d8ef2Safresh1ok($Collator->viewSortKey("\x{4E00}"),
189b46d8ef2Safresh1    '[FB40 CE00 | 0020 | 0002 | FFFF | 0000 4E00]');
190b46d8ef2Safresh1
191b46d8ef2Safresh1ok($Collator->viewSortKey("\x{100000}"),
192b46d8ef2Safresh1    '[FBE0 8000 | 0020 | 0002 | FFFF | 0010 0000]');
193b46d8ef2Safresh1
194b46d8ef2Safresh1##### 54
195