use strict; use warnings; use Test::More tests => 1; pass(); # Just in case somebody wants to run this through some TAP thingy use Math::SimpleHisto::XS; use Benchmark qw(:hireswallclock timethis cmpthese); my @histos; my $data = [map 123+rand(890-123), 0..19999]; my $weight = [map 123+rand(890-123), 0..19999]; my $hist_small = Math::SimpleHisto::XS->new(min => 123, max => 890, nbins => 10); $hist_small->fill($data, $weight); my $hist_med = Math::SimpleHisto::XS->new(min => 123, max => 890, nbins => 100); $hist_med->fill($data, $weight); my $hist_large = Math::SimpleHisto::XS->new(min => 123, max => 890, nbins => 10000); $hist_large->fill($data, $weight); if (defined $Math::SimpleHisto::XS::JSON_Implementation and eval "require YAML::Tiny; 1;") { diag($Math::SimpleHisto::XS::JSON_Implementation); foreach my $hist_test ( ['small', $hist_small], ['med', $hist_med], ['large', $hist_large], ) { my ($name, $hist) = @$hist_test; my $dump_simple = $hist->dump('simple'); my $dump_json = $hist->dump('json'); my $dump_yaml = $hist->dump('yaml'); my $dump_native_pack = $hist->dump('native_pack'); printf( "Dump sizes:\n" . (" %11s: %20u\n" x 4), 'simple', length($dump_simple), 'JSON', length($dump_json), 'YAML', length($dump_yaml), 'native_pack', length($dump_native_pack) ); my %dump_tests; my %undump_tests; my %dumpundump_tests; foreach my $type (qw(simple json yaml native_pack)) { my $dumpcode = qq{my \$dump_$type = \$hist->dump('$type');}; my $dumpsub = eval "sub {$dumpcode}"; my $undumpcode = qq{my \$obj = Math::SimpleHisto::XS->new_from_dump('$type', \$dump_$type);}; my $undumpsub = eval "sub {$undumpcode}"; my $dump_undumpsub = eval "sub {$dumpcode; $undumpcode}"; $dump_tests{"dump_${name}_$type"} = $dumpsub; $undump_tests{"undump_${name}_$type"} = $undumpsub; $dumpundump_tests{"dump_undump_${name}_$type"} = $dump_undumpsub; } cmpthese(-1, \%dump_tests); print "\n"; cmpthese(-1, \%undump_tests); print "\n"; cmpthese(-1, \%dumpundump_tests); print "\n"; } # foreach hist_test } # if have JSON and YAML