The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

BEGIN { $| = 1; print "1..13\n"; }
END {print "not ok 1\n" unless $loaded;}
use String::Multibyte;
$^W = 1;
$loaded = 1;
print "ok 1\n";

$mb = String::Multibyte->new({
	charset => 'sjis_grapheme',
	regexp => '[\xB3\xB6-\xC4]\xDE|[\xCA-\xCE][\xDE\xDF]|' .
	    '[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]',
    }, 1);

$NG = 0;
for ("Š¿ŽšƒeƒXƒg", "abc", "±²³´µ", "Êß°Ù=Perl",
	"\001\002\003\000\n", "", " ", '@') {
    $NG++ unless $mb->islegal($_);
}
print !$NG ? "ok" : "not ok", " 2\n";

for ("‚»‚ê‚à‚»‚¤‚¾\xFF\xFF", "‚Ç‚¤‚É‚à‚±‚¤‚É‚à\x81\x39",
	"\x91\x00", "‚±‚ê‚Í\xFF‚Ç‚¤‚©‚È") {
    $NG++ unless ! $mb->islegal($_);
}
print !$NG ? "ok" : "not ok", " 3\n";

print $mb->islegal("‚ ", "P", "", "¶Ý¼Þ test")
    && ! $mb->islegal("“ú–{","‚³kanji","\xA0","PERL")
  ? "ok" : "not ok", " 4\n";

print 0 eq $mb->length("")
  &&  3 eq $mb->length("abc")
  &&  4 eq $mb->length("abc\n")
  &&  5 eq $mb->length("±²³´µ")
  &&  3 eq $mb->length("Êß°Ù")
  &&  6 eq $mb->length("¶Þ·Þ¸Þ¹ÞºÞ³Þ")
  && 10 eq $mb->length("‚ ‚©‚³‚½‚È‚Í‚Ü‚â‚ç‚í")
  && 14 eq $mb->length("‚ ‚©‚³‚½‚È\n\n‚Í‚Ü‚â‚ç‚í\n\n")
  &&  9 eq $mb->length('AIUEO“ú–{Š¿Žš')
  ? "ok" : "not ok", " 5\n";

$ref = 'ŽšŠ¿–{“úµ´³²±OEUIAoeuia‚¨‚¦‚¤‚¢‚ ';
$str = '‚ ‚¢‚¤‚¦‚¨aiueoAIUEO±²³´µ“ú–{Š¿Žš';

print $ref eq $mb->strrev($str)
  ? "ok" : "not ok", " 6\n";

$ref = 'Ê߰قðŽg‚Á‚ı¿ËÞϼ®³';
$str = '³®¼ÏËÞ¿±‚Ä‚ÁŽg‚ðÙ°Êß';

print $ref eq $mb->strrev($str)
  ? "ok" : "not ok", " 7\n";

print $mb->strspn ("XZ\0Z\0Y", "\0X\0YZ") == 6
   && $mb->strcspn("Perl‚Í–Ê”’‚¢B", "XY\0r") == 2
   && $mb->strspn ("+0.12345*12", "+-.0123456789") == 8
   && $mb->strcspn("Perl‚Í–Ê”’‚¢B", "ÔÂ‰©”’•") == 6
   && $mb->strspn ("", "123") == 0
   && $mb->strcspn("", "123") == 0
   && $mb->strspn ("‚ ‚¢‚¤‚¦‚¨", "") == 0
   && $mb->strcspn("‚ ‚¢‚¤‚¦‚¨", "") == 5
   && $mb->strspn ("ÊßÊßÊÍßÎß", "ÊßËßÌßÍßÎß") == 2
   && $mb->strcspn("¹»ÉºÞÊÝÊ", "¶Þ·Þ¸Þ¹ÞºÞ") == 3
   && $mb->strspn ("ÊßÊßÊÍßÎß", "ÊËÌÍÎ") == 0
   && $mb->strcspn("ÊßÊßÊÍßÎß", "ÊËÌÍÎ") == 2
   && $mb->strspn ("¹»ÉºÞÊÝÊ", "¶·¸¹º") == 1
   && $mb->strcspn("¹»ÉºÞÊÝÊ", "¶·¸¹º") == 0
   && $mb->strspn ("", "") == 0
   && $mb->strcspn("", "") == 0
 ? "ok" : "not ok", " 8\n";

$str = "‚È‚ñ‚Æ‚¢‚¨‚¤‚©";
print 3 eq $mb->strtr(\$str,"‚ ‚¢‚¤‚¦‚¨", "ƒAƒCƒEƒGƒI")
    && $str eq "‚È‚ñ‚ƃCƒIƒE‚©"
    ? "ok" : "not ok", " 9\n";

$digit_tr = $mb->trclosure(
    "1234567890-", "ˆê“ñŽOŽlŒÜ˜ZŽµ”ª‹ãZ|");

$frstr1 = "TELF0124-45-6789\n";
$tostr1 = "TELFZˆê“ñŽl|ŽlŒÜ|˜ZŽµ”ª‹ã\n";
$frstr2 = "FAXF0124-51-5368\n";
$tostr2 = "FAXFZˆê“ñŽl|ŒÜˆê|ŒÜŽO˜Z”ª\n";

$restr1 = &$digit_tr($frstr1);
$restr2 = &$digit_tr($frstr2);

print $tostr1 eq $restr1 && $tostr2 eq $restr2
    ? "ok" : "not ok", " 10\n";

print $mb->index("", "") == 0
   && $mb->index("", "a") == -1
   && $mb->index(" ", "") == 0
   && $mb->index(" ", "", 1) == 1
   && $mb->index("", " ", 1) == -1
   && $mb->index(" ", "a", -1) == -1
   && $mb->index("\x81\x81\x40\x81\x40", "\x81\x40") == 2
   && $mb->index("´Ä¤´ÄÞ", "´ÄÞ") == 3
   && $mb->index("´Ä¤´Ä", "´ÄÞ") == -1
   && $mb->index("´Ä¤´ÄÞ", "´Ä") == 0
   && $mb->index("´ÄÞ¤´Ä", "´Ä") == 3
   && $mb->index("ŶÀޤŶÀ", "ŶÀ") == 4
   && $mb->index("ŶÀޤŶÀ", "ŶÀÞ") == 0
    ? "ok" : "not ok", " 11\n";

print $mb->rindex("", "") == 0
   && $mb->rindex("", "a") == -1
   && $mb->rindex(" ", "") == 1
   && $mb->rindex(" ", "", 1) == 1
   && $mb->rindex("", " ", 1) == -1
   && $mb->rindex(" ", "a", -1) == -1
   && $mb->rindex("\x81\x81\x40\x81\x40", "\x81\x40") == 2
   && $mb->rindex("´Ä¤´ÄÞ", "´ÄÞ") == 3
   && $mb->rindex("´Ä¤´Ä", "´ÄÞ") == -1
   && $mb->rindex("´Ä¤´ÄÞ", "´Ä") == 0
   && $mb->rindex("´ÄÞ¤´Ä", "´Ä") == 3
   && $mb->rindex("ŶÀޤŶÀ", "ŶÀ") == 4
   && $mb->rindex("ŶÀޤŶÀ", "ŶÀÞ") == 0
    ? "ok" : "not ok", " 12\n";

print "¶Þ¶Þ¶Þ¶Þ¶Þ:¶Þ¶Þ¶Þ¶Þ:¶Þ¶Þ¶Þ" eq
	join(':', $mb->strsplit("¶", "¶Þ¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ"))
   && "¶Þ¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ" eq
	join(':', $mb->strsplit("¶", "¶Þ¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ", 1))
   && "¶Þ¶Þ¶Þ¶Þ¶Þ:¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ" eq
	join(':', $mb->strsplit("¶", "¶Þ¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ", 2))
   && "¶Þ¶Þ¶Þ¶Þ¶Þ:¶Þ¶Þ¶Þ¶Þ:¶Þ¶Þ¶Þ" eq
	join(':', $mb->strsplit("¶", "¶Þ¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ", 3))
   && "¶Þ¶Þ¶Þ:¶Þ¶Þ:¶Þ¶Þ¶Þ" eq
	join(':', $mb->strsplit("¶Þ¶Þ¶", "¶Þ¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶Þ"))
   && "¶Þ¶Þ¶Þ::¶Þ:¶Þ¶Þ" eq
	join(':', $mb->strsplit("¶Þ¶Þ¶", "¶Þ¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶¶Þ¶Þ¶Þ¶¶Þ¶Þ"))
   && "¶Þ¶Þ:¶Þ¶Þ¶:¶Þ¶Þ" eq
	join(':', $mb->strsplit("¶Þ¶Þ¶Þ¶", "¶Þ¶Þ¶Þ¶Þ¶Þ¶¶Þ¶Þ¶¶Þ¶Þ¶Þ¶¶Þ¶Þ"))
    ? "ok" : "not ok", " 13\n";

1;
__END__