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..42\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  ignore_level2 => 1,
40  entry => << 'ENTRIES',
411B00  ; [.0000.00FF.0002.1B00] # BALINESE SIGN ULU RICEM
421B01  ; [.0000.0100.0002.1B01] # BALINESE SIGN ULU CANDRA
431B02  ; [.0000.0101.0002.1B02] # BALINESE SIGN CECEK
4403C6  ; [.1900.0020.0002.03C6] # GREEK SMALL LETTER PHI
4503D5  ; [.1900.0020.0004.03D5] # GREEK PHI SYMBOL; QQK
4603A6  ; [.1900.0020.0008.03A6] # GREEK CAPITAL LETTER PHI
47ENTRIES
48);
49
50ok($Collator->eq("camel", "came\x{300}l"));
51ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
52ok($Collator->lt("camel", "Camel"));
53
54# 4
55
56$Collator->change(ignore_level2 => 0);
57
58ok($Collator->lt("camel", "came\x{300}l"));
59ok($Collator->lt("camel", "ca\x{300}me\x{301}l"));
60ok($Collator->lt("camel", "Camel"));
61
62$Collator->change(level => 1);
63
64ok($Collator->eq("camel", "came\x{300}l"));
65ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
66ok($Collator->eq("camel", "Camel"));
67
68$Collator->change(level => 2);
69
70ok($Collator->lt("camel", "came\x{300}l"));
71ok($Collator->lt("camel", "ca\x{300}me\x{301}l"));
72ok($Collator->eq("camel", "Camel"));
73
74# 13
75
76$Collator->change(ignore_level2 => 1);
77
78ok($Collator->eq("camel", "came\x{300}l"));
79ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
80ok($Collator->eq("camel", "Camel"));
81
82$Collator->change(level => 3);
83
84ok($Collator->eq("camel", "came\x{300}l"));
85ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
86ok($Collator->lt("camel", "Camel"));
87
88#  secondary: neither 00FF nor 0100 is zero
89ok($Collator->eq("camel", "came\x{1B00}l"));
90ok($Collator->eq("camel", "came\x{1B01}l"));
91ok($Collator->eq("camel", "came\x{1B02}l"));
92
93#  primary: 1900 isn't zero
94ok($Collator->lt("\x{3C6}", "\x{3D5}"));
95ok($Collator->lt("\x{3D5}", "\x{3A6}"));
96
97# 24
98
99{
100    my $s;
101    my $txt = "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L.";
102
103    $Collator->change(ignore_level2 => 0, level => 1);
104
105    $s = $txt;
106    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
107    ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=.");
108
109    $Collator->change(level => 2);
110
111    $s = $txt;
112    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
113    ok($s, "=Camel= donkey zebra came\x{301}l =CAMEL= horse =cAm\0E\0L=.");
114
115    $Collator->change(level => 3);
116
117    $s = $txt;
118    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
119    ok($s, "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L.");
120
121    $Collator->change(ignore_level2 => 1);
122
123    $s = $txt;
124    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
125    ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse cAm\0E\0L.");
126
127    $Collator->change(level => 2);
128    $s = $txt;
129    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
130    ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=.");
131
132    $Collator->change(level => 1);
133    $s = $txt;
134    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
135    ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=.");
136
137}
138
139# 30
140
141{
142    my $c = Unicode::Collate->new(
143        table => 'keys.txt', normalization => undef, level => 1,
144    );
145    my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
146    $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
147    ok($str, "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cam\0e\0l</b>...");
148}
149
150{
151    my $c = Unicode::Collate->new(
152        table => 'keys.txt', normalization => undef, level => 2,
153    );
154    my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
155    $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
156    ok($str, "<b>Camel</b> donkey zebra came\x{301}l <b>CAMEL</b> horse <b>cam\0e\0l</b>...");
157}
158
159{
160    my $c = Unicode::Collate->new(
161        table => 'keys.txt', normalization => undef, ignore_level2 => 1,
162    );
163    my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
164    $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
165    ok($str, "Camel donkey zebra <b>came\x{301}l</b> CAMEL horse <b>cam\0e\0l</b>...");
166}
167
168{
169    my $c = Unicode::Collate->new(
170        table => 'keys.txt', normalization => undef, level => 3,
171    );
172    my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
173    $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
174    ok($str, "Camel donkey zebra came\x{301}l CAMEL horse <b>cam\0e\0l</b>...");
175}
176
177# 34
178
179{
180    my $str;
181    my $camel = "camel Camel came\x{301}l c-a-m-e-l cam\0e\0l";
182
183    $Collator->change(ignore_level2 => 0);
184
185    $Collator->change(level => 1);
186    $str = $camel;
187    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
188    ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
189
190    $Collator->change(level => 2);
191    $str = $camel;
192    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
193    ok($str, "=camel= =Camel= came\x{301}l =c-a-m-e-l= =cam\0e\0l=");
194
195    $Collator->change(level => 3);
196    $str = $camel;
197    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
198    ok($str, "=camel= Camel came\x{301}l =c-a-m-e-l= =cam\0e\0l=");
199
200    $Collator->change(level => 4);
201    $str = $camel;
202    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
203    ok($str, "=camel= Camel came\x{301}l c-a-m-e-l =cam\0e\0l=");
204
205    $Collator->change(ignore_level2 => 1);
206
207    $Collator->change(level => 1);
208    $str = $camel;
209    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
210    ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
211
212    $Collator->change(level => 2);
213    $str = $camel;
214    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
215    ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
216
217    $Collator->change(level => 3);
218    $str = $camel;
219    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
220    ok($str, "=camel= Camel =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
221
222    $Collator->change(level => 4);
223    $str = $camel;
224    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
225    ok($str, "=camel= Camel =came\x{301}l= c-a-m-e-l =cam\0e\0l=");
226}
227
228# 42
229
230