X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=bench.pl;h=de2908fb20065d4dbe5704b0ee529f43bb49c029;hb=387178d0981af3f4a3f1568e5a13c25d9a0feac0;hp=2583947546be6557b6d7dd075cd77c4483b5bed0;hpb=540289da94d52714c6f2ffa55dc43787dee69e81;p=urisagit%2FTemplate-Simple.git diff --git a/bench.pl b/bench.pl index 2583947..de2908f 100644 --- a/bench.pl +++ b/bench.pl @@ -4,103 +4,308 @@ use strict ; use warnings ; use Template::Simple ; +use Benchmark qw( timethese cmpthese ) ; use Data::Dumper ; -my $data = generate_data( 3, 6 ) ; +my @dims = @ARGV ? (shift, shift) : ( 3, 5 ) ; + +my $data = generate_data( @dims ) ; #print Dumper $data ; my $tmpl = Template::Simple->new() ; +my $comp = Template::Simple->new() ; -$tmpl->add_templates( { bench => <add_templates( { bench => $template } ) ; +my $rendered = $tmpl->render( 'bench', $data ) ; +$comp->add_templates( { bench => $template } ) ; +$comp->compile( 'bench' ) ; +my $comp_rendered = $comp->render( 'bench', $data ) ; +#print $comp->get_source( 'bench' ) ; -my $rendered = $tmpl->render( 'bench', $data ) ; +my $ok = $$rendered eq $$comp_rendered ; +print "OK comp [$ok]\n" ; + +my $appended = append( $data ) ; +$ok = $$rendered eq $$appended ; +print "OK append [$ok]\n" ; + +#print $$rendered ; +#my $joined = joined( $data ) ; +# print $$rendered ; +# print "----\n" ; +# print $$joined ; +# print $$comp_rendered ; + +cmpthese( shift || -2, + { + render => sub { my $x = $tmpl->render( 'bench', $data ) }, +# joined => sub { my $x = joined( $data ) }, +# concat => sub { my $x = concat( $data ) }, + append => sub { my $x = append( $data ) }, +# compiler => sub { my $x = $comp->compile( 'bench' ) }, + compiled => sub { my $x = $comp->render( 'bench', $data ) }, + } +) ; -$tmpl->compile( 'bench', $data ) ; -print $tmpl->get_source( 'bench' ) ; +exit ; -my $comp_rendered = $tmpl->render( 'bench', $data ) ; +no warnings ; -my $ok = $$rendered eq $$comp_rendered ; +sub joined { -print "OK [$ok]\n" ; +no warnings ; -print $$rendered ; -print $$comp_rendered ; + my( $data ) = @_ ; -exit ; + my $out = do { + my $out ; + my @data = $data ; + while( defined( my $data = shift @data ) ) { + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } + $out .= ref $data ne 'HASH' ? $data : -no warnings ; + join( '', + "Header\nVal 1: " + , + $data->{val_1} + , + "\n" + , + do { + my $data = $data->{nest} ; + my $out ; + my @data = $data ; + while( defined( my $data = shift @data ) ) { -sub rendered { + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } -} + $out .= ref $data ne 'HASH' ? $data : + join( '', + "\n\tLevel: " + , + $data->{level} + , + "\n" ) ; + } + $out ; + } + , + "\n" + , + do { + my $data = $data->{opt} ; + my $out ; -sub map_join { + my @data = $data ; + while( defined( my $data = shift @data ) ) { -} + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } -sub append { + $out .= ref $data ne 'HASH' ? $data : + join( '', + "\n\tOptional Level: " + , + $data->{level} + , + "\n" ) ; + } + $out ; + } + , + "\nVal 2: " + , + $data->{val_2} + , + "\nFooter\n" ) ; + } + $out ; + } ; + return \$out ; } sub concat { +no warnings ; + my( $data ) = @_ ; my $out = do { my $out ; - foreach my $data ( ref $data eq 'ARRAY' ? @{$data} : $data ) { + + my @data = $data ; + while( defined( my $data = shift @data ) ) { + + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } $out .= ref $data ne 'HASH' ? $data : - "text1\n" + "Header\nVal 1: " + . + $data->{val_1} + . + "\n" . do { my $data = $data->{nest} ; - my $out ; - foreach my $data ( ref $data eq 'ARRAY' ? @{$data} : $data ) { + + my @data = $data ; + while( defined( my $data = shift @data ) ) { + + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } $out .= ref $data ne 'HASH' ? $data : - "\n\tBAR is " + "\n\tLevel: " . - $data->{bar} + $data->{level} . "\n" ; } + $out ; + } + . + "\n" + . + do { + my $data = $data->{opt} ; + my $out ; + + my @data = $data ; + while( defined( my $data = shift @data ) ) { + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } + $out .= ref $data ne 'HASH' ? $data : + "\n\tOptional Level: " + . + $data->{level} + . + "\n" ; + } $out ; } . - "\n" ; + "\nVal 2: " + . + $data->{val_2} + . + "\nFooter\n" ; } + $out ; } ; return \$out ; } +sub append { + my( $data ) = @_ ; + + my $out ; + + my @data = $data ; + while( defined( my $data = shift @data ) ) { + + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } + + + $out .= ref $data ne 'HASH' ? $data : + "Header\nVal 1: " + . + $data->{val_1} + . + "\n" ; + + my @data = $data->{nest} ; + while( defined( my $data = shift @data ) ) { + + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } + + + $out .= ref $data ne 'HASH' ? $data : + "\n\tLevel: " + . + $data->{level} + . + "\n" ; + + } + + $out .= ref $data ne 'HASH' ? $data : + "\n" ; + + my @data = $data->{opt} ; + while( defined( my $data = shift @data ) ) { + + if ( ref $data eq 'ARRAY' ) { + push @data, @{$data} ; + next ; + } + + + $out .= ref $data ne 'HASH' ? $data : + "\n\tOptional Level: " + . + $data->{level} + . + "\n" ; + + } + + $out .= ref $data ne 'HASH' ? $data : + "\nVal 2: " + . + $data->{val_2} + . + "\nFooter\n" ; + + } + + return \$out ; +} sub generate_data {