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 9BEGIN { 10 unless (5.006001 <= $]) { 11 print "1..0 # skipped: Perl 5.6.1 or later". 12 " needed for this test\n"; 13 exit; 14 } 15} 16 17######################### 18 19use strict; 20use warnings; 21BEGIN { $| = 1; print "1..26\n"; } 22my $count = 0; 23sub ok { Unicode::Normalize::ok(\$count, @_) } 24 25use Unicode::Normalize qw(:all); 26 27ok(1); 28 29sub _pack_U { Unicode::Normalize::pack_U(@_) } 30sub _unpack_U { Unicode::Normalize::unpack_U(@_) } 31 32######################### 33 34sub arraynorm { 35 my $form = shift; 36 my @string = @_; 37 my $result = ""; 38 my $unproc = ""; 39 foreach my $str (@string) { 40 $unproc .= $str; 41 $result .= $form eq 'NFC' ? NFC_partial ($unproc) : 42 $form eq 'NFD' ? NFD_partial ($unproc) : 43 $form eq 'NFKC' ? NFKC_partial($unproc) : 44 $form eq 'NFKD' ? NFKD_partial($unproc) : 45 undef; 46 } 47 $result .= $unproc; 48 return $result; 49} 50 51my $strD = "\x{3C9}\x{301}\x{1100}\x{1161}\x{11A8}\x{1100}\x{1161}\x{11AA}"; 52my $strC = "\x{3CE}\x{AC01}\x{AC03}"; 53my @str1 = (substr($strD,0,3), substr($strD,3,4), substr($strD,7)); 54my @str2 = (substr($strD,0,1), substr($strD,1,3), substr($strD,4)); 55ok($strC eq NFC($strD)); 56ok($strD eq join('', @str1)); 57ok($strC eq arraynorm('NFC', @str1)); 58ok($strD eq join('', @str2)); 59ok($strC eq arraynorm('NFC', @str2)); 60 61my @strX = ("\x{300}\x{AC00}", "\x{11A8}"); 62my $strX = "\x{300}\x{AC01}"; 63ok($strX eq NFC(join('', @strX))); 64ok($strX eq arraynorm('NFC', @strX)); 65ok($strX eq NFKC(join('', @strX))); 66ok($strX eq arraynorm('NFKC', @strX)); 67 68my @strY = ("\x{304B}\x{0308}", "\x{0323}\x{3099}"); 69my $strY = ("\x{304C}\x{0323}\x{0308}"); 70ok($strY eq NFC(join('', @strY))); 71ok($strY eq arraynorm('NFC', @strY)); 72ok($strY eq NFKC(join('', @strY))); 73ok($strY eq arraynorm('NFKC', @strY)); 74 75my @strZ = ("\x{304B}\x{0308}", "\x{0323}", "\x{3099}"); 76my $strZ = ("\x{304B}\x{3099}\x{0323}\x{0308}"); 77ok($strZ eq NFD(join('', @strZ))); 78ok($strZ eq arraynorm('NFD', @strZ)); 79ok($strZ eq NFKD(join('', @strZ))); 80ok($strZ eq arraynorm('NFKD', @strZ)); 81 82# 18 83 84# must modify the source 85my $sNFD = "\x{FA19}"; 86ok(NFD_partial($sNFD), ""); 87ok($sNFD, "\x{795E}"); 88 89my $sNFC = "\x{FA1B}"; 90ok(NFC_partial($sNFC), ""); 91ok($sNFC, "\x{798F}"); 92 93my $sNFKD = "\x{FA1E}"; 94ok(NFKD_partial($sNFKD), ""); 95ok($sNFKD, "\x{7FBD}"); 96 97my $sNFKC = "\x{FA26}"; 98ok(NFKC_partial($sNFKC), ""); 99ok($sNFKC, "\x{90FD}"); 100 101# 26 102 103