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