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