3 unless ("A" eq pack('U', 0x41)) {
4 print "1..0 # Unicode::Collate " .
5 "cannot stringify a Unicode code point\n";
10 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
16 BEGIN { $| = 1; print "1..45\n"; }
19 my $p = my $r = shift;
22 $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
24 print $p ? "ok" : "not ok", ' ', ++$count, "\n";
31 #########################
33 my $Collator = Unicode::Collate->new(
35 normalization => undef,
38 # [001F] UNIT SEPARATOR
40 ok($Collator->eq("\0", "\x1F"));
41 ok($Collator->eq("\x1F", "\x{200B}"));
42 ok($Collator->eq("\0", "\x{200B}"));
43 ok($Collator->eq("\x{313}", "\x{343}"));
44 ok($Collator->eq("\x{2000}", "\x{2001}"));
45 ok($Collator->eq("\x{200B}", "\x{200C}"));
46 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
48 $Collator->change(identical => 1);
50 ok($Collator->lt("\0", "\x1F"));
51 ok($Collator->lt("\x1F", "\x{200B}"));
52 ok($Collator->lt("\0", "\x{200B}"));
53 ok($Collator->lt("\x{313}", "\x{343}"));
54 ok($Collator->lt("\x{2000}", "\x{2001}"));
55 ok($Collator->lt("\x{200B}", "\x{200C}"));
56 ok($Collator->gt("\x{304C}", "\x{304B}\x{3099}"));
58 $Collator->change(identical => 0);
60 ok($Collator->eq("\0", "\x1F"));
61 ok($Collator->eq("\x1F", "\x{200B}"));
62 ok($Collator->eq("\0", "\x{200B}"));
63 ok($Collator->eq("\x{313}", "\x{343}"));
64 ok($Collator->eq("\x{2000}", "\x{2001}"));
65 ok($Collator->eq("\x{200B}", "\x{200C}"));
66 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
71 eval { require Unicode::Normalize };
73 $Collator->change(normalization => "NFD");
75 $Collator->change(identical => 1);
77 ok($Collator->lt("\0", "\x{200B}"));
78 ok($Collator->eq("\x{313}", "\x{343}"));
79 ok($Collator->lt("\x{2000}", "\x{2001}"));
80 ok($Collator->lt("\x{200B}", "\x{200C}"));
81 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
83 $Collator->change(identical => 0);
85 ok($Collator->eq("\0", "\x{200B}"));
86 ok($Collator->eq("\x{313}", "\x{343}"));
87 ok($Collator->eq("\x{2000}", "\x{2001}"));
88 ok($Collator->eq("\x{200B}", "\x{200C}"));
89 ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
94 $Collator->change(normalization => undef, identical => 1);
98 ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]');
99 ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]');
101 ok($Collator->viewSortKey('a'),
102 '[0A15 | 0020 | 0002 | FFFF | 0000 0061]');
104 ok($Collator->viewSortKey("\x{304C}"),
105 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]');
107 ok($Collator->viewSortKey("\x{100000}"),
108 '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]');
110 eval { require Unicode::Normalize };
112 $Collator->change(normalization => "NFD");
114 ok($Collator->viewSortKey("\x{304C}"),
115 '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]');
120 $Collator->change(normalization => undef);
124 $Collator->change(level => 3);
126 ok($Collator->viewSortKey("\x{304C}"),
127 '[1926 | 0020 013D | 000E 0002 | | 0000 304C]');
129 $Collator->change(level => 2);
131 ok($Collator->viewSortKey("\x{304C}"),
132 '[1926 | 0020 013D | | | 0000 304C]');
134 $Collator->change(level => 1);
136 ok($Collator->viewSortKey("\x{304C}"),
137 '[1926 | | | | 0000 304C]');
141 $Collator->change(UCA_Version => 8);
143 ok($Collator->viewSortKey("\x{304C}"),
144 '[1926||||0000 304C]');
146 $Collator->change(level => 2);
148 ok($Collator->viewSortKey("\x{304C}"),
149 '[1926|0020 013D|||0000 304C]');
151 $Collator->change(level => 3);
153 ok($Collator->viewSortKey("\x{304C}"),
154 '[1926|0020 013D|000E 0002||0000 304C]');
156 $Collator->change(level => 4);
158 ok($Collator->viewSortKey("\x{304C}"),
159 '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]');