xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
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..45\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{100000}"),
111    '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]');
112
113eval { require Unicode::Normalize };
114if (!$@) {
115    $Collator->change(normalization => "NFD");
116
117    ok($Collator->viewSortKey("\x{304C}"),
118    '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]');
119} else {
120    ok(1);
121}
122
123$Collator->change(normalization => undef);
124
125##### 38
126
127$Collator->change(level => 3);
128
129ok($Collator->viewSortKey("\x{304C}"),
130    '[1926 | 0020 013D | 000E 0002 | | 0000 304C]');
131
132$Collator->change(level => 2);
133
134ok($Collator->viewSortKey("\x{304C}"),
135    '[1926 | 0020 013D | | | 0000 304C]');
136
137$Collator->change(level => 1);
138
139ok($Collator->viewSortKey("\x{304C}"),
140    '[1926 | | | | 0000 304C]');
141
142##### 41
143
144$Collator->change(UCA_Version => 8);
145
146ok($Collator->viewSortKey("\x{304C}"),
147    '[1926||||0000 304C]');
148
149$Collator->change(level => 2);
150
151ok($Collator->viewSortKey("\x{304C}"),
152    '[1926|0020 013D|||0000 304C]');
153
154$Collator->change(level => 3);
155
156ok($Collator->viewSortKey("\x{304C}"),
157    '[1926|0020 013D|000E 0002||0000 304C]');
158
159$Collator->change(level => 4);
160
161ok($Collator->viewSortKey("\x{304C}"),
162    '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]');
163
164##### 45
165