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