5 use Benchmark qw(:all);
7 my $Count = shift @ARGV;
9 my @sizes = @ARGV || (1, 4, 16);
12 for my $i (0x00..0xff){
14 $utf8_seed{BMP} .= ($c =~ /^\p{IsPrint}/o) ? $c : " ";
16 utf8::upgrade($utf8_seed{BMP});
18 for my $i (0x00..0xff){
19 my $c = chr(0x10000+$i);
20 $utf8_seed{HIGH} .= ($c =~ /^\p{IsPrint}/o) ? $c : " ";
22 utf8::upgrade($utf8_seed{HIGH});
27 for my $cp (qw(BMP HIGH)){
28 $S{utf8}{$sz}{$cp} = $utf8_seed{$cp} x $i;
29 $S{utf16}{$sz}{$cp} = encode('UTF-16BE', $S{utf8}{$sz}{$cp});
35 my $count = $Count * int(256/$i);
36 for my $cp (qw(BMP HIGH)){
37 for my $op (qw(encode decode)){
38 my ($meth, $from, $to) = ($op eq 'encode') ?
39 (\&encode, 'utf8', 'utf16') : (\&decode, 'utf16', 'utf8');
41 Encode::Unicode::set_transcoder("xs");
42 $meth->('UTF-16BE', $S{$from}{$sz}{$cp})
44 or die "$op,$from,$to,$sz,$cp";
47 Encode::Unicode::set_transcoder("modern");
48 $meth->('UTF-16BE', $S{$from}{$sz}{$cp})
50 or die "$op,$from,$to,$sz,$cp";
53 Encode::Unicode::set_transcoder("classic");
54 $meth->('UTF-16BE', $S{$from}{$sz}{$cp})
55 eq $S{$to}{$sz}{$cp} or
56 die "$op,$from,$to,$sz,$cp";
58 print "---- $op length=$sz/range=$cp ----\n";
59 my $r = timethese($count,
63 "Classic" => $classic,