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