This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
POSIX.xs: Never pass NULL to ctermid()
[perl5.git] / cpan / IO-Compress / t / 020isize.t
CommitLineData
25f0751f
PM
1BEGIN {
2 if ($ENV{PERL_CORE}) {
3 chdir 't' if -d 't';
4 @INC = ("../lib", "lib/compress");
5 }
6}
7
8use lib qw(t t/compress);
9use strict ;
10use warnings;
11use bytes;
12
13use Test::More ;
14use CompTestUtils;
15
16BEGIN
17{
18 plan skip_all => "Lengthy Tests Disabled\n" .
3acdfe42 19 "set COMPRESS_ZLIB_RUN_ALL to run this test suite"
25f0751f
PM
20 unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} ;
21
22 # use Test::NoWarnings, if available
23 my $extra = 0 ;
24 $extra = 1
25 if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
26
27 plan tests => 76 + $extra ;
28
29
30 use_ok('Compress::Zlib', 2) ;
31 use_ok('IO::Compress::Gzip', qw($GzipError)) ;
32 use_ok('IO::Uncompress::Gunzip', qw($GunzipError)) ;
33 use_ok('IO::Compress::Gzip::Constants');
34}
35
36my $compressed ;
37my $expected_crc ;
38
39for my $wrap (0 .. 2)
40{
41 for my $offset ( -1 .. 1 )
42 {
43 next if $wrap == 0 && $offset < 0 ;
44
45 title "Wrap $wrap, Offset $offset" ;
46
47 my $size = (GZIP_ISIZE_MAX * $wrap) + $offset ;
48
49 my $expected_isize ;
50 if ($wrap == 0) {
51 $expected_isize = $offset ;
52 }
53 elsif ($wrap == 1 && $offset <= 0) {
54 $expected_isize = GZIP_ISIZE_MAX + $offset ;
55 }
56 elsif ($wrap > 1) {
57 $expected_isize = GZIP_ISIZE_MAX + $offset - 1;
58 }
59 else {
60 $expected_isize = $offset - 1;
61 }
62
63 sub gzipClosure
64 {
65 my $gzip = shift ;
66 my $max = shift ;
67
68 my $index = 0 ;
69 my $inc = 1024 * 5000 ;
70 my $buff = 'x' x $inc ;
71 my $left = $max ;
72
73 return
74 sub {
75
76 if ($max == 0 && $index == 0) {
77 $expected_crc = crc32('') ;
78 ok $gzip->close(), ' IO::Compress::Gzip::close ok X' ;
79 ++ $index ;
80 $_[0] .= $compressed;
81 return length $compressed ;
82 }
83
84 return 0 if $index >= $max ;
85
86 while ( ! length $compressed )
87 {
88 $index += $inc ;
89
90 if ($index <= $max) {
91 $gzip->write($buff) ;
92 #print "Write " . length($buff) . "\n" ;
93 #print "# LEN Compressed " . length($compressed) . "\n" ;
94 $expected_crc = crc32($buff, $expected_crc) ;
95 $left -= $inc ;
96 }
97 else {
98 #print "Write $left\n" ;
99 $gzip->write('x' x $left) ;
100 #print "# LEN Compressed " . length($compressed) . "\n" ;
101 $expected_crc = crc32('x' x $left, $expected_crc) ;
102 ok $gzip->close(), ' IO::Compress::Gzip::close ok ' ;
103 last ;
104 }
105 }
106
107 my $len = length $compressed ;
108 $_[0] .= $compressed ;
109 $compressed = '';
110 #print "# LEN $len\n" if $len <=0 ;
111
112 return $len ;
113 };
114 }
115
116 my $gzip = new IO::Compress::Gzip \$compressed,
117 -Append => 0,
118 -HeaderCRC => 1;
119
120 ok $gzip, " Created IO::Compress::Gzip object";
121
122 my $gunzip = new IO::Uncompress::Gunzip gzipClosure($gzip, $size),
123 -BlockSize => 1024 * 500 ,
124 -Append => 0,
125 -Strict => 1;
126
127 ok $gunzip, " Created IO::Uncompress::Gunzip object";
128
129 my $inflate = *$gunzip->{Inflate} ;
130 my $deflate = *$gzip->{Deflate} ;
131
132 my $status ;
133 my $uncompressed;
134 my $actual = 0 ;
135 while (($status = $gunzip->read($uncompressed)) > 0) {
136 #print "# READ $status\n" ;
137 $actual += $status ;
138 }
139
140 is $status, 0, ' IO::Uncompress::Gunzip::read returned 0'
141 or diag "error status is $status, error is $GunzipError" ;
142
143 ok $gunzip->close(), " IO::Uncompress::Gunzip Closed ok" ;
144
145 is $actual, $size, " Length of Gunzipped data is $size"
146 or diag "Expected $size, got $actual";
147
148 my $gunzip_hdr = $gunzip->getHeaderInfo();
149
150 is $gunzip_hdr->{ISIZE}, $expected_isize,
151 sprintf(" ISIZE is $expected_isize [0x%X]", $expected_isize);
152 is $gunzip_hdr->{CRC32}, $expected_crc,
153 sprintf(" CRC32 is $expected_crc [0x%X]", $expected_crc);
154
155 $expected_crc = 0 ;
156 }
157}
158