BEGIN { $| = 1; print "1..27\n"; } use Unicode::Transform; use strict; use warnings; our $IsEBCDIC = ord("A") != 0x41; print "ok 1\n"; ##### our $sub = sub { sprintf "<%04X>", shift }; our $fbk = sub { sprintf "<%02X>", shift }; our $str = "\x{10fffd}\x{110000}A"; print unicode_to_utf16le($sub, $str) eq "\xff\xdb\xfd\xdf<110000>\x41\0" ? "ok" : "not ok", " 2\n"; print unicode_to_utf16be($sub, $str) eq "\xdb\xff\xdf\xfd<110000>\0\x41" ? "ok" : "not ok", " 3\n"; print unicode_to_utf32le($sub, $str) eq "\xfd\xff\x10\x00<110000>\x41\0\0\0" ? "ok" : "not ok", " 4\n"; print unicode_to_utf32be($sub, $str) eq "\x00\x10\xff\xfd<110000>\0\0\0\x41" ? "ok" : "not ok", " 5\n"; print unicode_to_utf8($sub, $str) eq "\xf4\x8f\xbf\xbd<110000>\x41" ? "ok" : "not ok", " 6\n"; print unicode_to_utf8mod($sub, $str) eq "\xf9\xa1\xbf\xbf\xbd<110000>\x41" ? "ok" : "not ok", " 7\n"; print unicode_to_utfcp1047($sub, $str) eq "\xEE\x42\x73\x73\x71<110000>\xC1" ? "ok" : "not ok", " 8\n"; print "ABcccc" eq utf16le_to_unicode(sub { chr(shift) x 4 }, "\x41\0\x42\0c") ? "ok" : "not ok", " 9\n"; print "ABcccc" eq utf16be_to_unicode(sub { chr(shift) x 4 }, "\0\x41\0\x42c") ? "ok" : "not ok", " 10\n"; print "Aqqrrss" eq utf32le_to_unicode(sub { chr(shift) x 2 }, "\x41\0\0\0qrs") ? "ok" : "not ok", " 11\n"; print "Aqqrrss" eq utf32be_to_unicode(sub { chr(shift) x 2 }, "\0\0\0\x41qrs") ? "ok" : "not ok", " 12\n"; print 'A± ' eq utf8_to_unicode("\x41\xC0\x80\xC2\xB1\xC2\x20\xff") ? "ok" : "not ok", " 13\n"; print 'A<80>± ' eq utf8_to_unicode($fbk, "\x41\xC0\x80\xC2\xB1\xC2\x20\xff") ? "ok" : "not ok", " 14\n"; our $c1_0 = chr($IsEBCDIC ? 32 : 128); print "A${c1_0} " eq utf8_to_unicode(sub {""}, "\x41\xC0\x80\xC2\x80\xC2\x20\xff") ? "ok" : "not ok", " 15\n"; print "A<80>${c1_0} " eq utf8_to_unicode($fbk, "\x41\xC0\x80\xC2\x80\xC2\x20\xff") ? "ok" : "not ok", " 16\n"; eval { $a = utf16be_to_unicode(sub { die }, "\x30\x42") }; # even print !$@ && $a eq "\x{3042}" ? "ok" : "not ok", " 17\n"; eval { $a = utf16be_to_unicode(sub { die }, "\x30\x42\x30") }; # odd print $@ ? "ok" : "not ok", " 18\n"; eval { $a = utf32be_to_unicode(sub { die }, "\x00\x00\x30\x42") }; print !$@ && $a eq "\x{3042}" ? "ok" : "not ok", " 19\n"; eval { $a = utf32be_to_unicode(sub { die }, "\x30\x42\x00\x00") }; print $@ ? "ok" : "not ok", " 20\n"; print "\x{10FFFD}<110000><10000030><32><42>" eq utf32be_to_unicode($fbk, "\x00\x10\xff\xfd\x00\x11\x00\x00\x10\x00\x00\x30\x32\x42") ? "ok" : "not ok", " 21\n"; print "<110001>\x{10FFFD}\x{3042}<12345678><01>" eq utf32le_to_unicode($fbk, "\x01\x00\x11\x00\xfd\xff\x10\x00\x42\x30\x00\x00\x78\x56\x34\x12\x01") ? "ok" : "not ok", " 22\n"; print "\x{10FFFD}" eq utfcp1047_to_unicode($fbk, "\xEE\x42\x73\x73\x71\xEE") ? "ok" : "not ok", " 23\n"; print !defined Unicode::Transform::ord_utf8("\xC0\x80") ? "ok" : "not ok", " 24\n"; print !defined Unicode::Transform::ord_utf8("\x80") ? "ok" : "not ok", " 25\n"; print !defined Unicode::Transform::ord_utf8("\xFD") ? "ok" : "not ok", " 26\n"; print !defined Unicode::Transform::ord_utf8("\xFF") ? "ok" : "not ok", " 27\n";