This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Unicode-Collate to CPAN version 0.67
[perl5.git] / cpan / Unicode-Collate / t / overcjk1.t
1
2 BEGIN {
3     unless ("A" eq pack('U', 0x41)) {
4         print "1..0 # Unicode::Collate " .
5             "cannot stringify a Unicode code point\n";
6         exit 0;
7     }
8     if ($ENV{PERL_CORE}) {
9         chdir('t') if -d 't';
10         @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
11     }
12 }
13
14 use Test;
15 BEGIN { plan tests => 131 }; # 11 + 15 x @Versions
16
17 use strict;
18 use warnings;
19 use Unicode::Collate;
20
21 ok(1);
22
23 ##### 2..11
24
25 my $overCJK = Unicode::Collate->new(
26   table => 'keys.txt',
27   normalization => undef,
28   entry => <<'ENTRIES',
29 4E01 ; [.B1FC.0030.0004.4E00] # Ideograph; B1FC = FFFF - 4E03.
30 ENTRIES
31   overrideCJK => sub {
32     my $u = 0xFFFF - $_[0]; # reversed
33     [$u, 0x20, 0x2, $u];
34   },
35 );
36
37 ok($overCJK->gt("B", "A")); # diff. at level 1.
38 ok($overCJK->lt("a", "A")); # diff. at level 3.
39 ok($overCJK->lt( "\x{4E03}",  "\x{4E01}")); # diff. at level 2.
40 ok($overCJK->gt( "\x{4E03}B", "\x{4E01}A"));
41 ok($overCJK->lt( "\x{4E03}A", "\x{4E01}B"));
42 ok($overCJK->gt("B\x{4E03}", "A\x{4E01}"));
43 ok($overCJK->lt("A\x{4E03}", "B\x{4E01}"));
44 ok($overCJK->lt("A\x{4E03}", "A\x{4E01}"));
45 ok($overCJK->lt("A\x{4E03}", "a\x{4E01}"));
46 ok($overCJK->lt("a\x{4E03}", "A\x{4E01}"));
47
48 #####
49
50 # 9FA6..9FBB are CJK UI since UCA_Version 14 (Unicode 4.1).
51 # 9FBC..9FC3 are CJK UI since UCA_Version 18 (Unicode 5.1).
52 # 9FC4..9FCB are CJK UI since UCA_Version 20 (Unicode 5.2).
53
54 my @Versions = (8, 9, 11, 14, 16, 18, 20, 22);
55
56 for my $v (@Versions) {
57 $overCJK->change(UCA_Version => $v);
58 ok($overCJK->cmp("a\x{3400}", "A\x{4DB5}") == 1);
59 ok($overCJK->cmp("a\x{4DB5}", "A\x{4E00}") == 1);
60 ok($overCJK->cmp("a\x{4E00}", "A\x{9FA5}") == 1);
61 ok($overCJK->cmp("a\x{9FA5}", "A\x{9FA6}") == ($v >= 14 ? 1 : -1));
62 ok($overCJK->cmp("a\x{9FA6}", "A\x{9FAF}") == ($v >= 14 ? 1 : -1));
63 ok($overCJK->cmp("a\x{9FAF}", "A\x{9FB0}") == ($v >= 14 ? 1 : -1));
64 ok($overCJK->cmp("a\x{9FB0}", "A\x{9FBB}") == ($v >= 14 ? 1 : -1));
65 ok($overCJK->cmp("a\x{9FBB}", "A\x{9FBC}") == ($v >= 18 ? 1 : -1));
66 ok($overCJK->cmp("a\x{9FBC}", "A\x{9FBF}") == ($v >= 18 ? 1 : -1));
67 ok($overCJK->cmp("a\x{9FBF}", "A\x{9FC3}") == ($v >= 18 ? 1 : -1));
68 ok($overCJK->cmp("a\x{9FC3}", "A\x{9FC4}") == ($v >= 20 ? 1 : -1));
69 ok($overCJK->cmp("a\x{9FC4}", "A\x{9FCA}") == ($v >= 20 ? 1 : -1));
70 ok($overCJK->cmp("a\x{9FCA}", "A\x{9FCB}") == ($v >= 20 ? 1 : -1));
71 ok($overCJK->cmp("a\x{9FCB}", "A\x{9FCC}") == -1);
72 ok($overCJK->cmp("a\x{9FCC}", "A\x{9FCF}") == -1);
73 }