#!perl -w use Test; use strict; BEGIN { plan tests => 77 }; use Compress::Zlib::Perl; ok(1); # If we made it this far, we're ok. undef $/; ######################### my %files = ( "ArtisticZ" => 820605117, "CopyingZ" => 1302860641, ); chdir 't' if -d 't'; my ($filename, $csum); while (($filename, $csum) = each %files) { my $origname = $filename; $origname =~ s/Z$// or die "Unexpected filename '$filename'"; open FH, $filename or die "Cannot open '$filename': $!"; binmode FH; my $input = ; open FH, $origname or die "Cannot open '$origname': $!"; binmode FH; my $orig = ; my $bufsize; for $bufsize (length ($input), 4096, 16, 1) { my $prefix = "$origname, $bufsize, "; my ($inflater, $status) = Compress::Zlib::Perl::inflateInit(-WindowBits => - MAX_WBITS); ok ($status, Z_OK, "$prefix inflate status"); ok (defined $inflater, 1, "$prefix defined"); ok ($inflater->isa('Compress::Zlib::Perl'), 1, "$prefix isa"); my $output; my $ongoing_crc; my $input_copy = $input . "N"; while (length $input_copy) { my $bit = substr ($input_copy, 0, $bufsize, ""); my $outbit; ($outbit, $status) = $inflater->inflate($bit); die "$prefix inflate status '$status'" unless $status == Z_OK || $status == Z_STREAM_END; die "$prefix inflate undefined" unless defined $outbit; $ongoing_crc = crc32 ($outbit, $ongoing_crc); $output .= $outbit; if ($status == Z_OK) { die "$prefix inflate not all input consumed" if length $bit; } elsif ($status == Z_STREAM_END) { if ($input_copy eq 'N') { ok ($bit, "", "$prefix inflate trailing input bodge"); } else { ok ($bit, "N", "$prefix inflate trailing input remains"); ok ($input_copy, "", "$prefix inflate all input consume"); } last; } } ok ($status, Z_STREAM_END, "$prefix did finish"); ok (length ($output), length ($orig), "$prefix output has correct size"); ok ($output eq $orig); ok ($ongoing_crc, $csum, "$prefix ongoing crc"); my $crc = crc32 $output; ok ($crc, $csum, "$prefix final crc"); } }