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

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

sub asc2str ($$) {
   my($cs, $str) = @_;
   my $tmp =  {
      UTF16LE => 'v',   UTF32LE => 'V',
      UTF16BE => 'n',   UTF32BE => 'N',
   }->{$cs};
   $tmp and $str =~ s/([\x00-\xFF])/pack $tmp, ord $1/ge;
   return $str;
}
sub str2asc ($$) {
   my($cs, $str) = @_;
   my $re = {
      UTF16LE => '([\0-\xFF])\0',  UTF32LE => '([\0-\xFF])\0\0\0',
      UTF16BE => '\0([\0-\xFF])',  UTF32BE => '\0\0\0([\0-\xFF])',
   }->{$cs};
   $re and $str =~ s/$re/$1/g;
   return $str;
}

#####

for $cs (qw/Bytes EUC EUC_JP ShiftJIS
	UTF8 UTF16BE UTF16LE UTF32BE UTF32LE Unicode/) {
    print("ok ", ++$loaded, "\n"), next
	if $cs eq 'Unicode' && $] < 5.008;
    $mb = String::Multibyte->new($cs,1);

    $str = asc2str($cs, "hotchpotch");
    $ran = asc2str($cs, "a-z");

    %h = $mb->strtr($str, $ran, '', 'h');

    print "c-2;h-3;o-2;p-1;t-2;" eq join('', map {
	my $s = str2asc($cs, $_); "$s-$h{$_};"
    } sort keys %h) ? "ok" : "not ok", " ", ++$loaded, "\n";
}

# see perlfaq6
$martian  = String::Multibyte->new({
	charset => "martian",
	regexp => '[A-Z][A-Z]|[^A-Z]',
    },1);

%hash = $martian->strtr("PElafSVfdQEdFGcRAaa", "FGaQA", '', 'h');

print 2 == keys %hash
  && $hash{FG} == 1
  && $hash{a} == 3
  ? "ok" : "not ok", " ", ++$loaded, "\n";

1;
__END__