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..1051\n"; } # 1 + 70 x @Versions
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;
31
32ok(1);
33
34#########################
35
36my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
37
38# 12 compatibility ideographs are treated as unified ideographs:
39# FA0E, FA0F, FA11, FA13, FA14, FA1F, FA21, FA23, FA24, FA27, FA28, FA29.
40
41my $Collator = Unicode::Collate->new(
42    table => 'keys.txt',
43    normalization => undef,
44);
45
46for my $v (@Versions) {
47    $Collator->change(UCA_Version => $v);
48    ok($Collator->lt("\x{4E00}", "\x{1FFF}"));
49    ok($Collator->lt("\x{9FA5}", "\x{1FFF}"));
50    ok($Collator->gt("\x{FA00}", "\x{1FFF}"));
51    ok($Collator->gt("\x{FA0D}", "\x{1FFF}"));
52    ok($Collator->lt("\x{FA0E}", "\x{1FFF}"));
53    ok($Collator->lt("\x{FA0F}", "\x{1FFF}"));
54    ok($Collator->gt("\x{FA10}", "\x{1FFF}"));
55    ok($Collator->lt("\x{FA11}", "\x{1FFF}"));
56    ok($Collator->gt("\x{FA12}", "\x{1FFF}"));
57    ok($Collator->lt("\x{FA13}", "\x{1FFF}"));
58    ok($Collator->lt("\x{FA14}", "\x{1FFF}"));
59    ok($Collator->gt("\x{FA15}", "\x{1FFF}"));
60    ok($Collator->gt("\x{FA16}", "\x{1FFF}"));
61    ok($Collator->gt("\x{FA17}", "\x{1FFF}"));
62    ok($Collator->gt("\x{FA18}", "\x{1FFF}"));
63    ok($Collator->gt("\x{FA19}", "\x{1FFF}"));
64    ok($Collator->gt("\x{FA1A}", "\x{1FFF}"));
65    ok($Collator->gt("\x{FA1B}", "\x{1FFF}"));
66    ok($Collator->gt("\x{FA1C}", "\x{1FFF}"));
67    ok($Collator->gt("\x{FA1D}", "\x{1FFF}"));
68    ok($Collator->gt("\x{FA1E}", "\x{1FFF}"));
69    ok($Collator->lt("\x{FA1F}", "\x{1FFF}"));
70    ok($Collator->gt("\x{FA20}", "\x{1FFF}"));
71    ok($Collator->lt("\x{FA21}", "\x{1FFF}"));
72    ok($Collator->gt("\x{FA22}", "\x{1FFF}"));
73    ok($Collator->lt("\x{FA23}", "\x{1FFF}"));
74    ok($Collator->lt("\x{FA24}", "\x{1FFF}"));
75    ok($Collator->gt("\x{FA25}", "\x{1FFF}"));
76    ok($Collator->gt("\x{FA26}", "\x{1FFF}"));
77    ok($Collator->lt("\x{FA27}", "\x{1FFF}"));
78    ok($Collator->lt("\x{FA28}", "\x{1FFF}"));
79    ok($Collator->lt("\x{FA29}", "\x{1FFF}"));
80    ok($Collator->gt("\x{FA2A}", "\x{1FFF}"));
81    ok($Collator->gt("\x{FA30}", "\x{1FFF}"));
82    ok($Collator->gt("\x{FAFF}", "\x{1FFF}"));
83}
84
85my $IgnoreCJK = Unicode::Collate->new(
86    table => 'keys.txt',
87    normalization => undef,
88    overrideCJK => sub {()},
89);
90
91for my $v (@Versions) {
92    $IgnoreCJK->change(UCA_Version => $v);
93    ok($IgnoreCJK->eq("\x{4E00}", ""));
94    ok($IgnoreCJK->eq("\x{9FA5}", ""));
95    ok($IgnoreCJK->gt("\x{FA00}", "\x{1FFF}"));
96    ok($IgnoreCJK->gt("\x{FA0D}", "\x{1FFF}"));
97    ok($IgnoreCJK->eq("\x{FA0E}", ""));
98    ok($IgnoreCJK->eq("\x{FA0F}", ""));
99    ok($IgnoreCJK->gt("\x{FA10}", "\x{1FFF}"));
100    ok($IgnoreCJK->eq("\x{FA11}", ""));
101    ok($IgnoreCJK->gt("\x{FA12}", "\x{1FFF}"));
102    ok($IgnoreCJK->eq("\x{FA13}", ""));
103    ok($IgnoreCJK->eq("\x{FA14}", ""));
104    ok($IgnoreCJK->gt("\x{FA15}", "\x{1FFF}"));
105    ok($IgnoreCJK->gt("\x{FA16}", "\x{1FFF}"));
106    ok($IgnoreCJK->gt("\x{FA17}", "\x{1FFF}"));
107    ok($IgnoreCJK->gt("\x{FA18}", "\x{1FFF}"));
108    ok($IgnoreCJK->gt("\x{FA19}", "\x{1FFF}"));
109    ok($IgnoreCJK->gt("\x{FA1A}", "\x{1FFF}"));
110    ok($IgnoreCJK->gt("\x{FA1B}", "\x{1FFF}"));
111    ok($IgnoreCJK->gt("\x{FA1C}", "\x{1FFF}"));
112    ok($IgnoreCJK->gt("\x{FA1D}", "\x{1FFF}"));
113    ok($IgnoreCJK->gt("\x{FA1E}", "\x{1FFF}"));
114    ok($IgnoreCJK->eq("\x{FA1F}", ""));
115    ok($IgnoreCJK->gt("\x{FA20}", "\x{1FFF}"));
116    ok($IgnoreCJK->eq("\x{FA21}", ""));
117    ok($IgnoreCJK->gt("\x{FA22}", "\x{1FFF}"));
118    ok($IgnoreCJK->eq("\x{FA23}", ""));
119    ok($IgnoreCJK->eq("\x{FA24}", ""));
120    ok($IgnoreCJK->gt("\x{FA25}", "\x{1FFF}"));
121    ok($IgnoreCJK->gt("\x{FA26}", "\x{1FFF}"));
122    ok($IgnoreCJK->eq("\x{FA27}", ""));
123    ok($IgnoreCJK->eq("\x{FA28}", ""));
124    ok($IgnoreCJK->eq("\x{FA29}", ""));
125    ok($IgnoreCJK->gt("\x{FA2A}", "\x{1FFF}"));
126    ok($IgnoreCJK->gt("\x{FA30}", "\x{1FFF}"));
127    ok($IgnoreCJK->gt("\x{FAFF}", "\x{1FFF}"));
128}
129
130