15759b3d2Safresh1 25759b3d2Safresh1BEGIN { 35759b3d2Safresh1 if ($ENV{PERL_CORE}) { 45759b3d2Safresh1 chdir('t') if -d 't'; 55759b3d2Safresh1 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 65759b3d2Safresh1 } 75759b3d2Safresh1} 85759b3d2Safresh1 95759b3d2Safresh1######################### 105759b3d2Safresh1 115759b3d2Safresh1use strict; 125759b3d2Safresh1use warnings; 135759b3d2Safresh1BEGIN { $| = 1; print "1..70\n"; } 145759b3d2Safresh1my $count = 0; 15*256a93a4Safresh1sub ok { Unicode::Normalize::ok(\$count, @_) } 165759b3d2Safresh1 175759b3d2Safresh1use Unicode::Normalize qw(:all); 185759b3d2Safresh1 195759b3d2Safresh1ok(1); 205759b3d2Safresh1 21*256a93a4Safresh1sub _pack_U { Unicode::Normalize::dot_t_pack_U(@_) } 225759b3d2Safresh1sub hexU { _pack_U map hex, split ' ', shift } 235759b3d2Safresh1sub answer { defined $_[0] ? $_[0] ? "YES" : "NO" : "MAYBE" } 245759b3d2Safresh1 255759b3d2Safresh1######################### 265759b3d2Safresh1 275759b3d2Safresh1ok(FCD(''), ""); 285759b3d2Safresh1ok(FCC(''), ""); 295759b3d2Safresh1ok(FCD('A'), "A"); 305759b3d2Safresh1ok(FCC('A'), "A"); 315759b3d2Safresh1 325759b3d2Safresh1ok(normalize('FCD', ""), ""); 335759b3d2Safresh1ok(normalize('FCC', ""), ""); 345759b3d2Safresh1ok(normalize('FCC', "A"), "A"); 355759b3d2Safresh1ok(normalize('FCD', "A"), "A"); 365759b3d2Safresh1 375759b3d2Safresh1# 9 385759b3d2Safresh1 395759b3d2Safresh1# if checkFCD is YES, the return value from FCD should be same as the original 405759b3d2Safresh1ok(FCD(hexU("00C5")), hexU("00C5")); # A with ring above 415759b3d2Safresh1ok(FCD(hexU("0041 030A")), hexU("0041 030A")); # A+ring 425759b3d2Safresh1ok(FCD(hexU("0041 0327 030A")), hexU("0041 0327 030A")); # A+cedilla+ring 435759b3d2Safresh1ok(FCD(hexU("AC01 1100 1161")), hexU("AC01 1100 1161")); # hangul 445759b3d2Safresh1ok(FCD(hexU("212B F900")), hexU("212B F900")); # compat 455759b3d2Safresh1 465759b3d2Safresh1ok(normalize('FCD', hexU("00C5")), hexU("00C5")); 475759b3d2Safresh1ok(normalize('FCD', hexU("0041 030A")), hexU("0041 030A")); 485759b3d2Safresh1ok(normalize('FCD', hexU("0041 0327 030A")), hexU("0041 0327 030A")); 495759b3d2Safresh1ok(normalize('FCD', hexU("AC01 1100 1161")), hexU("AC01 1100 1161")); 505759b3d2Safresh1ok(normalize('FCD', hexU("212B F900")), hexU("212B F900")); 515759b3d2Safresh1 525759b3d2Safresh1# 19 535759b3d2Safresh1 545759b3d2Safresh1# if checkFCD is MAYBE or NO, FCD returns NFD (this behavior isn't documented) 555759b3d2Safresh1ok(FCD(hexU("00C5 0327")), hexU("0041 0327 030A")); 565759b3d2Safresh1ok(FCD(hexU("0041 030A 0327")), hexU("0041 0327 030A")); 575759b3d2Safresh1ok(FCD(hexU("00C5 0327")), NFD(hexU("00C5 0327"))); 585759b3d2Safresh1ok(FCD(hexU("0041 030A 0327")), NFD(hexU("0041 030A 0327"))); 595759b3d2Safresh1 605759b3d2Safresh1ok(normalize('FCD', hexU("00C5 0327")), hexU("0041 0327 030A")); 615759b3d2Safresh1ok(normalize('FCD', hexU("0041 030A 0327")), hexU("0041 0327 030A")); 625759b3d2Safresh1ok(normalize('FCD', hexU("00C5 0327")), NFD(hexU("00C5 0327"))); 635759b3d2Safresh1ok(normalize('FCD', hexU("0041 030A 0327")), NFD(hexU("0041 030A 0327"))); 645759b3d2Safresh1 655759b3d2Safresh1# 27 665759b3d2Safresh1 675759b3d2Safresh1ok(answer(checkFCD('')), 'YES'); 685759b3d2Safresh1ok(answer(checkFCD('A')), 'YES'); 695759b3d2Safresh1ok(answer(checkFCD("\x{030A}")), 'YES'); # 030A;COMBINING RING ABOVE 705759b3d2Safresh1ok(answer(checkFCD("\x{0327}")), 'YES'); # 0327;COMBINING CEDILLA 715759b3d2Safresh1ok(answer(checkFCD(_pack_U(0x00C5))), 'YES'); # A with ring above 725759b3d2Safresh1ok(answer(checkFCD(hexU("0041 030A"))), 'YES'); # A+ring 735759b3d2Safresh1ok(answer(checkFCD(hexU("0041 0327 030A"))), 'YES'); # A+cedilla+ring 745759b3d2Safresh1ok(answer(checkFCD(hexU("0041 030A 0327"))), 'NO'); # A+ring+cedilla 755759b3d2Safresh1ok(answer(checkFCD(hexU("00C5 0327"))), 'NO'); # A-ring+cedilla 765759b3d2Safresh1ok(answer(checkNFC(hexU("00C5 0327"))), 'MAYBE'); # NFC: A-ring+cedilla 775759b3d2Safresh1ok(answer(check("FCD", hexU("00C5 0327"))), 'NO'); 785759b3d2Safresh1ok(answer(check("NFC", hexU("00C5 0327"))), 'MAYBE'); 795759b3d2Safresh1ok(answer(checkFCD("\x{AC01}\x{1100}\x{1161}")), 'YES'); # hangul 805759b3d2Safresh1ok(answer(checkFCD("\x{212B}\x{F900}")), 'YES'); # compat 815759b3d2Safresh1 825759b3d2Safresh1ok(answer(checkFCD(hexU("1EA7 05AE 0315 0062"))), "NO"); 835759b3d2Safresh1ok(answer(checkFCC(hexU("1EA7 05AE 0315 0062"))), "NO"); 845759b3d2Safresh1ok(answer(check('FCD', hexU("1EA7 05AE 0315 0062"))), "NO"); 855759b3d2Safresh1ok(answer(check('FCC', hexU("1EA7 05AE 0315 0062"))), "NO"); 865759b3d2Safresh1 875759b3d2Safresh1# 45 885759b3d2Safresh1 895759b3d2Safresh1ok(FCC(hexU("00C5 0327")), hexU("0041 0327 030A")); 905759b3d2Safresh1ok(FCC(hexU("0045 0304 0300")), "\x{1E14}"); 915759b3d2Safresh1ok(FCC("\x{1100}\x{1161}\x{1100}\x{1173}\x{11AF}"), "\x{AC00}\x{AE00}"); 925759b3d2Safresh1ok(normalize('FCC', hexU("00C5 0327")), hexU("0041 0327 030A")); 935759b3d2Safresh1ok(normalize('FCC', hexU("0045 0304 0300")), "\x{1E14}"); 945759b3d2Safresh1ok(normalize('FCC', hexU("1100 1161 1100 1173 11AF")), "\x{AC00}\x{AE00}"); 955759b3d2Safresh1 965759b3d2Safresh1ok(FCC("\x{0B47}\x{0300}\x{0B3E}"), "\x{0B47}\x{0300}\x{0B3E}"); 975759b3d2Safresh1ok(FCC("\x{1100}\x{0300}\x{1161}"), "\x{1100}\x{0300}\x{1161}"); 985759b3d2Safresh1ok(FCC("\x{0B47}\x{0B3E}\x{0300}"), "\x{0B4B}\x{0300}"); 995759b3d2Safresh1ok(FCC("\x{1100}\x{1161}\x{0300}"), "\x{AC00}\x{0300}"); 1005759b3d2Safresh1ok(FCC("\x{0B47}\x{300}\x{0B3E}\x{327}"), "\x{0B47}\x{300}\x{0B3E}\x{327}"); 1015759b3d2Safresh1ok(FCC("\x{1100}\x{300}\x{1161}\x{327}"), "\x{1100}\x{300}\x{1161}\x{327}"); 1025759b3d2Safresh1 1035759b3d2Safresh1# 57 1045759b3d2Safresh1 1055759b3d2Safresh1ok(answer(checkFCC('')), 'YES'); 1065759b3d2Safresh1ok(answer(checkFCC('A')), 'YES'); 1075759b3d2Safresh1ok(answer(checkFCC("\x{030A}")), 'MAYBE'); # 030A;COMBINING RING ABOVE 1085759b3d2Safresh1ok(answer(checkFCC("\x{0327}")), 'MAYBE'); # 0327;COMBINING CEDILLA 1095759b3d2Safresh1ok(answer(checkFCC(hexU("00C5"))), 'YES'); # A with ring above 1105759b3d2Safresh1ok(answer(checkFCC(hexU("0041 030A"))), 'MAYBE'); # A+ring 1115759b3d2Safresh1ok(answer(checkFCC(hexU("0041 0327 030A"))), 'MAYBE'); # A+cedilla+ring 1125759b3d2Safresh1ok(answer(checkFCC(hexU("0041 030A 0327"))), 'NO'); # A+ring+cedilla 1135759b3d2Safresh1ok(answer(checkFCC(hexU("00C5 0327"))), 'NO'); # A-ring+cedilla 1145759b3d2Safresh1ok(answer(checkFCC("\x{AC01}\x{1100}\x{1161}")), 'MAYBE'); # hangul 1155759b3d2Safresh1ok(answer(checkFCC("\x{212B}\x{F900}")), 'NO'); # compat 1165759b3d2Safresh1ok(answer(checkFCC("\x{212B}\x{0327}")), 'NO'); # compat 1175759b3d2Safresh1ok(answer(checkFCC("\x{0327}\x{212B}")), 'NO'); # compat 1185759b3d2Safresh1 1195759b3d2Safresh1# 70 1205759b3d2Safresh1 121