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..217\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::Locale;
31
32ok(1);
33
34#########################
35
36my $objSe = Unicode::Collate::Locale->
37    new(locale => 'SE', normalization => undef);
38
39my $eth  = pack 'U', 0xF0;
40my $ETH  = pack 'U', 0xD0;
41my $thrn = pack 'U', 0xFE;
42my $THRN = pack 'U', 0xDE;
43my $ae   = pack 'U', 0xE6;
44my $AE   = pack 'U', 0xC6;
45
46ok($objSe->getlocale, 'se');
47
48$objSe->change(level => 1);
49
50ok($objSe->lt("a", "a\x{301}"));
51ok($objSe->gt("b", "a\x{301}"));
52ok($objSe->lt("c", "c\x{30C}"));
53ok($objSe->lt("c\x{30C}", "\x{292}"));
54ok($objSe->lt( "\x{292}", "\x{1EF}"));
55ok($objSe->gt("d", "\x{1EF}"));
56ok($objSe->lt("d", "d\x{335}"));
57ok($objSe->gt("e", "d\x{335}"));
58ok($objSe->lt("g", "g\x{30C}"));
59ok($objSe->lt("g\x{30C}", "\x{1E5}"));
60ok($objSe->gt("h", "\x{1E5}"));
61ok($objSe->lt("k", "k\x{30C}"));
62ok($objSe->gt("l", "k\x{30C}"));
63ok($objSe->lt("n", "\x{14B}"));
64ok($objSe->gt("o", "\x{14B}"));
65ok($objSe->lt("s", "s\x{30C}"));
66ok($objSe->gt("t", "s\x{30C}"));
67ok($objSe->lt("t",  "\x{167}"));
68ok($objSe->gt("u",  "\x{167}"));
69ok($objSe->lt("z", "z\x{30C}"));
70ok($objSe->lt("z\x{30C}", "o\x{338}"));
71ok($objSe->lt("o\x{338}", $ae));
72ok($objSe->lt($ae, "a\x{30A}"));
73ok($objSe->lt("a\x{30A}", "a\x{308}"));
74ok($objSe->lt("a\x{308}", "o\x{308}"));
75ok($objSe->lt("o\x{308}", "\x{1C0}"));
76
77# 28
78
79ok($objSe->eq("d\x{335}", $eth));
80ok($objSe->eq( "\x{14B}", "n\x{301}"));
81ok($objSe->eq("n\x{301}", "n\x{303}"));
82ok($objSe->eq( "\x{167}", $thrn));
83ok($objSe->eq("y", "u\x{308}"));
84ok($objSe->eq("u\x{308}", "u\x{30B}"));
85ok($objSe->eq("o\x{338}",  "\x{153}"));
86ok($objSe->eq("a\x{30A}", "a\x{307}"));
87ok($objSe->eq("a\x{308}", "a\x{303}"));
88ok($objSe->eq("o\x{308}", "o\x{30B}"));
89ok($objSe->eq("o\x{30B}", "o\x{303}"));
90ok($objSe->eq("o\x{303}", "o\x{302}"));
91ok($objSe->eq("o\x{302}", "o\x{328}"));
92
93# 41
94
95$objSe->change(level => 2);
96
97ok($objSe->lt("d\x{335}", $eth));
98ok($objSe->lt( "\x{14B}", "n\x{301}"));
99ok($objSe->lt("n\x{301}", "n\x{303}"));
100ok($objSe->lt( "\x{167}", $thrn));
101ok($objSe->lt("y", "u\x{308}"));
102ok($objSe->lt("u\x{308}", "u\x{30B}"));
103ok($objSe->lt("o\x{338}",  "\x{153}"));
104ok($objSe->lt("a\x{30A}", "a\x{307}"));
105ok($objSe->lt("a\x{308}", "a\x{303}"));
106ok($objSe->lt("o\x{308}", "o\x{30B}"));
107ok($objSe->lt("o\x{30B}", "o\x{303}"));
108ok($objSe->lt("o\x{303}", "o\x{302}"));
109ok($objSe->lt("o\x{302}", "o\x{328}"));
110
111# 54
112
113ok($objSe->eq("a\x{301}", "A\x{301}"));
114ok($objSe->eq("c\x{30C}", "C\x{30C}"));
115ok($objSe->eq( "\x{292}",  "\x{1B7}"));
116ok($objSe->eq( "\x{1EF}",  "\x{1EE}"));
117ok($objSe->eq("d\x{335}", "D\x{335}"));
118ok($objSe->eq($eth, $ETH));
119ok($objSe->eq("g\x{30C}", "G\x{30C}"));
120ok($objSe->eq( "\x{1E5}",  "\x{1E4}"));
121ok($objSe->eq("k\x{30C}", "K\x{30C}"));
122ok($objSe->eq( "\x{14B}",  "\x{14A}"));
123ok($objSe->eq("n\x{301}", "N\x{301}"));
124ok($objSe->eq("n\x{303}", "N\x{303}"));
125ok($objSe->eq("s\x{30C}", "S\x{30C}"));
126ok($objSe->eq( "\x{167}",  "\x{166}"));
127ok($objSe->eq($thrn, $THRN));
128ok($objSe->eq("u\x{308}", "U\x{308}"));
129ok($objSe->eq("u\x{30B}", "U\x{30B}"));
130ok($objSe->eq("z\x{30C}", "Z\x{30C}"));
131ok($objSe->eq("o\x{338}", "O\x{338}"));
132ok($objSe->eq( "\x{153}",  "\x{152}"));
133ok($objSe->eq($ae, $AE));
134ok($objSe->eq($AE, "\x{1D2D}"));
135ok($objSe->eq("a\x{30A}", "A\x{30A}"));
136ok($objSe->eq("a\x{307}", "A\x{307}"));
137ok($objSe->eq("a\x{308}", "A\x{308}"));
138ok($objSe->eq("a\x{303}", "A\x{303}"));
139ok($objSe->eq("o\x{308}", "O\x{308}"));
140ok($objSe->eq("o\x{30B}", "O\x{30B}"));
141ok($objSe->eq("o\x{303}", "O\x{303}"));
142ok($objSe->eq("o\x{302}", "O\x{302}"));
143ok($objSe->eq("o\x{328}", "O\x{328}"));
144
145# 85
146
147$objSe->change(level => 3);
148
149ok($objSe->lt("a\x{301}", "A\x{301}"));
150ok($objSe->lt("c\x{30C}", "C\x{30C}"));
151ok($objSe->lt( "\x{292}",  "\x{1B7}"));
152ok($objSe->lt( "\x{1EF}",  "\x{1EE}"));
153ok($objSe->lt("d\x{335}", "D\x{335}"));
154ok($objSe->lt($eth, $ETH));
155ok($objSe->lt("g\x{30C}", "G\x{30C}"));
156ok($objSe->lt( "\x{1E5}",  "\x{1E4}"));
157ok($objSe->lt("k\x{30C}", "K\x{30C}"));
158ok($objSe->lt( "\x{14B}",  "\x{14A}"));
159ok($objSe->lt("n\x{301}", "N\x{301}"));
160ok($objSe->lt("n\x{303}", "N\x{303}"));
161ok($objSe->lt("s\x{30C}", "S\x{30C}"));
162ok($objSe->lt( "\x{167}",  "\x{166}"));
163ok($objSe->lt($thrn, $THRN));
164ok($objSe->lt("u\x{308}", "U\x{308}"));
165ok($objSe->lt("u\x{30B}", "U\x{30B}"));
166ok($objSe->lt("z\x{30C}", "Z\x{30C}"));
167ok($objSe->lt("o\x{338}", "O\x{338}"));
168ok($objSe->lt( "\x{153}",  "\x{152}"));
169ok($objSe->lt($ae, $AE));
170ok($objSe->lt($AE, "\x{1D2D}"));
171ok($objSe->lt("a\x{30A}", "A\x{30A}"));
172ok($objSe->lt("a\x{307}", "A\x{307}"));
173ok($objSe->lt("a\x{308}", "A\x{308}"));
174ok($objSe->lt("a\x{303}", "A\x{303}"));
175ok($objSe->lt("o\x{308}", "O\x{308}"));
176ok($objSe->lt("o\x{30B}", "O\x{30B}"));
177ok($objSe->lt("o\x{303}", "O\x{303}"));
178ok($objSe->lt("o\x{302}", "O\x{302}"));
179ok($objSe->lt("o\x{328}", "O\x{328}"));
180
181# 116
182
183ok($objSe->eq("a\x{301}", pack('U', 0xE1)));
184ok($objSe->eq("a\x{341}", pack('U', 0xE1)));
185ok($objSe->eq("A\x{301}", pack('U', 0xC1)));
186ok($objSe->eq("A\x{341}", pack('U', 0xC1)));
187ok($objSe->eq("c\x{30C}", "\x{10D}"));
188ok($objSe->eq("C\x{30C}", "\x{10C}"));
189ok($objSe->eq("\x{1EF}", "\x{292}\x{30C}"));
190ok($objSe->eq("\x{1EE}", "\x{1B7}\x{30C}"));
191ok($objSe->eq("d\x{335}", "\x{111}"));
192ok($objSe->eq("D\x{335}", "\x{110}"));
193ok($objSe->eq("g\x{30C}", "\x{1E7}"));
194ok($objSe->eq("G\x{30C}", "\x{1E6}"));
195ok($objSe->eq("k\x{30C}", "\x{1E9}"));
196ok($objSe->eq("K\x{30C}", "\x{1E8}"));
197ok($objSe->eq("n\x{301}", "\x{144}"));
198ok($objSe->eq("n\x{341}", "\x{144}"));
199ok($objSe->eq("N\x{301}", "\x{143}"));
200ok($objSe->eq("N\x{341}", "\x{143}"));
201ok($objSe->eq("n\x{303}", pack('U', 0xF1)));
202ok($objSe->eq("N\x{303}", pack('U', 0xD1)));
203ok($objSe->eq("s\x{30C}", "\x{161}"));
204ok($objSe->eq("S\x{30C}", "\x{160}"));
205ok($objSe->eq("u\x{308}", pack('U', 0xFC)));
206ok($objSe->eq("U\x{308}", pack('U', 0xDC)));
207ok($objSe->eq("u\x{30B}", "\x{171}"));
208ok($objSe->eq("U\x{30B}", "\x{170}"));
209
210# 142
211
212ok($objSe->eq("z\x{30C}", "\x{17E}"));
213ok($objSe->eq("Z\x{30C}", "\x{17D}"));
214ok($objSe->eq("o\x{338}", pack('U', 0xF8)));
215ok($objSe->eq("O\x{338}", pack('U', 0xD8)));
216ok($objSe->eq("a\x{30A}", pack('U', 0xE5)));
217ok($objSe->eq("A\x{30A}", pack('U', 0xC5)));
218ok($objSe->eq("a\x{307}", "\x{227}"));
219ok($objSe->eq("A\x{307}", "\x{226}"));
220ok($objSe->eq("a\x{308}", pack('U', 0xE4)));
221ok($objSe->eq("A\x{308}", pack('U', 0xC4)));
222ok($objSe->eq("a\x{303}", pack('U', 0xE3)));
223ok($objSe->eq("A\x{303}", pack('U', 0xC3)));
224ok($objSe->eq("o\x{308}", pack('U', 0xF6)));
225ok($objSe->eq("O\x{308}", pack('U', 0xD6)));
226ok($objSe->eq("o\x{30B}", "\x{151}"));
227ok($objSe->eq("O\x{30B}", "\x{150}"));
228ok($objSe->eq("o\x{303}", pack('U', 0xF5)));
229ok($objSe->eq("O\x{303}", pack('U', 0xD5)));
230ok($objSe->eq("o\x{302}", pack('U', 0xF4)));
231ok($objSe->eq("O\x{302}", pack('U', 0xD4)));
232ok($objSe->eq("o\x{328}", "\x{1EB}"));
233ok($objSe->eq("O\x{328}", "\x{1EA}"));
234
235# 164
236
237ok($objSe->eq("u\x{308}\x{300}", "\x{1DC}"));
238ok($objSe->eq("U\x{308}\x{300}", "\x{1DB}"));
239ok($objSe->eq("u\x{308}\x{301}", "\x{1D8}"));
240ok($objSe->eq("U\x{308}\x{301}", "\x{1D7}"));
241ok($objSe->eq("u\x{308}\x{304}", "\x{1D6}"));
242ok($objSe->eq("U\x{308}\x{304}", "\x{1D5}"));
243ok($objSe->eq("u\x{308}\x{30C}", "\x{1DA}"));
244ok($objSe->eq("U\x{308}\x{30C}", "\x{1D9}"));
245ok($objSe->eq("o\x{338}\x{301}", "\x{1FF}"));
246ok($objSe->eq("O\x{338}\x{301}", "\x{1FE}"));
247
248ok($objSe->eq("\x{1FD}", "$ae\x{301}"));
249ok($objSe->eq("\x{1FC}", "$AE\x{301}"));
250ok($objSe->eq("\x{1E3}", "$ae\x{304}"));
251ok($objSe->eq("\x{1E2}", "$AE\x{304}"));
252ok($objSe->eq("A\x{30A}", "\x{212B}"));
253ok($objSe->eq("a\x{30A}\x{301}", "\x{1FB}"));
254ok($objSe->eq("A\x{30A}\x{301}", "\x{1FA}"));
255ok($objSe->eq("a\x{308}\x{304}", "\x{1DF}"));
256ok($objSe->eq("A\x{308}\x{304}", "\x{1DE}"));
257
258ok($objSe->eq("o\x{308}\x{304}", "\x{22B}"));
259ok($objSe->eq("O\x{308}\x{304}", "\x{22A}"));
260ok($objSe->eq("o\x{303}\x{301}","\x{1E4D}"));
261ok($objSe->eq("O\x{303}\x{301}","\x{1E4C}"));
262ok($objSe->eq("o\x{303}\x{304}", "\x{22D}"));
263ok($objSe->eq("O\x{303}\x{304}", "\x{22C}"));
264ok($objSe->eq("o\x{303}\x{308}","\x{1E4F}"));
265ok($objSe->eq("O\x{303}\x{308}","\x{1E4E}"));
266ok($objSe->eq("o\x{303}\x{31B}","\x{1EE1}"));
267ok($objSe->eq("O\x{303}\x{31B}","\x{1EE0}"));
268
269ok($objSe->eq("o\x{302}\x{300}", "\x{1ED3}"));
270ok($objSe->eq("O\x{302}\x{300}", "\x{1ED2}"));
271ok($objSe->eq("o\x{302}\x{301}", "\x{1ED1}"));
272ok($objSe->eq("O\x{302}\x{301}", "\x{1ED0}"));
273ok($objSe->eq("o\x{302}\x{303}", "\x{1ED7}"));
274ok($objSe->eq("O\x{302}\x{303}", "\x{1ED6}"));
275ok($objSe->eq("o\x{302}\x{309}", "\x{1ED5}"));
276ok($objSe->eq("O\x{302}\x{309}", "\x{1ED4}"));
277ok($objSe->eq("o\x{302}\x{323}", "\x{1ED9}"));
278ok($objSe->eq("O\x{302}\x{323}", "\x{1ED8}"));
279
280# 203
281
282$objSe->change(upper_before_lower => 1);
283
284ok($objSe->gt("z\x{30C}", "Z\x{30C}"));
285ok($objSe->gt("o\x{338}", "O\x{338}"));
286ok($objSe->gt( "\x{153}",  "\x{152}"));
287ok($objSe->gt($ae, $AE));
288ok($objSe->lt($AE, "\x{1D2D}"));
289ok($objSe->gt("a\x{30A}", "A\x{30A}"));
290ok($objSe->gt("a\x{307}", "A\x{307}"));
291ok($objSe->gt("a\x{308}", "A\x{308}"));
292ok($objSe->gt("a\x{303}", "A\x{303}"));
293ok($objSe->gt("o\x{308}", "O\x{308}"));
294ok($objSe->gt("o\x{30B}", "O\x{30B}"));
295ok($objSe->gt("o\x{303}", "O\x{303}"));
296ok($objSe->gt("o\x{302}", "O\x{302}"));
297ok($objSe->gt("o\x{328}", "O\x{328}"));
298
299# 217
300