10 use Benchmark qw(:hireswallclock cmpthese);
12 my $opts = parse_options() ;
20 expected => 'hehe bob',
21 simple => 'hehe [% name %]',
22 toolkit => 'hehe [% name %]',
23 teeny => 'hehe [% name %]',
35 title => 'Something new',
40 expected => <<EXPECTED,
42 <head><title>Bobs Blog</title></head>
50 <h3>Something new</h3>
51 <span>3 Days ago</span>
60 <head><title>[% title %]</title></head>
65 <span>[% date %]</span>
74 <head><title>[% title %]</title></head>
77 [% FOREACH post = posts %]
79 <h3>[% post.title %]</h3>
80 <span>[% post.date %]</span>
90 <head><title>[% title %]</title></head>
96 <span>[% date %]</span>
109 template_key => 'simple',
111 return eval { require Template::Simple } ;
114 my( $bench, $info ) = @_ ;
116 my $template = $info->{$bench->{template_key}} ;
117 my $data = $info->{data} ;
118 my $name = $info->{name} ;
120 my $obj = Template::Simple->new(
121 templates => { $name => $template }
125 sub { $obj->render( $name, $data ) } ;
128 my( $bench, $info ) = @_ ;
129 my $result = $bench->{render}->() ;
130 $bench->{result} = ${$result} ;
134 name => 'T::S compiled',
135 template_key => 'simple',
137 return eval { require Template::Simple } ;
140 my( $bench, $info ) = @_ ;
142 my $template = $info->{$bench->{template_key}} ;
143 my $data = $info->{data} ;
144 my $name = $info->{name} ;
146 my $obj = Template::Simple->new(
147 templates => { $name => $template }
149 $obj->compile( $name ) ;
152 sub { $obj->render( $name, $data ) } ;
155 my( $bench, $info ) = @_ ;
156 my $result = $bench->{render}->() ;
157 $bench->{result} = ${$result} ;
166 foreach my $info ( @{$template_info} ) {
170 foreach my $bench ( @{$benches} ) {
172 my $loaded = $bench->{load}->() ;
175 "skipping $bench->{name} as it didn't load\n" ;
179 $bench->{setup}->( $bench, $info ) ;
180 $bench->{verify}->( $bench, $info ) ;
182 if ( $bench->{result} ne $info->{expected} ) {
185 "RESULT [$bench->{result}]\nEXPECTED [$info->{expected}]\n" ;
188 print "'$bench->{name}' rendering of '$info->{name}' is verified\n" ;
191 $compares{ $bench->{name} } = $bench->{render} ;
194 cmpthese( $opts->{iterations}, \%compares ) ;
203 GetOptions( \my %opts,
210 usage( '' ) if $opts{ 'help' } ;
212 $opts{iterations} ||= -2 ;
214 $opts{templaters} = [split /,/, $opts{templaters}]
215 if $opts{templaters} ;
222 my $err_msg = shift || '' ;
224 my $usage = <<'=cut' ;
226 bench_templates.pl - Benchmark Multiple Templaters
230 load_menus.pl [--verify | -v] [--iterations | -i <iter>]
231 [--templaters| -t <templaters>] [--help]
235 --rid | -r <rids> Select the restaurant ID to be fetched.
236 Can be a comma separated list of rids.
237 'ALL' will select all the valid
238 ID's from a source. This is
239 required (unless <source> is set
242 [--file | -f] Load the XML from files. The file is
244 [--help | ?] Print this help text
248 $usage =~ s/^=\w+.*$//mg ;
250 $usage =~ s/\n{2,}/\n\n/g ;
251 $usage =~ s/\A\n+// ;
253 die "$err_msg\n$usage" ;