1b39c5158Smillert 2b39c5158SmillertBEGIN { 3b39c5158Smillert if ($ENV{PERL_CORE}) { 4b39c5158Smillert chdir('t') if -d 't'; 5b39c5158Smillert @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 6b39c5158Smillert } 7b39c5158Smillert} 8b39c5158Smillert 9b39c5158Smillertuse strict; 10b39c5158Smillertuse warnings; 11*256a93a4Safresh1BEGIN { $| = 1; print "1..1426\n"; } # 1 + 75 x @Versions 12898184e3Ssthenmy $count = 0; 13898184e3Ssthensub ok ($;$) { 14898184e3Ssthen my $p = my $r = shift; 15898184e3Ssthen if (@_) { 16898184e3Ssthen my $x = shift; 17898184e3Ssthen $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x; 18898184e3Ssthen } 19898184e3Ssthen print $p ? "ok" : "not ok", ' ', ++$count, "\n"; 20898184e3Ssthen} 21898184e3Ssthen 22b39c5158Smillertuse Unicode::Collate; 23b39c5158Smillert 24b39c5158Smillertok(1); 25b39c5158Smillert 26*256a93a4Safresh1sub _pack_U { Unicode::Collate::pack_U(@_) } 27*256a93a4Safresh1sub _unpack_U { Unicode::Collate::unpack_U(@_) } 28*256a93a4Safresh1 29898184e3Ssthen######################### 30898184e3Ssthen 31898184e3Ssthenmy $coll = Unicode::Collate->new( 32b39c5158Smillert table => 'keys.txt', 33b39c5158Smillert normalization => undef, 34b39c5158Smillert); 35b39c5158Smillert 36898184e3Ssthen# CJK UI Ext > CJK UI. 37898184e3Ssthen# [ UCA_Version 8: Ext.A < UI and BMP < Ext.B (code point order) ] 38b39c5158Smillert 39898184e3Ssthen# 4E00..9FA5 are CJK UI. 40898184e3Ssthen# 9FA6..9FBB are CJK UI since UCA_Version 14 (Unicode 4.1). 41898184e3Ssthen# 9FBC..9FC3 are CJK UI since UCA_Version 18 (Unicode 5.1). 42898184e3Ssthen# 9FC4..9FCB are CJK UI since UCA_Version 20 (Unicode 5.2). 43898184e3Ssthen# 9FCC is CJK UI since UCA_Version 24 (Unicode 6.1). 445759b3d2Safresh1# 9FCD..9FD5 are CJK UI since UCA_Version 32 (Unicode 8.0). 455759b3d2Safresh1# 9FD6..9FEA are CJK UI since UCA_Version 36 (Unicode 10.0). 46*256a93a4Safresh1# 9FEB..9FEF are CJK UI since UCA_Version 38 (Unicode 11.0). 47*256a93a4Safresh1# 9FF0..9FFC are CJK UI since UCA_Version 43 (Unicode 13.0). 48b39c5158Smillert 49898184e3Ssthen# 3400..4DB5 are CJK UI Ext.A since UCA_Version 8 (Unicode 3.0). 50*256a93a4Safresh1# 4DB6..4DBF are CJK UI Ext.A since UCA_Version 43 (Unicode 13.0). 51898184e3Ssthen# 20000..2A6D6 are CJK UI Ext.B since UCA_Version 8 (Unicode 3.1). 52*256a93a4Safresh1# 2A6D7..2A6DD are CJK UI Ext.B since UCA_Version 43 (Unicode 13.0). 53898184e3Ssthen# 2A700..2B734 are CJK UI Ext.C since UCA_Version 20 (Unicode 5.2). 54898184e3Ssthen# 2B740..2B81D are CJK UI Ext.D since UCA_Version 22 (Unicode 6.0). 555759b3d2Safresh1# 2B820..2CEA1 are CJK UI Ext.E since UCA_Version 32 (Unicode 8.0). 565759b3d2Safresh1# 2CEB0..2EBE0 are CJK UI Ext.F since UCA_Version 36 (Unicode 10.0). 57*256a93a4Safresh1# 30000..3134A are CJK UI Ext.G since UCA_Version 43 (Unicode 13.0). 58b39c5158Smillert 59*256a93a4Safresh1my @Versions = ( 8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 60*256a93a4Safresh1 28, 30, 32, 34, 36, 38, 40, 41, 43); 61b39c5158Smillert 62898184e3Ssthenfor my $v (@Versions) { 63898184e3Ssthen $coll->change(UCA_Version => $v); 64b39c5158Smillert 65898184e3Ssthen # Ext.A > UI 66898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{4E00}") == ($v >= 9 ? 1 : -1)); # UI 67898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FA5}") == ($v >= 9 ? 1 : -1)); # UI 68898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FA6}") == ($v >= 14 ? 1 : -1)); # new 69898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FBB}") == ($v >= 14 ? 1 : -1)); # new 70898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FBC}") == ($v >= 18 ? 1 : -1)); # new 71898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FC3}") == ($v >= 18 ? 1 : -1)); # new 72898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FC4}") == ($v >= 20 ? 1 : -1)); # new 73898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FCB}") == ($v >= 20 ? 1 : -1)); # new 74898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FCC}") == ($v >= 24 ? 1 : -1)); # new 755759b3d2Safresh1 ok($coll->cmp("\x{3400}", "\x{9FCD}") == ($v >= 32 ? 1 : -1)); # new 765759b3d2Safresh1 ok($coll->cmp("\x{3400}", "\x{9FD5}") == ($v >= 32 ? 1 : -1)); # new 775759b3d2Safresh1 ok($coll->cmp("\x{3400}", "\x{9FD6}") == ($v >= 36 ? 1 : -1)); # new 785759b3d2Safresh1 ok($coll->cmp("\x{3400}", "\x{9FEA}") == ($v >= 36 ? 1 : -1)); # new 79*256a93a4Safresh1 ok($coll->cmp("\x{3400}", "\x{9FEB}") == ($v >= 38 ? 1 : -1)); # new 80*256a93a4Safresh1 ok($coll->cmp("\x{3400}", "\x{9FEF}") == ($v >= 38 ? 1 : -1)); # new 81*256a93a4Safresh1 ok($coll->cmp("\x{3400}", "\x{9FF0}") == ($v >= 43 ? 1 : -1)); # new 82*256a93a4Safresh1 ok($coll->cmp("\x{3400}", "\x{9FFC}") == ($v >= 43 ? 1 : -1)); # new 83*256a93a4Safresh1 ok($coll->cmp("\x{3400}", "\x{9FFD}") == -1); # na 84898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{9FFF}") == -1); # na 85898184e3Ssthen 86898184e3Ssthen # UI < UI 87898184e3Ssthen ok($coll->cmp("\x{4E00}", "\x{9FA5}") == -1); # UI < UI 88898184e3Ssthen ok($coll->cmp("\x{9FA5}", "\x{9FA6}") == -1); # UI < new 89898184e3Ssthen ok($coll->cmp("\x{9FA6}", "\x{9FBB}") == -1); # new < new 90898184e3Ssthen ok($coll->cmp("\x{9FBB}", "\x{9FBC}") == -1); # new < new 91898184e3Ssthen ok($coll->cmp("\x{9FBC}", "\x{9FC3}") == -1); # new < new 92898184e3Ssthen ok($coll->cmp("\x{9FC3}", "\x{9FC4}") == -1); # new < new 93898184e3Ssthen ok($coll->cmp("\x{9FC4}", "\x{9FCB}") == -1); # new < new 94898184e3Ssthen ok($coll->cmp("\x{9FCB}", "\x{9FCC}") == -1); # new < new 955759b3d2Safresh1 ok($coll->cmp("\x{9FCC}", "\x{9FCD}") == -1); # new < new 965759b3d2Safresh1 ok($coll->cmp("\x{9FCD}", "\x{9FD5}") == -1); # new < new 975759b3d2Safresh1 ok($coll->cmp("\x{9FD5}", "\x{9FD6}") == -1); # new < new 985759b3d2Safresh1 ok($coll->cmp("\x{9FD6}", "\x{9FEA}") == -1); # new < new 99*256a93a4Safresh1 ok($coll->cmp("\x{9FEA}", "\x{9FEB}") == -1); # new < new 100*256a93a4Safresh1 ok($coll->cmp("\x{9FEB}", "\x{9FEF}") == -1); # new < new 101*256a93a4Safresh1 ok($coll->cmp("\x{9FEF}", "\x{9FF0}") == -1); # new < new 102*256a93a4Safresh1 ok($coll->cmp("\x{9FF0}", "\x{9FFC}") == -1); # new < new 103*256a93a4Safresh1 ok($coll->cmp("\x{9FFC}", "\x{9FFD}") == -1); # new < na 104*256a93a4Safresh1 ok($coll->cmp("\x{9FFD}", "\x{9FFF}") == -1); # na < na 105898184e3Ssthen 106898184e3Ssthen # Ext.A < Ext.B 107898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{20000}") == -1); 108898184e3Ssthen 109898184e3Ssthen # Ext.A 110898184e3Ssthen ok($coll->cmp("\x{3400}", "\x{4DB5}") == -1); # A < A 111898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{3400}") == ($v >= 8 ? 1 : -1)); # na > A 112898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{4DB5}") == ($v >= 8 ? 1 : -1)); # na > A 113*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{4DB6}") == ($v >= 43 ? 1 : -1)); # na > A 114*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{4DBF}") == ($v >= 43 ? 1 : -1)); # na > A 115898184e3Ssthen 116898184e3Ssthen # Ext.B 117898184e3Ssthen ok($coll->cmp("\x{20000}","\x{2A6D6}") == -1); # B < B 118898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{20000}") == ($v >= 9 ? 1 : -1)); # na > B 119898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2A6D6}") == ($v >= 9 ? 1 : -1)); # na > B 120*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2A6D7}") == ($v >= 43 ? 1 : -1)); # na > B 121*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2A6DD}") == ($v >= 43 ? 1 : -1)); # na > B 122*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2A6DE}") == -1); # na < na 123898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2A6DF}") == -1); # na < na 124898184e3Ssthen 125898184e3Ssthen # Ext.C 126898184e3Ssthen ok($coll->cmp("\x{2A700}","\x{2B734}") == -1); # C < C 127898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2A700}") == ($v >= 20 ? 1 : -1)); # na > C 128898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2B734}") == ($v >= 20 ? 1 : -1)); # na > C 129898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2B735}") == -1); # na < na 130898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2B73F}") == -1); # na < na 131898184e3Ssthen 132898184e3Ssthen # Ext.D 133898184e3Ssthen ok($coll->cmp("\x{2B740}","\x{2B81D}") == -1); # D < D 134898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2B740}") == ($v >= 22 ? 1 : -1)); # na > D 135898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2B81D}") == ($v >= 22 ? 1 : -1)); # na > D 136898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2B81E}") == -1); # na < na 137898184e3Ssthen ok($coll->cmp("\x{2FFF}", "\x{2B81F}") == -1); # na < na 1385759b3d2Safresh1 1395759b3d2Safresh1 # Ext.E 1405759b3d2Safresh1 ok($coll->cmp("\x{2B820}","\x{2CEA1}") == -1); # E < E 1415759b3d2Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2B820}") == ($v >= 32 ? 1 : -1)); # na > E 1425759b3d2Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2CEA1}") == ($v >= 32 ? 1 : -1)); # na > E 1435759b3d2Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2CEA2}") == -1); # na < na 1445759b3d2Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2CEAF}") == -1); # na < na 1455759b3d2Safresh1 1465759b3d2Safresh1 # Ext.F 1475759b3d2Safresh1 ok($coll->cmp("\x{2CEB0}","\x{2EBE0}") == -1); # F < F 1485759b3d2Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2CEB0}") == ($v >= 36 ? 1 : -1)); # na > F 1495759b3d2Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2EBE0}") == ($v >= 36 ? 1 : -1)); # na > F 1505759b3d2Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2EBE1}") == -1); # na < na 1515759b3d2Safresh1 ok($coll->cmp("\x{2FFF}", "\x{2EBEF}") == -1); # na < na 152*256a93a4Safresh1 153*256a93a4Safresh1 # Ext.G 154*256a93a4Safresh1 ok($coll->cmp("\x{30000}","\x{3134A}") == -1); # G < G 155*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{30000}") == ($v >= 43 ? 1 : -1)); # na > G 156*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{3134A}") == ($v >= 43 ? 1 : -1)); # na > G 157*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{3134B}") == -1); # na < na 158*256a93a4Safresh1 ok($coll->cmp("\x{2FFF}", "\x{3134F}") == -1); # na < na 159898184e3Ssthen} 160b39c5158Smillert 161