Compress-LZ4

 view release on metacpan or  search on metacpan

ex/benchmark.pl  view on Meta::CPAN

#!/usr/bin/env perl
use strict;
use warnings;

use Benchmark qw(timethese);
use Getopt::Long qw(GetOptions :config no_ignore_case);
use List::Util qw(max);

use Compress::Bzip2  ();
use Compress::LZ4    ();
use Compress::LZF    ();
use Compress::Snappy ();
use Compress::Zlib   ();

my %opts = (
    iterations => -1,
    size       => 10,  # kB
);
GetOptions(\%opts, 'iterations|i=i', 'size|s=f',);

my $data = join '', ('A'..'Z', 'a'..'z', 0..9, qw(_ .)) x (16 * $opts{size});

my %compress = (
    'Compress::Bzip2::compress'  => sub { Compress::Bzip2::compress($data) },
    'Compress::LZ4::compress'    => sub { Compress::LZ4::compress($data) },
    'Compress::LZ4::compress 8'  => sub { Compress::LZ4::compress($data, 8) },
    'Compress::LZ4::compress_hc' => sub { Compress::LZ4::compress_hc($data) },
    'Compress::LZF::compress'    => sub { Compress::LZF::compress($data) },
    'Compress::Snappy::compress' => sub { Compress::Snappy::compress($data) },
    'Compress::Zlib::compress'   => sub { Compress::Zlib::compress($data) },
);

my $bzip2  = Compress::Bzip2::compress($data);
my $lz4    = Compress::LZ4::compress($data);
my $lz4_8  = Compress::LZ4::compress($data, 8);
my $lz4_hc = Compress::LZ4::compress_hc($data);
my $lzf    = Compress::LZF::compress($data);
my $snappy = Compress::Snappy::compress($data);
my $zlib   = Compress::Zlib::compress($data);

my %compression_ratios = (
    'Compress::Bzip2::compress'  => length($bzip2) / length($data),
    'Compress::LZ4::compress'    => length($lz4) / length($data),
    'Compress::LZ4::compress 8'  => length($lz4_8) / length($data),
    'Compress::LZ4::compress_hc' => length($lz4_hc) / length($data),
    'Compress::LZF::compress'    => length($lzf) / length($data),
    'Compress::Snappy::compress' => length($snappy) / length($data),
    'Compress::Zlib::compress'   => length($zlib) / length($data),
);

my %decompress = (
    'Compress::Bzip2::decompress' =>
        sub { Compress::Bzip2::decompress($bzip2) },
    'Compress::LZ4::decompress' => sub { Compress::LZ4::decompress($lz4) },
    'Compress::LZF::decompress' => sub { Compress::LZF::decompress($lzf) },
    'Compress::Snappy::decompress' =>
        sub { Compress::Snappy::decompress($snappy) },
    'Compress::Zlib::uncompress' => sub { Compress::Zlib::uncompress($zlib) },
);

run(\%compress, 'Compressible', 'compression', \%compression_ratios);
print "\n";
run(\%decompress, 'Compressible', 'decompression');
print "\n";

# Make a string of random bytes.
$data = join '', map { chr int rand(256) } (1 .. $opts{size});
# Compress it just to make sure.
$data = Compress::Bzip2::compress($data);

$bzip2  = Compress::Bzip2::compress($data);
$lz4    = Compress::LZ4::compress($data);
$lz4_8  = Compress::LZ4::compress($data, 8);
$lz4_hc = Compress::LZ4::compress_hc($data);
$lzf    = Compress::LZF::compress($data);
$snappy = Compress::Snappy::compress($data);
$zlib   = Compress::Zlib::compress($data);

%compression_ratios = (



( run in 1.455 second using v1.01-cache-2.11-cpan-96521ef73a4 )