BEGIN { $| = 1; print "1..9\n"; } END {print "not ok 1\n" unless $loaded;} use String::Multibyte; $bytes = String::Multibyte->new('Bytes',1); $euc = String::Multibyte->new('EUC',1); $eucjp = String::Multibyte->new('EUC_JP',1); $sjis = String::Multibyte->new('ShiftJIS',1); $utf8 = String::Multibyte->new('UTF8',1); $u16be = String::Multibyte->new('UTF16BE',1); $u16le = String::Multibyte->new('UTF16LE',1); $u32be = String::Multibyte->new('UTF32BE',1); $u32le = String::Multibyte->new('UTF32LE',1); $^W = 1; $loaded = 1; print "ok 1\n"; ##### print $bytes->length("") == 0 && $euc ->length("") == 0 && $eucjp->length("") == 0 && $sjis ->length("") == 0 && $utf8 ->length("") == 0 && $u16be->length("") == 0 && $u16le->length("") == 0 && $u32be->length("") == 0 && $u32le->length("") == 0 ? "ok" : "not ok", " 2\n"; print $bytes->length("\x00\x00") == 2 && $euc ->length("\x00\x00") == 2 && $eucjp->length("\x00\x00") == 2 && $sjis ->length("\x00\x00") == 2 && $utf8 ->length("\x00\x00") == 2 && $u16be->length("\x00\x00") == 1 && $u16le->length("\x00\x00") == 1 && $u16be->length("\x00\x00\x00\x00") == 2 && $u16le->length("\x00\x00\x00\x00") == 2 && $u32be->length("\x00\x00\x00\x00") == 1 && $u32le->length("\x00\x00\x00\x00") == 1 ? "ok" : "not ok", " 3\n"; print $sjis ->length("\x81\x40\xAD\x40") == 3 && $sjis ->length("\xDF\xA1\xAD\xAE") == 4 && $euc ->length("\xDF\xA1\xAD\xAE") == 2 && $euc ->length("\xA1\xA1\x20\xBD\xBE") == 3 && $eucjp->length("\xA1\xA1\x20\xBD\xBE") == 3 && $eucjp->length("\x8F\xA1\xA1\x20\x8F\xBD\xBE") == 3 && $eucjp->length("\x8E\xA1\x20\x8F\xBD\xBE") == 3 ? "ok" : "not ok", " 4\n"; print $utf8 ->length("\xC2\xA0\xEF\xBD\xBF\x60") == 3 && $utf8 ->length("\x41\xE2\x89\xA2\xCE\x91\x2E") == 4 && $utf8 ->length("\xED\x95\x9C\xEA\xB5\xAD\xEC\x96\xB4") == 3 && $utf8 ->length("\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E") == 3 ? "ok" : "not ok", " 5\n"; print $u16be->length("\xD8\x08\xDF\x45\x00\x3D\x00\x52\x00\x61") == 4 && $u16le->length("\x08\xD8\x45\xDF\x3D\x00\x52\x00\x61\x00") == 4 && $u16be->length("\x08\xD8\x45\xDF\x3D\x00\x52\x00\x61\x00") == 5 && $u16le->length("\xD8\x08\xDF\x45\x00\x3D\x00\x52\x00\x61") == 5 ? "ok" : "not ok", " 6\n"; if ($] < 5.008) { print 1 ? "ok" : "not ok", " 7\n"; print 1 ? "ok" : "not ok", " 8\n"; } else { $uni = String::Multibyte->new('Unicode',1); $bytes = String::Multibyte->new('Bytes',1); print 0 == $uni->length("") && 3 == $uni->length("abc") && 5 == $uni->length(pack 'U*', 0xFF71,0xFF72,0xFF73,0xFF74,0xFF75) && 4 == $uni->length(pack 'U*', 0x3042,0x304B,0x3055,0x305F) && 9 == $uni->length('AIUEO'. pack 'U*', 0x65E5, 0x672C,0x6F22,0x5B57) ? "ok" : "not ok", " 7\n"; print 0 == $bytes->length("") && 3 == $bytes->length("abc") && 15 == $bytes->length(pack 'U*', 0xFF71,0xFF72,0xFF73,0xFF74,0xFF75) && 12 == $bytes->length(pack 'U*', 0x3042,0x304B,0x3055,0x305F) && 17 == $bytes->length('AIUEO'. pack 'U*', 0x65E5, 0x672C,0x6F22,0x5B57) ? "ok" : "not ok", " 8\n"; } # see perlfaq6 $martian = String::Multibyte->new({ charset => "martian", regexp => '[A-Z][A-Z]|[^A-Z]', },1); print $martian->length("AAxBGy") == 4 && $martian->length("") == 0 && $martian->length("zzz") == 3 && $martian->length("ZZZZ") == 2 ? "ok" : "not ok", " 9\n"; 1; __END__