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..52\n"; } 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 36use Unicode::Collate::CJK::Korean; 37 38my $collator = Unicode::Collate->new( 39 normalization => undef, 40 overrideCJK => \&Unicode::Collate::CJK::Korean::weightKorean 41); 42 43sub hex_sort { 44 my @source = map pack('U', hex $_), split ' ', shift; 45 my @sorted = $collator->sort(@source); 46 return join " ", map sprintf("%04X", unpack 'U', $_), @sorted; 47} 48 49# 1 50 51$collator->change(level => 1); 52 53ok($collator->eq("\x{AC00}", "\x{4F3D}")); 54ok($collator->eq("\x{4F3D}", "\x{4F73}")); 55ok($collator->eq("\x{4F73}", "\x{5047}")); 56ok($collator->eq("\x{5047}", "\x{50F9}")); 57ok($collator->eq("\x{50F9}", "\x{52A0}")); 58ok($collator->eq("\x{52A0}", "\x{53EF}")); 59ok($collator->lt("\x{53EF}", "\x{AC01}")); 60 61ok($collator->eq("\x{AC1D}", "\x{5580}")); 62ok($collator->eq("\x{5580}", "\x{5BA2}")); 63ok($collator->lt("\x{5BA2}", "\x{AC31}")); 64 65ok($collator->eq("\x{C77C}", "\x{4E00}")); 66ok($collator->eq("\x{4E00}", "\x{4F5A}")); 67ok($collator->eq("\x{4F5A}", "\x{4F7E}")); 68 69ok($collator->lt("\x{993C}", "\x{D790}")); 70ok($collator->eq("\x{D790}", "\x{8A70}")); 71ok($collator->eq("\x{8A70}", "\x{72B5}")); 72ok($collator->eq("\x{72B5}", "\x{7E88}")); 73ok($collator->eq("\x{7E88}", "\x{896D}")); 74ok($collator->eq("\x{896D}", "\x{9821}")); 75ok($collator->eq("\x{9821}", "\x{9EE0}")); 76 77# Ext.B 78ok($collator->lt("\x{20000}", "\x{20001}")); 79ok($collator->lt("\x{20001}", "\x{20002}")); 80ok($collator->lt("\x{20002}", "\x{20003}")); 81ok($collator->lt("\x{20003}", "\x{20004}")); 82ok($collator->lt("\x{20004}", "\x{20005}")); 83 84# 26 85 86$collator->change(level => 2); 87 88ok($collator->lt("\x{AC00}", "\x{4F3D}")); 89ok($collator->lt("\x{4F3D}", "\x{4F73}")); 90ok($collator->lt("\x{4F73}", "\x{5047}")); 91ok($collator->lt("\x{5047}", "\x{50F9}")); 92ok($collator->lt("\x{50F9}", "\x{52A0}")); 93ok($collator->lt("\x{52A0}", "\x{53EF}")); 94ok($collator->lt("\x{53EF}", "\x{AC01}")); 95 96ok($collator->lt("\x{AC1D}", "\x{5580}")); 97ok($collator->lt("\x{5580}", "\x{5BA2}")); 98ok($collator->lt("\x{5BA2}", "\x{AC31}")); 99 100ok($collator->lt("\x{C77C}", "\x{4E00}")); 101ok($collator->lt("\x{4E00}", "\x{4F5A}")); 102ok($collator->lt("\x{4F5A}", "\x{4F7E}")); 103 104ok($collator->lt("\x{993C}", "\x{D790}")); 105ok($collator->lt("\x{D790}", "\x{8A70}")); 106ok($collator->lt("\x{8A70}", "\x{72B5}")); 107ok($collator->lt("\x{72B5}", "\x{7E88}")); 108ok($collator->lt("\x{7E88}", "\x{896D}")); 109ok($collator->lt("\x{896D}", "\x{9821}")); 110ok($collator->lt("\x{9821}", "\x{9EE0}")); 111 112# Ext.B 113ok($collator->lt("\x{20000}", "\x{20001}")); 114ok($collator->lt("\x{20001}", "\x{20002}")); 115ok($collator->lt("\x{20002}", "\x{20003}")); 116ok($collator->lt("\x{20003}", "\x{20004}")); 117ok($collator->lt("\x{20004}", "\x{20005}")); 118 119# 51 120 121ok(hex_sort('4E00 4E8C 4E09 56DB 4E94 516D 4E03 516B 4E5D 5341'), 122 '4E5D 516D 56DB 4E09 5341 4E94 4E8C 4E00 4E03 516B'); 123 124# 52 125