+ 2.5 +-------------------------------------------------+ | + + + + + + + + + | | | | | | B | | | | B | 2 |-+ +-| | B | | B | | | | B | | | | B | 1.5 |-+ B +-| | | | B | | | | B | | | | B | | B | 1 |-+ +-| | B | | | | B | | B A | | A A | | B A A | 0.5 |-+ A A +-| | B A A | | B A | | A A | | B A A | | B A A | | A A + + + + + + + + | 0 +-------------------------------------------------+ 0 2 4 6 8 10 12 14 16 18 20 use strict; use warnings; use feature 'say'; use Data::Dump 'dd'; use Time::HiRes 'time'; use String::Eertree; use lib '.'; use Eertree 'ee'; 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 => 5; STDOUT-> autoflush( 1 ); sub get_sample { my $n = shift; my $str = 'amanaplanacanalpanama'; my $s = ''; for ( 1 .. $n * 1000 ) { substr $s, rand( length $s ), 0, $str } return $s } my ( @xdata, @ydata1, @ydata2, @datasets ); for my $n ( 1 .. 20) { print "$n "; my $s = get_sample( $n ); push @xdata, $n; { my $t = timeit REPEATS, sub { ee( $s, 1 )}; my $y = $t-> [ 1 ] / $t-> [ -1 ]; push @ydata1, $y; } { my $t = timeit REPEATS, sub { String::Eertree-> new( string => $s )}; my $y = $t-> [ 1 ] / $t-> [ -1 ]; push @ydata2, $y; } } print "\n\n"; push @datasets, Chart::Gnuplot::DataSet-> new( xdata => \@xdata, ydata => \@ydata1, style => 'points', ), Chart::Gnuplot::DataSet-> new( xdata => \@xdata, ydata => \@ydata2, style => 'points', ); my $chart = Chart::Gnuplot-> new( gnuplot => $GP, terminal => 'dumb size 60, 40', ); $chart-> plot2d( @datasets );