Compression-Util

 view release on metacpan or  search on metacpan

t/misc.t  view on Meta::CPAN

    is(bzip2_decompress(bzip2_compress($str)),                   $str);
    is(gzip_decompress(gzip_compress($str)),                     $str);
    is(gzip_decompress(gzip_compress($str, \&lzss_encode_fast)), $str);

    is(zlib_decompress(zlib_compress($str)),                     $str);
    is(zlib_decompress(zlib_compress($str, \&lzss_encode_fast)), $str);

    is_deeply(mrl_decompress_symbolic(mrl_compress_symbolic(\@symbols)),                                       \@symbols);
    is_deeply(mrl_decompress_symbolic(mrl_compress_symbolic(\@symbols, \&create_ac_entry), \&decode_ac_entry), \@symbols);

    is(lzw_decompress(lzw_compress($str)), $str);
    is(lzw_decompress(lzw_compress($str, \&delta_encode),             \&delta_decode),             $str);
    is(lzw_decompress(lzw_compress($str, \&elias_omega_encode),       \&elias_omega_decode),       $str);
    is(lzw_decompress(lzw_compress($str, \&fibonacci_encode),         \&fibonacci_decode),         $str);
    is(lzw_decompress(lzw_compress($str, \&elias_gamma_encode),       \&elias_gamma_decode),       $str);
    is(lzw_decompress(lzw_compress($str, \&create_ac_entry),          \&decode_ac_entry),          $str);
    is(lzw_decompress(lzw_compress($str, \&create_huffman_entry),     \&decode_huffman_entry),     $str);
    is(lzw_decompress(lzw_compress($str, \&create_adaptive_ac_entry), \&decode_adaptive_ac_entry), $str);

    is(lzb_decompress(lzb_compress($str)),                     $str);
    is(lzb_decompress(lzb_compress($str, \&lzss_encode_fast)), $str);

    is(lz4_decompress(lz4_compress($str)),                     $str);
    is(lz4_decompress(lz4_compress($str, \&lzss_encode_fast)), $str);

    is(lz77_decompress(lz77_compress($str)), $str);
    is(lz77_decompress(lz77_compress($str, \&create_ac_entry),          \&decode_ac_entry),          $str);
    is(lz77_decompress(lz77_compress($str, \&create_adaptive_ac_entry), \&decode_adaptive_ac_entry), $str);

    is(lzss_decompress(lzss_compress($str)), $str);
    is(lzss_decompress(lzss_compress($str, \&create_ac_entry),          \&decode_ac_entry),          $str);
    is(lzss_decompress(lzss_compress($str, \&create_adaptive_ac_entry), \&decode_adaptive_ac_entry), $str);

    is(bwt_decompress(bwt_compress($str)), $str);
    is(bwt_decompress(bwt_compress($str, \&create_ac_entry),          \&decode_ac_entry),          $str);
    is(bwt_decompress(bwt_compress($str, \&create_adaptive_ac_entry), \&decode_adaptive_ac_entry), $str);

    is_deeply(bwt_decompress_symbolic(bwt_compress_symbolic(\@symbols)), \@symbols);
    is_deeply(bwt_decompress_symbolic(bwt_compress_symbolic(\@symbols, \&create_ac_entry),          \&decode_ac_entry),          \@symbols);
    is_deeply(bwt_decompress_symbolic(bwt_compress_symbolic(\@symbols, \&create_adaptive_ac_entry), \&decode_adaptive_ac_entry), \@symbols);

    is_deeply(lz77_decompress_symbolic(lz77_compress_symbolic(\@symbols)),                                                         \@symbols);
    is_deeply(lz77_decompress_symbolic(lz77_compress_symbolic(\@symbols, \&create_huffman_entry, \&lzss_encode_fast)),             \@symbols);
    is_deeply(lz77_decompress_symbolic(lz77_compress_symbolic(\@symbols, \&create_ac_entry), \&decode_ac_entry),                   \@symbols);
    is_deeply(lz77_decompress_symbolic(lz77_compress_symbolic(\@symbols, \&create_adaptive_ac_entry), \&decode_adaptive_ac_entry), \@symbols);

    is_deeply(lzss_decompress_symbolic(lzss_compress_symbolic(\@symbols)),                                                         \@symbols);
    is_deeply(lzss_decompress_symbolic(lzss_compress_symbolic(\@symbols, \&create_huffman_entry, \&lzss_encode_fast)),             \@symbols);
    is_deeply(lzss_decompress_symbolic(lzss_compress_symbolic(\@symbols, \&create_ac_entry), \&decode_ac_entry),                   \@symbols);
    is_deeply(lzss_decompress_symbolic(lzss_compress_symbolic(\@symbols, \&create_adaptive_ac_entry), \&decode_adaptive_ac_entry), \@symbols);

    is_deeply(\@symbols, \@copy);    # make sure the array has not been modified in-place
}

##################################

{
    my $bitstring = "101000010000000010000000100000000001001100010000000000000010010100000000000000001";

    my $encoded = binary_vrl_encode($bitstring);
    my $decoded = binary_vrl_decode($encoded);

    is($decoded, $bitstring);
    is($encoded, "1000110101110110111010011110001010101100011110101010000111101110");
}

##############################################

{
    my $str = "INEFICIENCIES";

    {
        my $encoded = mtf_encode(string2symbols($str), [ord('A') .. ord('Z')]);
        my $decoded = mtf_decode($encoded, [ord('A') .. ord('Z')]);

        is(join(' ', @$encoded), '8 13 6 7 3 6 1 3 4 3 3 3 18');
        is($str,                 symbols2string($decoded));
    }

    {
        my ($encoded, $alphabet) = mtf_encode(string2symbols($str));
        my $decoded = mtf_decode($encoded, $alphabet);

        is(join(' ', @$encoded), '3 4 3 4 3 4 1 3 4 3 3 3 5');
        is($str,                 symbols2string($decoded));
    }
}

##############################################

{
    my $int1 = int(rand(1 << 5));
    my $int2 = int(rand(1 << 6));
    my $int3 = int(rand(1e6));

    my $binary = pack('b*', int2bits_lsb($int1, 5) . int2bits_lsb($int2, 6) . int2bits_lsb($int3, 32));
    open my $fh, '<:raw', \$binary;

    my $buffer = '';
    my $dec1   = bits2int_lsb($fh, 5,  \$buffer);
    my $dec2   = bits2int_lsb($fh, 6,  \$buffer);
    my $dec3   = bits2int_lsb($fh, 32, \$buffer);

    is($int1, $dec1);
    is($int2, $dec2);
    is($int3, $dec3);
}

{
    my $int    = int(rand(1e6));
    my $binary = pack('b*', int2bits_lsb($int, 32));
    open my $fh, '<:raw', \$binary;
    my $dec = oct('0b' . scalar reverse read_bits_lsb($fh, 32));
    is($int, $dec);
}

{
    my $int    = int(rand(1e6));
    my $binary = pack('B*', int2bits($int, 32));
    open my $fh, '<:raw', \$binary;
    my $dec = oct('0b' . read_bits($fh, 32));
    is($int, $dec);
}

{
    my $int    = int(rand(1e6));
    my $binary = pack('B*', int2bits($int, 32));
    open my $fh, '<:raw', \$binary;
    my $dec = bits2int($fh, 32, \my $buffer);
    is($int, $dec);
}

{
    my $int    = int(rand(1e6));
    my $binary = pack('b*', int2bits_lsb($int, 32));
    open my $fh, '<:raw', \$binary;
    my $dec = bits2int_lsb($fh, 32, \my $buffer);
    is($int, $dec);
}

{
    my $int    = int(rand(1e6));
    my $binary = pack('N', $int);
    open my $fh, '<:raw', \$binary;
    my $dec = bytes2int($fh, 4);

t/misc.t  view on Meta::CPAN

is(lz4_decompress("\4\"M\30p\@\xAD\17\0\0\x003abc\3\0\6\1\0Paaaa\n\xF6\xFE\xFE0\0\0\0\0"),           "abcabcabcaaaaaaaaaaaaaaa\n");
is(lz4_decompress("\4\"M\30t\@\xBD\17\0\0\x003abc\3\0\5\1\0Paaaaa\a\x8A+\xDD\0\0\0\0\\\13\x81\xFE"), "abcabcabcaaaaaaaaaaaaaaa");
is(lz4_decompress("\4\"M\30t\@\xBD\26\0\0\0\x92TOBEORNOT\t\0\x90TOBEORNOTb\xC52\32\0\0\0\0\x9Dn#B"), "TOBEORNOTTOBEORTOBEORNOT");
is(lz4_decompress("\4\"M\30d\@\xA7\26\0\0\0\x92TOBEORNOT\t\0\x90TOBEORNOT\0\0\0\0\x9Dn#B"),          "TOBEORNOTTOBEORTOBEORNOT");
is(lz4_decompress("\4\"M\30`ps\21\0\0\0\x92TOBEORNOT\t\0\4\17\0\20T\0\0\0\0"),                       "TOBEORNOTTOBEORTOBEORNOT");
is(lz4_decompress("\4\"M\30`\@\x82\26\0\0\0\x92TOBEORNOT\t\0\x90TOBEORNOT\0\0\0\0"),                 "TOBEORNOTTOBEORTOBEORNOT");
is(lz4_decompress("\4\"M\30p\@\xAD\26\0\0\0\x92TOBEORNOT\t\0\x90TOBEORNOTb\xC52\32\0\0\0\0"),        "TOBEORNOTTOBEORTOBEORNOT");

is(
    lz4_decompress("\4\"M\30d\@\xA7\16\0\0\x80Hello, World!\n\0\0\0\0\xE8C\xD0\x9E" . "\4\"M\30d\@\xA7\27\0\0\0\xE5Hello, World! \16\0Prld!\n\0\0\0\0\x9FL\"T"),
    "Hello, World!\nHello, World! Hello, World!\n"
  );

is(
    lz4_decompress(
                       "\4\"M\30`ps\b\0\0\x002abc\3\0\20\n\0\0\0\0"
                     . "\4\"M\30d\@\xA7\17\0\0\x003abc\3\0\6\1\0Paaaa\n\0\0\0\0G}M\xC6"
                     . "\4\"M\30d\@\xA7\26\0\0\0\x92TOBEORNOT\t\0\x90TOBEORNOT\0\0\0\0\x9Dn#B"
                     . "\4\"M\30t\@\xBD\17\0\0\x003abc\3\0\5\1\0Paaaaa\a\x8A+\xDD\0\0\0\0\\\13\x81\xFE"
                  ),
    "abcabcabc\n" . "abcabcabcaaaaaaaaaaaaaaa\n" . "TOBEORNOTTOBEORTOBEORNOT" . "abcabcabcaaaaaaaaaaaaaaa"
  );

###################################################

{

    my $data = do {
        open my $fh, '<:raw', __FILE__;
        local $/;
        <$fh>;
    };

    is(gzip_decompress(gzip_compress($data)),                                             $data);
    is(gzip_decompress(gzip_compress($data, \&lzss_encode_fast)),                         $data);
    is(bzip2_decompress(bzip2_compress($data)),                                           $data);
    is(lzss_decompress(lzss_compress($data)),                                             $data);
    is(lzss_decompress(lzss_compress($data, \&create_huffman_entry, \&lzss_encode_fast)), $data);
    is(lzb_decompress(lzb_compress($data)),                                               $data);
    is(lzb_decompress(lzb_compress($data, \&lzss_encode_fast)),                           $data);
    is(lz4_decompress(lz4_compress($data)),                                               $data);
    is(lz4_decompress(lz4_compress($data, \&lzss_encode_fast)),                           $data);
    is(bwt_decompress(bwt_compress($data)),                                               $data);
    is(mrl_decompress(mrl_compress($data)),                                               $data);
    is(lz77_decompress(lz77_compress($data)),                                             $data);
    is(lz77_decompress(lz77_compress($data, \&create_huffman_entry, \&lzss_encode_fast)), $data);
    is(lzw_decompress(lzw_compress($data)),                                               $data);
}

###################################################

# DEFLATE block type 0

{
    my $chunk        = "foobar hello world";
    my $bt0_header   = deflate_create_block_type_0_header($chunk);
    my $block_type_0 = pack('b*', '00') . pack('b*', $bt0_header) . $chunk;

    open my $fh, '<:raw', \$block_type_0;
    my ($buffer, $search_window) = ('', '');
    my $decoded_chunk = deflate_extract_next_block($fh, \$buffer, \$search_window);

    is($chunk,         $decoded_chunk);
    is($search_window, $chunk);
}

# DEFLATE block type 0

{
    my $chunk        = "hello world 12";
    my $bt0_header   = deflate_create_block_type_0_header($chunk);
    my $block_type_0 = pack('b*', $bt0_header) . $chunk;

    my ($buffer, $search_window) = ('', '');
    open my $fh, '<:raw', \$block_type_0;
    my $decoded_chunk = deflate_extract_block_type_0($fh, \$buffer, \$search_window);

    is($chunk, $decoded_chunk);
}

# DEFLATE block type 1

{
    my $chunk = "foobar hello world";

    my ($literals, $distances, $lengths) = lzss_encode($chunk, min_len => 4, max_len => 258, max_dist => 2**15 - 1);

    my $bitstring    = deflate_create_block_type_1($literals, $distances, $lengths);
    my $block_type_1 = pack('b*', $bitstring);
    open my $fh, '<:raw', \$block_type_1;
    my ($buffer, $search_window) = ('', '');
    my $decoded_chunk = deflate_extract_next_block($fh, \$buffer, \$search_window);

    is($chunk,         $decoded_chunk);
    is($search_window, $chunk);
}

# DEFLATE block type 1

{
    my $chunk = "foobar hello world";

    my ($literals, $distances, $lengths) = lzss_encode($chunk, min_len => 4, max_len => 258, max_dist => 2**15 - 1);

    my $bitstring    = deflate_create_block_type_1($literals, $distances, $lengths);
    my $block_type_1 = pack('b*', $bitstring);
    open my $fh, '<:raw', \$block_type_1;

    my ($buffer, $search_window) = ('', '');
    my $block_type = bits2int_lsb($fh, 2, \$buffer);
    is($block_type, 1);

    my $decoded_chunk = deflate_extract_block_type_1($fh, \$buffer, \$search_window);

    is($chunk,         $decoded_chunk);
    is($search_window, $chunk);
}

# DEFLATE block type 2

{
    my $chunk = "foobar hello world";

    my ($literals, $distances, $lengths) = lzss_encode($chunk, min_len => 4, max_len => 258, max_dist => 2**15 - 1);

    my $bitstring    = deflate_create_block_type_2($literals, $distances, $lengths);
    my $block_type_2 = pack('b*', $bitstring);
    open my $fh, '<:raw', \$block_type_2;
    my ($buffer, $search_window) = ('', '');
    my $decoded_chunk = deflate_extract_next_block($fh, \$buffer, \$search_window);

    is($chunk,         $decoded_chunk);
    is($search_window, $chunk);
}

# DEFLATE block type 2

{
    my $chunk = "foobar hello world";

    my ($literals, $distances, $lengths) = lzss_encode($chunk, min_len => 4, max_len => 258, max_dist => 2**15 - 1);

    my $bitstring    = deflate_create_block_type_2($literals, $distances, $lengths);
    my $block_type_2 = pack('b*', $bitstring);
    open my $fh, '<:raw', \$block_type_2;

    my ($buffer, $search_window) = ('', '');
    my $block_type = bits2int_lsb($fh, 2, \$buffer);
    is($block_type, 2);

    my $decoded_chunk = deflate_extract_block_type_2($fh, \$buffer, \$search_window);
    is($decoded_chunk, $chunk);
    is($search_window, $chunk);
}



( run in 0.724 second using v1.01-cache-2.11-cpan-2398b32b56e )