##
1.4 +-------------------------------------------------+
| + + + + + + |
| A|
| |
| |
| A|
| A |
| |
| A |
| |
| A |
1.2 |-+ +-|
| A |
| A |
| |
| A |
| |
| A |
| A |
| |
| A |
| |
1 |-+ A +-|
| A |
| |
| A |
| A |
| |
| A |
| A |
| |
| A |
| A |
0.8 |-+ +-|
| A |
| A |
| |
| A |
| A |
| |
| AA |
| |
| A |
0.6 |-+ A +-|
| |
| AA |
| |
| A |
| A |
| A |
| |
| A |
| A |
| |
0.4 |-+ A +-|
| A |
| A |
| AA |
| |
| AA |
| A |
| |
| AAA |
| A |
| A |
0.2 |-+ A +-|
| A |
| A |
| AAA |
| AA |
| A |
| AA |
| AA |
| AAA |
| AAA |
|A + + + + + + |
0 +-------------------------------------------------+
1000 2000 3000 4000 5000 6000 7000 8000
1.2 +-------------------------------------------------+
| + + + + + + |
| |
| |
| |
| A|
| A|
| A |
| A |
| A |
| A |
| A |
| A |
1 |-+ AA +-|
| A |
| A |
| A |
| A |
| A |
| AA |
| |
| AA |
| A |
| A |
| A |
0.8 |-+ A +-|
| A |
| AA |
| |
| A |
| AA |
| A |
| A |
| AA |
| A |
| A |
| A |
| A |
0.6 |-+ A +-|
| A |
| A |
| A |
| A |
| A |
| A |
| AA |
| A |
| A |
| A |
| A |
| A |
0.4 |-+ A +-|
| A |
| A |
| A |
| A |
| A |
| A |
| A |
| A |
| A |
| AA |
| |
0.2 |-+ A +-|
| A |
| A |
|A |
| |
| |
| |
| |
| |
| |
| |
| |
| + + + + + + |
0 +-------------------------------------------------+
1e+07 2e+07 3e+07 4e+07 5e+07 6e+07 7e+07 8e+07
##
##
use strict;
use warnings;
use Benchmark qw/ timeit :hireswallclock /;
use Chart::Gnuplot;
use File::Spec::Functions 'catfile';
use File::Basename 'dirname';
my $GP = catfile dirname( $^X ), '../../c/bin/gnuplot.exe';
die unless -x $GP; # assume Strawberry Perl
use constant REPEATS => 1;
STDOUT-> autoflush( 1 );
{
my ( @x, @y, @datasets );
for my $x ( map 1e6 * $_, 10 .. 80 ) {
print "$x ";
my $s = 'a' x $x;
my $t = timeit REPEATS, sub { $s =~ /(.*)(*F)/ };
my $y = $t-> [ 1 ] / $t-> [ -1 ];
push @x, $x;
push @y, $y;
}
print "\n\n";
push @datasets, Chart::Gnuplot::DataSet-> new(
xdata => \@x,
ydata => \@y,
style => 'points',
);
my $chart = Chart::Gnuplot-> new(
gnuplot => $GP,
terminal => 'dumb size 60, 80',
);
$chart-> plot2d( @datasets );
}
{
my ( @x, @y, @datasets );
for my $x ( map 1e2 * $_, 10 .. 80 ) {
print "$x ";
my $s = 'a' x $x;
my $t = timeit REPEATS, sub { $s =~ /(.(?1)(*F))/ };
my $y = $t-> [ 1 ] / $t-> [ -1 ];
push @x, $x;
push @y, $y;
}
print "\n\n";
push @datasets, Chart::Gnuplot::DataSet-> new(
xdata => \@x,
ydata => \@y,
style => 'points',
);
my $chart = Chart::Gnuplot-> new(
gnuplot => $GP,
terminal => 'dumb size 60, 80',
);
$chart-> plot2d( @datasets );
}