xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t (revision 50b7afb2c2c0993b0894d4e34bf857cb13ed9c80)
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
162