xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/default.t (revision 256a93a44f36679bee503f12e49566c2183f6181)
1898184e3Ssthen
2898184e3SsthenBEGIN {
3898184e3Ssthen    if ($ENV{PERL_CORE}) {
4898184e3Ssthen	chdir('t') if -d 't';
5898184e3Ssthen	@INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
6898184e3Ssthen    }
7898184e3Ssthen}
8898184e3Ssthen
9898184e3Ssthenuse strict;
10898184e3Ssthenuse warnings;
1191f110e0Safresh1BEGIN { $| = 1; print "1..70\n"; }
12898184e3Ssthenmy $count = 0;
13898184e3Ssthensub ok ($;$) {
14898184e3Ssthen    my $p = my $r = shift;
15898184e3Ssthen    if (@_) {
16898184e3Ssthen	my $x = shift;
17898184e3Ssthen	$p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
18898184e3Ssthen    }
19898184e3Ssthen    print $p ? "ok" : "not ok", ' ', ++$count, "\n";
20898184e3Ssthen}
21898184e3Ssthen
22898184e3Ssthenuse Unicode::Collate;
23898184e3Ssthen
24898184e3Ssthenok(1);
25898184e3Ssthen
26898184e3Ssthensub _pack_U   { Unicode::Collate::pack_U(@_) }
27898184e3Ssthensub _unpack_U { Unicode::Collate::unpack_U(@_) }
28898184e3Ssthen
29*256a93a4Safresh1#########################
30*256a93a4Safresh1
31898184e3Ssthenmy $A_acute = _pack_U(0xC1);
32898184e3Ssthenmy $a_acute = _pack_U(0xE1);
33898184e3Ssthenmy $acute   = _pack_U(0x0301);
34898184e3Ssthen
35898184e3Ssthenmy $hiragana = "\x{3042}\x{3044}";
36898184e3Ssthenmy $katakana = "\x{30A2}\x{30A4}";
37898184e3Ssthen
38898184e3Ssthenmy $Collator = Unicode::Collate->new(
39898184e3Ssthen  normalization => undef,
40898184e3Ssthen);
41898184e3Ssthen
42898184e3Ssthenok(ref $Collator, "Unicode::Collate");
43898184e3Ssthen
44898184e3Ssthenok($Collator->version,   Unicode::Collate::Base_Unicode_Version);
45898184e3Ssthenok($Collator->version(), Unicode::Collate->Base_Unicode_Version);
46898184e3Ssthenok($Collator->version,          $Collator->Base_Unicode_Version);
47898184e3Ssthenok($Collator->version(),        $Collator->Base_Unicode_Version());
48898184e3Ssthen
4991f110e0Safresh1# 6
5091f110e0Safresh1
51898184e3Ssthenok($Collator->cmp("", ""), 0);
52898184e3Ssthenok($Collator->eq("", ""));
53898184e3Ssthenok($Collator->cmp("", "perl"), -1);
54898184e3Ssthen
55898184e3Ssthenok(
56898184e3Ssthen  join(':', $Collator->sort( qw/ acha aca ada acia acka / ) ),
57898184e3Ssthen  join(':',                  qw/ aca acha acia acka ada / ),
58898184e3Ssthen);
59898184e3Ssthen
60898184e3Ssthenok(
61898184e3Ssthen  join(':', $Collator->sort( qw/ ACHA ACA ADA ACIA ACKA / ) ),
62898184e3Ssthen  join(':',                  qw/ ACA ACHA ACIA ACKA ADA / ),
63898184e3Ssthen);
64898184e3Ssthen
6591f110e0Safresh1# 11
66898184e3Ssthen
67898184e3Ssthenok($Collator->cmp("A$acute", $A_acute), 0); # @version 3.1.1 (prev: -1)
68898184e3Ssthenok($Collator->cmp($a_acute, $A_acute), -1);
69898184e3Ssthenok($Collator->eq("A\cA$acute", $A_acute)); # UCA v9. \cA is invariant.
70898184e3Ssthen
71898184e3Ssthenmy %old_level = $Collator->change(level => 1);
72898184e3Ssthenok($Collator->eq("A$acute", $A_acute));
73898184e3Ssthenok($Collator->eq("A", $A_acute));
74898184e3Ssthen
75898184e3Ssthenok($Collator->change(level => 2)->eq($a_acute, $A_acute));
76898184e3Ssthenok($Collator->lt("A", $A_acute));
77898184e3Ssthen
78898184e3Ssthenok($Collator->change(%old_level)->lt("A", $A_acute));
79898184e3Ssthenok($Collator->lt("A", $A_acute));
80898184e3Ssthenok($Collator->lt("A", $a_acute));
81898184e3Ssthenok($Collator->lt($a_acute, $A_acute));
82898184e3Ssthen
8391f110e0Safresh1# 22
84898184e3Ssthen
85898184e3Ssthen$Collator->change(level => 2);
86898184e3Ssthen
87898184e3Ssthenok($Collator->{level}, 2);
88898184e3Ssthen
89898184e3Ssthenok( $Collator->cmp("ABC","abc"), 0);
90898184e3Ssthenok( $Collator->eq("ABC","abc") );
91898184e3Ssthenok( $Collator->le("ABC","abc") );
92898184e3Ssthenok( $Collator->cmp($hiragana, $katakana), 0);
93898184e3Ssthenok( $Collator->eq($hiragana, $katakana) );
94898184e3Ssthenok( $Collator->ge($hiragana, $katakana) );
95898184e3Ssthen
9691f110e0Safresh1# 29
97898184e3Ssthen
98898184e3Ssthen# hangul
99898184e3Ssthenok( $Collator->eq("a\x{AC00}b", "a\x{1100}\x{1161}b") );
100898184e3Ssthenok( $Collator->eq("a\x{AE00}b", "a\x{1100}\x{1173}\x{11AF}b") );
101898184e3Ssthenok( $Collator->gt("a\x{AE00}b", "a\x{1100}\x{1173}b\x{11AF}") );
102898184e3Ssthenok( $Collator->lt("a\x{AC00}b", "a\x{AE00}b") );
103898184e3Ssthenok( $Collator->gt("a\x{D7A3}b", "a\x{C544}b") );
104898184e3Ssthenok( $Collator->lt("a\x{C544}b", "a\x{30A2}b") ); # hangul < hiragana
105898184e3Ssthen
10691f110e0Safresh1# 35
107898184e3Ssthen
108898184e3Ssthen$Collator->change(%old_level, katakana_before_hiragana => 1);
109898184e3Ssthen
110898184e3Ssthenok($Collator->{level}, 4);
111898184e3Ssthen
112898184e3Ssthenok( $Collator->cmp("abc", "ABC"), -1);
113898184e3Ssthenok( $Collator->ne("abc", "ABC") );
114898184e3Ssthenok( $Collator->lt("abc", "ABC") );
115898184e3Ssthenok( $Collator->le("abc", "ABC") );
116898184e3Ssthenok( $Collator->cmp($hiragana, $katakana), 1);
117898184e3Ssthenok( $Collator->ne($hiragana, $katakana) );
118898184e3Ssthenok( $Collator->gt($hiragana, $katakana) );
119898184e3Ssthenok( $Collator->ge($hiragana, $katakana) );
120898184e3Ssthen
12191f110e0Safresh1# 44
122898184e3Ssthen
123898184e3Ssthen$Collator->change(upper_before_lower => 1);
124898184e3Ssthen
125898184e3Ssthenok( $Collator->cmp("abc", "ABC"), 1);
126898184e3Ssthenok( $Collator->ge("abc", "ABC"), 1);
127898184e3Ssthenok( $Collator->gt("abc", "ABC"), 1);
128898184e3Ssthenok( $Collator->cmp($hiragana, $katakana), 1);
129898184e3Ssthenok( $Collator->ge($hiragana, $katakana), 1);
130898184e3Ssthenok( $Collator->gt($hiragana, $katakana), 1);
131898184e3Ssthen
13291f110e0Safresh1# 50
133898184e3Ssthen
134898184e3Ssthen$Collator->change(katakana_before_hiragana => 0);
135898184e3Ssthen
136898184e3Ssthenok( $Collator->cmp("abc", "ABC"), 1);
137898184e3Ssthenok( $Collator->cmp($hiragana, $katakana), -1);
138898184e3Ssthen
13991f110e0Safresh1# 52
140898184e3Ssthen
141898184e3Ssthen$Collator->change(upper_before_lower => 0);
142898184e3Ssthen
143898184e3Ssthenok( $Collator->cmp("abc", "ABC"), -1);
144898184e3Ssthenok( $Collator->le("abc", "ABC") );
145898184e3Ssthenok( $Collator->cmp($hiragana, $katakana), -1);
146898184e3Ssthenok( $Collator->lt($hiragana, $katakana) );
147898184e3Ssthen
14891f110e0Safresh1# 56
149898184e3Ssthen
150898184e3Ssthen$Collator->change(level => 1);
151898184e3Ssthen
15291f110e0Safresh1my $Tailored = Unicode::Collate->new(
153898184e3Ssthen  normalization => undef,
154898184e3Ssthen  suppress => [0x400..0x4FF],
155898184e3Ssthen  level => 1,
15691f110e0Safresh1  entry => '0000 ; [.FFFE.0020.0005.0000]',
157898184e3Ssthen);
158898184e3Ssthen
159898184e3Ssthen# Ka vs Kje
1605759b3d2Safresh1ok($Collator->eq("\x{45C}", "\x{43A}"));
1615759b3d2Safresh1ok($Collator->eq("\x{40C}", "\x{41A}"));
1625759b3d2Safresh1ok($Tailored->eq("\x{45C}", "\x{43A}"));
1635759b3d2Safresh1ok($Tailored->eq("\x{40C}", "\x{41A}"));
164898184e3Ssthen
16591f110e0Safresh1# 60
16691f110e0Safresh1
16791f110e0Safresh1ok($Collator->eq("abc\0", "abc"));
16891f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{4E00}"));
16991f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{FFFD}"));
17091f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{FFFD}"));
17191f110e0Safresh1
17291f110e0Safresh1# 64
17391f110e0Safresh1
17491f110e0Safresh1$Tailored->change(UCA_Version => 9);
17591f110e0Safresh1
17691f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{4E00}"));
17791f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{FFFD}"));
17891f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{FFFD}"));
17991f110e0Safresh1
18091f110e0Safresh1# 67
18191f110e0Safresh1
18291f110e0Safresh1$Tailored->change(UCA_Version => 8);
18391f110e0Safresh1
18491f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{4E00}"));
18591f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{FFFD}"));
18691f110e0Safresh1ok($Tailored->gt("abc\0", "abc\x{FFFD}"));
18791f110e0Safresh1
18891f110e0Safresh1# 70
189