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