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..110\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 $eth  = pack 'U', 0xF0;
37my $ETH  = pack 'U', 0xD0;
38my $thrn = pack 'U', 0xFE;
39my $THRN = pack 'U', 0xDE;
40my $ae   = pack 'U', 0xE6;
41my $AE   = pack 'U', 0xC6;
42my $auml = pack 'U', 0xE4;
43my $Auml = pack 'U', 0xC4;
44my $ouml = pack 'U', 0xF6;
45my $Ouml = pack 'U', 0xD6;
46my $ostk = pack 'U', 0xF8;
47my $Ostk = pack 'U', 0xD8;
48my $arng = pack 'U', 0xE5;
49my $Arng = pack 'U', 0xC5;
50
51my $objIs = Unicode::Collate::Locale->
52    new(locale => 'IS', normalization => undef);
53
54ok($objIs->getlocale, 'is');
55
56$objIs->change(level => 1);
57
58ok($objIs->lt('a', "a\x{301}"));
59ok($objIs->gt('b', "a\x{301}"));
60ok($objIs->lt('d', $eth));
61ok($objIs->gt('e', $eth));
62ok($objIs->lt('e', "e\x{301}"));
63ok($objIs->gt('f', "e\x{301}"));
64ok($objIs->lt('i', "i\x{301}"));
65ok($objIs->gt('j', "i\x{301}"));
66ok($objIs->lt('o', "o\x{301}"));
67ok($objIs->gt('p', "o\x{301}"));
68ok($objIs->lt('u', "u\x{301}"));
69ok($objIs->gt('v', "u\x{301}"));
70ok($objIs->lt('y', "y\x{301}"));
71ok($objIs->gt('z', "y\x{301}"));
72
73# 16
74
75ok($objIs->lt('z', $thrn));
76ok($objIs->lt($thrn, $ae));
77ok($objIs->lt($ae, $ouml));
78ok($objIs->lt($ouml, $arng));
79ok($objIs->lt($arng, "\x{1C0}"));
80
81# 21
82
83ok($objIs->eq('d', "d\x{335}"));
84ok($objIs->eq($ae, $auml));
85ok($objIs->eq($ouml, $ostk));
86
87$objIs->change(level => 2);
88
89ok($objIs->lt('d', "d\x{335}"));
90ok($objIs->lt($ae, $auml));
91ok($objIs->lt($ouml, $ostk));
92
93# 27
94
95ok($objIs->eq("a\x{301}", "A\x{301}"));
96ok($objIs->eq("d\x{335}", "D\x{335}"));
97ok($objIs->eq($eth, $ETH));
98ok($objIs->eq("e\x{301}", "E\x{301}"));
99ok($objIs->eq("i\x{301}", "I\x{301}"));
100ok($objIs->eq("o\x{301}", "O\x{301}"));
101ok($objIs->eq("u\x{301}", "U\x{301}"));
102ok($objIs->eq("y\x{301}", "Y\x{301}"));
103ok($objIs->eq($thrn, $THRN));
104ok($objIs->eq($ae,   $AE));
105ok($objIs->eq($AE, "\x{1D2D}"));
106ok($objIs->eq($auml, $Auml));
107ok($objIs->eq($ouml, $Ouml));
108ok($objIs->eq($ostk, $Ostk));
109ok($objIs->eq($arng, $Arng));
110
111# 42
112
113$objIs->change(level => 3);
114
115ok($objIs->lt("a\x{301}", "A\x{301}"));
116ok($objIs->lt("d\x{335}", "D\x{335}"));
117ok($objIs->lt($eth, $ETH));
118ok($objIs->lt("e\x{301}", "E\x{301}"));
119ok($objIs->lt("i\x{301}", "I\x{301}"));
120ok($objIs->lt("o\x{301}", "O\x{301}"));
121ok($objIs->lt("u\x{301}", "U\x{301}"));
122ok($objIs->lt("y\x{301}", "Y\x{301}"));
123ok($objIs->lt($thrn, $THRN));
124ok($objIs->lt($ae,   $AE));
125ok($objIs->lt($AE, "\x{1D2D}"));
126ok($objIs->lt($auml, $Auml));
127ok($objIs->lt($ouml, $Ouml));
128ok($objIs->lt($ostk, $Ostk));
129ok($objIs->lt($arng, $Arng));
130
131# 57
132
133ok($objIs->eq("a\x{301}", pack('U', 0xE1)));
134ok($objIs->eq("a\x{341}", pack('U', 0xE1)));
135ok($objIs->eq("A\x{301}", pack('U', 0xC1)));
136ok($objIs->eq("A\x{341}", pack('U', 0xC1)));
137ok($objIs->eq("d\x{335}", "\x{111}"));
138ok($objIs->eq("D\x{335}", "\x{110}"));
139ok($objIs->eq("e\x{301}", pack('U', 0xE9)));
140ok($objIs->eq("e\x{341}", pack('U', 0xE9)));
141ok($objIs->eq("E\x{301}", pack('U', 0xC9)));
142ok($objIs->eq("E\x{341}", pack('U', 0xC9)));
143ok($objIs->eq("i\x{301}", pack('U', 0xED)));
144ok($objIs->eq("i\x{341}", pack('U', 0xED)));
145ok($objIs->eq("I\x{301}", pack('U', 0xCD)));
146ok($objIs->eq("I\x{341}", pack('U', 0xCD)));
147ok($objIs->eq("o\x{301}", pack('U', 0xF3)));
148ok($objIs->eq("o\x{341}", pack('U', 0xF3)));
149ok($objIs->eq("O\x{301}", pack('U', 0xD3)));
150ok($objIs->eq("O\x{341}", pack('U', 0xD3)));
151ok($objIs->eq("u\x{301}", pack('U', 0xFA)));
152ok($objIs->eq("u\x{341}", pack('U', 0xFA)));
153ok($objIs->eq("U\x{301}", pack('U', 0xDA)));
154ok($objIs->eq("U\x{341}", pack('U', 0xDA)));
155ok($objIs->eq("y\x{301}", pack('U', 0xFD)));
156ok($objIs->eq("y\x{341}", pack('U', 0xFD)));
157ok($objIs->eq("Y\x{301}", pack('U', 0xDD)));
158ok($objIs->eq("Y\x{341}", pack('U', 0xDD)));
159ok($objIs->eq("a\x{308}", $auml));
160ok($objIs->eq("A\x{308}", $Auml));
161ok($objIs->eq("o\x{308}", $ouml));
162ok($objIs->eq("O\x{308}", $Ouml));
163ok($objIs->eq("o\x{338}", $ostk));
164ok($objIs->eq("O\x{338}", $Ostk));
165ok($objIs->eq("a\x{30A}", $arng));
166ok($objIs->eq("A\x{30A}", $Arng));
167
168# 91
169
170ok($objIs->eq("\x{1FD}", "$ae\x{301}"));
171ok($objIs->eq("\x{1FC}", "$AE\x{301}"));
172ok($objIs->eq("\x{1E3}", "$ae\x{304}"));
173ok($objIs->eq("\x{1E2}", "$AE\x{304}"));
174ok($objIs->eq("a\x{308}\x{304}", "\x{1DF}"));
175ok($objIs->eq("A\x{308}\x{304}", "\x{1DE}"));
176ok($objIs->eq("o\x{308}\x{304}", "\x{22B}"));
177ok($objIs->eq("O\x{308}\x{304}", "\x{22A}"));
178ok($objIs->eq("o\x{338}\x{301}", "\x{1FF}"));
179ok($objIs->eq("O\x{338}\x{301}", "\x{1FE}"));
180ok($objIs->eq("A\x{30A}", "\x{212B}"));
181ok($objIs->eq("a\x{30A}\x{301}", "\x{1FB}"));
182ok($objIs->eq("A\x{30A}\x{301}", "\x{1FA}"));
183
184# 104
185
186$objIs->change(upper_before_lower => 1);
187
188ok($objIs->gt($ae,   $AE));
189ok($objIs->lt($AE, "\x{1D2D}"));
190ok($objIs->gt($auml, $Auml));
191ok($objIs->gt($ouml, $Ouml));
192ok($objIs->gt($ostk, $Ostk));
193ok($objIs->gt($arng, $Arng));
194
195# 110
196