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);
21 unless (exists &Unicode::Collate::bootstrap or 5.008 <= $]) {
22 print "1..0 # skipped: XSUB, or Perl 5.8.0 or later".
23 " needed for this test\n";
29 BEGIN { plan tests => 61 }; # 1 + 30 * 2
33 #########################
39 # Special Database Values. The data files for CLDR provide
40 # special weights for two noncharacters:
42 # 1. A special noncharacter <HIGH> (U+FFFF) for specification of a range
43 # in a database, allowing "Sch" <= X <= "Sch<HIGH>" to pick all strings
44 # starting with "sch" plus those that sort equivalently.
45 # 2. A special noncharacter <LOW> (U+FFFE) for merged database fields,
46 # allowing "Disi\x{301}lva<LOW>John" to sort next to "Disilva<LOW>John".
48 my $entry = <<'ENTRIES';
49 FFFE ; [*0001.0020.0005.FFFE] # <noncharacter-FFFE>
50 FFFF ; [.FFFE.0020.0005.FFFF] # <noncharacter-FFFF>
53 my @disilva = ("di Silva", "diSilva", "di Si\x{301}lva", "diSi\x{301}lva");
54 my @dsf = map "$_\x{FFFE}Fred", @disilva;
55 my @dsj = map "$_\x{FFFE}John", @disilva;
56 my @dsJ = map "$_ John", @disilva;
58 for my $norm (undef, 'NFD') {
60 eval { require Unicode::Normalize };
62 ok(1) for 1..30; # silent skip
67 my $coll = Unicode::Collate->new(
70 normalization => $norm,
76 ok($coll->lt("\x{FFFD}", "\x{FFFF}"));
77 ok($coll->lt("\x{1FFFD}", "\x{1FFFF}"));
78 ok($coll->lt("\x{2FFFD}", "\x{2FFFF}"));
79 ok($coll->lt("\x{10FFFD}", "\x{10FFFF}"));
82 ok($coll->lt("perl\x{FFFD}", "perl\x{FFFF}"));
83 ok($coll->lt("perl\x{1FFFD}", "perl\x{FFFF}"));
84 ok($coll->lt("perl\x{1FFFE}", "perl\x{FFFF}"));
85 ok($coll->lt("perl\x{1FFFF}", "perl\x{FFFF}"));
86 ok($coll->lt("perl\x{2FFFD}", "perl\x{FFFF}"));
87 ok($coll->lt("perl\x{2FFFE}", "perl\x{FFFF}"));
88 ok($coll->lt("perl\x{2FFFF}", "perl\x{FFFF}"));
89 ok($coll->lt("perl\x{10FFFD}", "perl\x{FFFF}"));
90 ok($coll->lt("perl\x{10FFFE}", "perl\x{FFFF}"));
91 ok($coll->lt("perl\x{10FFFF}", "perl\x{FFFF}"));
94 ok($coll->gt("perl\x{FFFF}AB", "perl\x{FFFF}"));
95 ok($coll->lt("perl\x{FFFF}\x{10FFFF}", "perl\x{FFFF}\x{FFFF}"));
97 $coll->change(level => 4);
100 for my $i (0 .. $#disilva - 1) {
101 ok($coll->lt($dsf[$i], $dsf[$i+1]));
102 ok($coll->lt($dsj[$i], $dsj[$i+1]));
103 ok($coll->lt($dsJ[$i], $dsJ[$i+1]));
107 ok($coll->lt($dsf[-1], $dsj[0]));
110 for my $i (0 .. $#disilva) {
111 ok($coll->lt($dsj[$i], $dsJ[$i]));