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..87\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 $objDsb = Unicode::Collate::Locale->
37    new(locale => 'DSB', normalization => undef);
38
39ok($objDsb->getlocale, 'dsb');
40
41$objDsb->change(level => 1);
42
43my @prim = (
44    "cz", "c\x{30C}", "c\x{301}", "d", # 5
45    "ez", "e\x{30C}", "f",             # 8
46    "hz", "ch", "i",                   # 11
47    "kz", "l\x{335}", "l",             # 14
48    "nz", "n\x{301}", "o",             # 17
49    "rz", "r\x{301}", "s",             # 20
50    "sz", "s\x{30C}", "s\x{301}", "t", # 24
51    "zz", "z\x{30C}", "z\x{301}", "\x{292}" # EZH
52);
53
54for (my $i = 1; $i < @prim; $i++) {
55    ok($objDsb->lt($prim[$i-1], $prim[$i]));
56}
57
58# 28
59
60$objDsb->change(level => 2);
61
62ok($objDsb->eq("c\x{30C}", "C\x{30C}"));
63ok($objDsb->eq("c\x{301}", "C\x{301}"));
64ok($objDsb->eq("e\x{30C}", "E\x{30C}"));
65ok($objDsb->eq("l\x{335}", "L\x{335}"));
66ok($objDsb->eq("n\x{301}", "N\x{301}"));
67ok($objDsb->eq("r\x{301}", "R\x{301}"));
68ok($objDsb->eq("s\x{30C}", "S\x{30C}"));
69ok($objDsb->eq("s\x{301}", "S\x{301}"));
70ok($objDsb->eq("z\x{30C}", "Z\x{30C}"));
71ok($objDsb->eq("z\x{301}", "Z\x{301}"));
72
73ok($objDsb->eq("ch", "cH"));
74ok($objDsb->eq("cH", "Ch"));
75ok($objDsb->eq("Ch", "CH"));
76
77# 41
78
79$objDsb->change(level => 3);
80
81ok($objDsb->lt("c\x{30C}", "C\x{30C}"));
82ok($objDsb->lt("c\x{301}", "C\x{301}"));
83ok($objDsb->lt("e\x{30C}", "E\x{30C}"));
84ok($objDsb->lt("l\x{335}", "L\x{335}"));
85ok($objDsb->lt("n\x{301}", "N\x{301}"));
86ok($objDsb->lt("r\x{301}", "R\x{301}"));
87ok($objDsb->lt("s\x{30C}", "S\x{30C}"));
88ok($objDsb->lt("s\x{301}", "S\x{301}"));
89ok($objDsb->lt("z\x{30C}", "Z\x{30C}"));
90ok($objDsb->lt("z\x{301}", "Z\x{301}"));
91
92ok($objDsb->lt("ch", "cH"));
93ok($objDsb->lt("cH", "Ch"));
94ok($objDsb->lt("Ch", "CH"));
95
96# 54
97
98ok($objDsb->eq("c\x{30C}", "\x{10D}"));
99ok($objDsb->eq("C\x{30C}", "\x{10C}"));
100ok($objDsb->eq("c\x{301}", "\x{107}"));
101ok($objDsb->eq("c\x{341}", "\x{107}"));
102ok($objDsb->eq("C\x{301}", "\x{106}"));
103ok($objDsb->eq("C\x{341}", "\x{106}"));
104ok($objDsb->eq("e\x{30C}", "\x{11B}"));
105ok($objDsb->eq("E\x{30C}", "\x{11A}"));
106ok($objDsb->eq("l\x{335}", "\x{142}"));
107ok($objDsb->eq("L\x{335}", "\x{141}"));
108ok($objDsb->eq("n\x{301}", "\x{144}"));
109ok($objDsb->eq("n\x{341}", "\x{144}"));
110ok($objDsb->eq("N\x{301}", "\x{143}"));
111ok($objDsb->eq("N\x{341}", "\x{143}"));
112ok($objDsb->eq("r\x{301}", "\x{155}"));
113ok($objDsb->eq("r\x{341}", "\x{155}"));
114ok($objDsb->eq("R\x{301}", "\x{154}"));
115ok($objDsb->eq("R\x{341}", "\x{154}"));
116ok($objDsb->eq("s\x{30C}", "\x{161}"));
117ok($objDsb->eq("S\x{30C}", "\x{160}"));
118ok($objDsb->eq("s\x{301}", "\x{15B}"));
119ok($objDsb->eq("s\x{341}", "\x{15B}"));
120ok($objDsb->eq("S\x{301}", "\x{15A}"));
121ok($objDsb->eq("S\x{341}", "\x{15A}"));
122ok($objDsb->eq("z\x{30C}", "\x{17E}"));
123ok($objDsb->eq("Z\x{30C}", "\x{17D}"));
124ok($objDsb->eq("z\x{301}", "\x{17A}"));
125ok($objDsb->eq("z\x{341}", "\x{17A}"));
126ok($objDsb->eq("Z\x{301}", "\x{179}"));
127ok($objDsb->eq("Z\x{341}", "\x{179}"));
128
129# 84
130
131$objDsb->change(upper_before_lower => 1);
132
133ok($objDsb->gt("ch", "cH"));
134ok($objDsb->gt("cH", "Ch"));
135ok($objDsb->gt("Ch", "CH"));
136
137# 87
138