#!/usr/bin/env perl
use strict;
use warnings;
use Benchmark;
use FindBin;
use TOML::XS;
my $has_toml_tiny = eval { require TOML::Tiny };
print "Including TOML::Tiny …$/" if $has_toml_tiny;
my @t = (
[ small => 5000 ],
[ large => 3 ],
);
for my $t_ar (@t) {
my ($name, $numruns) = @$t_ar;
my $toml_path = "$FindBin::Bin/assets/$name.toml";
my $toml = slurp($toml_path) || do {
require IO::Uncompress::Gunzip;
my $gz = slurp("$toml_path.gz") or die "$toml_path.gz: $!";
my $out;
IO::Uncompress::Gunzip::gunzip(\$gz, \$out);
$out;
};
my %benchmarks = (
toml_xs => sub {
my $struct = TOML::XS::from_toml($toml)->to_struct();
},
);
if ($has_toml_tiny) {
$benchmarks{'toml_tiny'} = sub {
TOML::Tiny::from_toml($toml);
};
}
print "$/$name …$/";
Benchmark::cmpthese(
-1,
\%benchmarks,
);
}
sub slurp {
my $path = shift;
if (open my $rfh, '<', $path) {
return scalar do { local $/; <$rfh> };
}
return undef;
}
1;