1
2BEGIN {
3    if ($ENV{PERL_CORE}) {
4	chdir('t') if -d 't';
5	@INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
6    }
7}
8
9use strict;
10use warnings;
11BEGIN { $| = 1; print "1..42\n"; }
12my $count = 0;
13sub ok ($;$) {
14    my $p = my $r = shift;
15    if (@_) {
16	my $x = shift;
17	$p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
18    }
19    print $p ? "ok" : "not ok", ' ', ++$count, "\n";
20}
21
22use Unicode::Collate;
23
24ok(1);
25
26sub _pack_U   { Unicode::Collate::pack_U(@_) }
27sub _unpack_U { Unicode::Collate::unpack_U(@_) }
28
29#########################
30
31my $Collator = Unicode::Collate->new(
32  table => 'keys.txt',
33  normalization => undef,
34  ignore_level2 => 1,
35  entry => << 'ENTRIES',
361B00  ; [.0000.00FF.0002.1B00] # BALINESE SIGN ULU RICEM
371B01  ; [.0000.0100.0002.1B01] # BALINESE SIGN ULU CANDRA
381B02  ; [.0000.0101.0002.1B02] # BALINESE SIGN CECEK
3903C6  ; [.1900.0020.0002.03C6] # GREEK SMALL LETTER PHI
4003D5  ; [.1900.0020.0004.03D5] # GREEK PHI SYMBOL; QQK
4103A6  ; [.1900.0020.0008.03A6] # GREEK CAPITAL LETTER PHI
42ENTRIES
43);
44
45ok($Collator->eq("camel", "came\x{300}l"));
46ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
47ok($Collator->lt("camel", "Camel"));
48
49# 4
50
51$Collator->change(ignore_level2 => 0);
52
53ok($Collator->lt("camel", "came\x{300}l"));
54ok($Collator->lt("camel", "ca\x{300}me\x{301}l"));
55ok($Collator->lt("camel", "Camel"));
56
57$Collator->change(level => 1);
58
59ok($Collator->eq("camel", "came\x{300}l"));
60ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
61ok($Collator->eq("camel", "Camel"));
62
63$Collator->change(level => 2);
64
65ok($Collator->lt("camel", "came\x{300}l"));
66ok($Collator->lt("camel", "ca\x{300}me\x{301}l"));
67ok($Collator->eq("camel", "Camel"));
68
69# 13
70
71$Collator->change(ignore_level2 => 1);
72
73ok($Collator->eq("camel", "came\x{300}l"));
74ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
75ok($Collator->eq("camel", "Camel"));
76
77$Collator->change(level => 3);
78
79ok($Collator->eq("camel", "came\x{300}l"));
80ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
81ok($Collator->lt("camel", "Camel"));
82
83#  secondary: neither 00FF nor 0100 is zero
84ok($Collator->eq("camel", "came\x{1B00}l"));
85ok($Collator->eq("camel", "came\x{1B01}l"));
86ok($Collator->eq("camel", "came\x{1B02}l"));
87
88#  primary: 1900 isn't zero
89ok($Collator->lt("\x{3C6}", "\x{3D5}"));
90ok($Collator->lt("\x{3D5}", "\x{3A6}"));
91
92# 24
93
94{
95    my $s;
96    my $txt = "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L.";
97
98    $Collator->change(ignore_level2 => 0, level => 1);
99
100    $s = $txt;
101    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
102    ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=.");
103
104    $Collator->change(level => 2);
105
106    $s = $txt;
107    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
108    ok($s, "=Camel= donkey zebra came\x{301}l =CAMEL= horse =cAm\0E\0L=.");
109
110    $Collator->change(level => 3);
111
112    $s = $txt;
113    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
114    ok($s, "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L.");
115
116    $Collator->change(ignore_level2 => 1);
117
118    $s = $txt;
119    $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
120    ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse cAm\0E\0L.");
121
122    $Collator->change(level => 2);
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 => 1);
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}
133
134# 30
135
136{
137    my $c = Unicode::Collate->new(
138        table => 'keys.txt', normalization => undef, level => 1,
139    );
140    my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
141    $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
142    ok($str, "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cam\0e\0l</b>...");
143}
144
145{
146    my $c = Unicode::Collate->new(
147        table => 'keys.txt', normalization => undef, level => 2,
148    );
149    my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
150    $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
151    ok($str, "<b>Camel</b> donkey zebra came\x{301}l <b>CAMEL</b> horse <b>cam\0e\0l</b>...");
152}
153
154{
155    my $c = Unicode::Collate->new(
156        table => 'keys.txt', normalization => undef, ignore_level2 => 1,
157    );
158    my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
159    $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
160    ok($str, "Camel donkey zebra <b>came\x{301}l</b> CAMEL horse <b>cam\0e\0l</b>...");
161}
162
163{
164    my $c = Unicode::Collate->new(
165        table => 'keys.txt', normalization => undef, level => 3,
166    );
167    my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
168    $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
169    ok($str, "Camel donkey zebra came\x{301}l CAMEL horse <b>cam\0e\0l</b>...");
170}
171
172# 34
173
174{
175    my $str;
176    my $camel = "camel Camel came\x{301}l c-a-m-e-l cam\0e\0l";
177
178    $Collator->change(ignore_level2 => 0);
179
180    $Collator->change(level => 1);
181    $str = $camel;
182    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
183    ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
184
185    $Collator->change(level => 2);
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 => 3);
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 => 4);
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(ignore_level2 => 1);
201
202    $Collator->change(level => 1);
203    $str = $camel;
204    $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
205    ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
206
207    $Collator->change(level => 2);
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 => 3);
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 => 4);
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
223# 42
224
225