4 @INC = ("../lib", "lib/compress");
8 use lib qw(t t/compress);
19 # use Test::NoWarnings, if available
22 if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
36 plan tests => $count + $extra;
38 use_ok('Compress::Raw::Zlib', 2) ;
42 my $Zlib_ver = Compress::Raw::Zlib::zlib_version ;
49 my $len = length $hello ;
51 # Check zlib_version and ZLIB_VERSION are the same.
53 skip "TEST_SKIP_VERSION_CHECK is set", 1
54 if $ENV{TEST_SKIP_VERSION_CHECK};
55 is Compress::Raw::Zlib::zlib_version, ZLIB_VERSION,
56 "ZLIB_VERSION matches Compress::Raw::Zlib::zlib_version" ;
62 eval { new Compress::Raw::Zlib::Deflate(-Level) };
63 like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Expected even number of parameters, got 1") ;
65 eval { new Compress::Raw::Zlib::Inflate(-Level) };
66 like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Expected even number of parameters, got 1");
68 eval { new Compress::Raw::Zlib::Deflate(-Joe => 1) };
69 like $@, mkErr('^Compress::Raw::Zlib::Deflate::new: unknown key value\(s\) Joe');
71 eval { new Compress::Raw::Zlib::Inflate(-Joe => 1) };
72 like $@, mkErr('^Compress::Raw::Zlib::Inflate::new: unknown key value\(s\) Joe');
74 eval { new Compress::Raw::Zlib::Deflate(-Bufsize => 0) };
75 like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified 0");
77 eval { new Compress::Raw::Zlib::Inflate(-Bufsize => 0) };
78 like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified 0");
80 eval { new Compress::Raw::Zlib::Deflate(-Bufsize => -1) };
81 like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Parameter 'Bufsize' must be an unsigned int, got '-1'");
83 eval { new Compress::Raw::Zlib::Inflate(-Bufsize => -1) };
84 like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Parameter 'Bufsize' must be an unsigned int, got '-1'");
86 eval { new Compress::Raw::Zlib::Deflate(-Bufsize => "xxx") };
87 like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Parameter 'Bufsize' must be an unsigned int, got 'xxx'");
89 eval { new Compress::Raw::Zlib::Inflate(-Bufsize => "xxx") };
90 like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Parameter 'Bufsize' must be an unsigned int, got 'xxx'");
92 eval { new Compress::Raw::Zlib::Inflate(-Bufsize => 1, 2) };
93 like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Expected even number of parameters, got 3");
95 eval { new Compress::Raw::Zlib::Deflate(-Bufsize => 1, 2) };
96 like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Expected even number of parameters, got 3");
102 title "deflate/inflate - small buffer";
103 # ==============================
105 my $hello = "I am a HAL 9000 computer" ;
106 my @hello = split('', $hello) ;
107 my ($err, $x, $X, $status);
109 ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1 ), "Create deflate object" );
110 ok $x, "Compress::Raw::Zlib::Deflate ok" ;
111 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
113 ok ! defined $x->msg() ;
114 is $x->total_in(), 0, "total_in() == 0" ;
115 is $x->total_out(), 0, "total_out() == 0" ;
121 $status = $x->deflate($_, $X) ;
122 last unless $status == Z_OK ;
127 cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
129 cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ;
132 ok ! defined $x->msg() ;
133 is $x->total_in(), length $hello, "total_in ok" ;
134 is $x->total_out(), length $Answer, "total_out ok" ;
136 my @Answer = split('', $Answer) ;
139 ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1}) );
140 ok $k, "Compress::Raw::Zlib::Inflate ok" ;
141 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
143 ok ! defined $k->msg(), "No error messages" ;
144 is $k->total_in(), 0, "total_in() == 0" ;
145 is $k->total_out(), 0, "total_out() == 0" ;
151 $status = $k->inflate($_, $Z) ;
153 last if $status == Z_STREAM_END or $status != Z_OK ;
157 cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
158 is $GOT, $hello, "uncompressed data matches ok" ;
159 ok ! defined $k->msg(), "No error messages" ;
160 is $k->total_in(), length $Answer, "total_in ok" ;
161 is $k->total_out(), length $hello , "total_out ok";
167 # deflate/inflate - small buffer with a number
168 # ==============================
172 ok my ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -AppendOutput => 1 ) ;
174 cmp_ok $err, '==', Z_OK ;
179 cmp_ok $x->deflate($hello, $Answer), '==', Z_OK ;
181 cmp_ok $x->flush($Answer), '==', Z_OK ;
183 my @Answer = split('', $Answer) ;
186 ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1, -AppendOutput =>1}) );
188 cmp_ok $err, '==', Z_OK ;
194 $status = $k->inflate($_, $GOT) ;
195 last if $status == Z_STREAM_END or $status != Z_OK ;
199 cmp_ok $status, '==', Z_STREAM_END ;
206 # deflate/inflate options - AppendOutput
207 # ================================
212 my $hello = "I am a HAL 9000 computer" ;
213 my @hello = split('', $hello) ;
215 ok my ($x, $err) = new Compress::Raw::Zlib::Deflate ( {-Bufsize => 1, -AppendOutput =>1} ) ;
217 cmp_ok $err, '==', Z_OK ;
223 $status = $x->deflate($_, $X) ;
224 last unless $status == Z_OK ;
227 cmp_ok $status, '==', Z_OK ;
229 cmp_ok $x->flush($X), '==', Z_OK ;
232 my @Answer = split('', $X) ;
235 ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1, -AppendOutput =>1}));
237 cmp_ok $err, '==', Z_OK ;
242 $status = $k->inflate($_, $Z) ;
243 last if $status == Z_STREAM_END or $status != Z_OK ;
247 cmp_ok $status, '==', Z_STREAM_END ;
254 title "deflate/inflate - larger buffer";
255 # ==============================
257 # generate a long random string
260 { $contents .= chr int rand 255 }
263 ok my ($x, $err) = new Compress::Raw::Zlib::Deflate() ;
265 cmp_ok $err, '==', Z_OK ;
267 my (%X, $Y, %Z, $X, $Z);
268 #cmp_ok $x->deflate($contents, $X{key}), '==', Z_OK ;
269 cmp_ok $x->deflate($contents, $X), '==', Z_OK ;
275 #cmp_ok $x->flush($X{key}), '==', Z_OK ;
277 cmp_ok $x->flush($X), '==', Z_OK ;
285 ok(($k, $err) = new Compress::Raw::Zlib::Inflate() );
287 cmp_ok $err, '==', Z_OK ;
289 #cmp_ok $k->inflate($Y, $Z{key}), '==', Z_STREAM_END ;
290 #ok $contents eq $Z{key} ;
291 cmp_ok $k->inflate($Y, $Z), '==', Z_STREAM_END ;
294 # redo deflate with AppendOutput
296 ok (($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1)) ;
298 cmp_ok $err, '==', Z_OK ;
302 my @bits = split('', $keep) ;
303 foreach my $bit (@bits) {
304 $s = $k->inflate($bit, $out) ;
307 cmp_ok $s, '==', Z_STREAM_END ;
309 ok $contents eq $out ;
316 title "deflate/inflate - preset dictionary";
317 # ===================================
319 my $dictionary = "hello" ;
320 ok my $x = new Compress::Raw::Zlib::Deflate({-Level => Z_BEST_COMPRESSION,
321 -Dictionary => $dictionary}) ;
323 my $dictID = $x->dict_adler() ;
326 cmp_ok $x->deflate($hello, $X), '==', Z_OK;
327 cmp_ok $x->flush($Y), '==', Z_OK;
330 ok my $k = new Compress::Raw::Zlib::Inflate(-Dictionary => $dictionary) ;
332 cmp_ok $k->inflate($X, $Z), '==', Z_STREAM_END;
333 is $k->dict_adler(), $dictID;
338 title 'inflate - check remaining buffer after Z_STREAM_END';
339 # and that ConsumeInput works.
340 # ===================================================
342 for my $consume ( 0 .. 1)
344 ok my $x = new Compress::Raw::Zlib::Deflate(-Level => Z_BEST_COMPRESSION ) ;
347 cmp_ok $x->deflate($hello, $X), '==', Z_OK;
348 cmp_ok $x->flush($Y), '==', Z_OK;
351 ok my $k = new Compress::Raw::Zlib::Inflate( -ConsumeInput => $consume) ;
353 my $first = substr($X, 0, 2) ;
354 my $remember_first = $first ;
355 my $last = substr($X, 2) ;
356 cmp_ok $k->inflate($first, $Z), '==', Z_OK;
361 ok $first eq $remember_first ;
365 $last .= "appendage" ;
366 my $remember_last = $last ;
367 cmp_ok $k->inflate($last, $T), '==', Z_STREAM_END;
370 is $last, "appendage" ;
373 is $last, $remember_last ;
382 title 'Check - MAX_WBITS';
385 my $hello = "Test test test test test";
386 my @hello = split('', $hello) ;
389 new Compress::Raw::Zlib::Deflate ( -Bufsize => 1,
390 -WindowBits => -MAX_WBITS(),
391 -AppendOutput => 1 ) ;
393 cmp_ok $err, '==', Z_OK ;
399 $status = $x->deflate($_, $Answer) ;
400 last unless $status == Z_OK ;
403 cmp_ok $status, '==', Z_OK ;
405 cmp_ok $x->flush($Answer), '==', Z_OK ;
407 my @Answer = split('', $Answer) ;
408 # Undocumented corner -- extra byte needed to get inflate to return
409 # Z_STREAM_END when done.
413 ok(($k, $err) = new Compress::Raw::Zlib::Inflate(
416 -WindowBits => -MAX_WBITS()})) ;
418 cmp_ok $err, '==', Z_OK ;
423 $status = $k->inflate($_, $GOT) ;
424 last if $status == Z_STREAM_END or $status != Z_OK ;
428 cmp_ok $status, '==', Z_STREAM_END ;
437 skip "inflateSync needs zlib 1.2.1 or better, you have $Zlib_ver", 22
438 if ZLIB_VERNUM() < 0x1210 ;
440 # create a deflate stream with flush points
442 my $hello = "I am a HAL 9000 computer" x 2001 ;
443 my $goodbye = "Will I dream?" x 2010;
444 my ($x, $err, $answer, $X, $Z, $status);
448 ok(($x, $err) = new Compress::Raw::Zlib::Deflate(AppendOutput => 1)) ;
450 cmp_ok $err, '==', Z_OK ;
452 cmp_ok $x->deflate($hello, $Answer), '==', Z_OK;
454 # create a flush point
455 cmp_ok $x->flush($Answer, Z_FULL_FLUSH), '==', Z_OK ;
457 my $len1 = length $Answer;
459 cmp_ok $x->deflate($goodbye, $Answer), '==', Z_OK;
461 cmp_ok $x->flush($Answer), '==', Z_OK ;
462 my $len2 = length($Answer) - $len1 ;
464 my ($first, @Answer) = split('', $Answer) ;
467 ok(($k, $err) = new Compress::Raw::Zlib::Inflate()) ;
469 cmp_ok $err, '==', Z_OK ;
471 cmp_ok $k->inflate($first, $Z), '==', Z_OK;
473 # skip to the first flush point.
476 my $byte = shift @Answer;
477 $status = $k->inflateSync($byte) ;
478 last unless $status == Z_DATA_ERROR;
481 cmp_ok $status, '==', Z_OK;
487 $status = $k->inflate($_, $Z) ;
488 $GOT .= $Z if defined $Z ;
489 # print "x $status\n";
490 last if $status == Z_STREAM_END or $status != Z_OK ;
493 cmp_ok $status, '==', Z_DATA_ERROR ;
497 # Check inflateSync leaves good data in buffer
503 ok(($k, $err) = new Compress::Raw::Zlib::Inflate(ConsumeInput => 0)) ;
505 cmp_ok $err, '==', Z_OK ;
507 cmp_ok $k->inflate($initial, $Z), '==', Z_OK;
509 # Skip to the flush point
510 $status = $k->inflateSync($rest);
511 cmp_ok $status, '==', Z_OK
512 or diag "status '$status'\nlength rest is " . length($rest) . "\n" ;
514 is length($rest), $len2, "expected compressed output";
517 cmp_ok $k->inflate($rest, $GOT), '==', Z_DATA_ERROR, "inflate returns Z_DATA_ERROR";
522 title 'deflateParams';
524 my $hello = "I am a HAL 9000 computer" x 2001 ;
525 my $goodbye = "Will I dream?" x 2010;
526 my ($x, $input, $err, $answer, $X, $status, $Answer);
528 ok(($x, $err) = new Compress::Raw::Zlib::Deflate(
530 -Level => Z_DEFAULT_COMPRESSION,
531 -Strategy => Z_DEFAULT_STRATEGY)) ;
533 cmp_ok $err, '==', Z_OK ;
535 ok $x->get_Level() == Z_DEFAULT_COMPRESSION;
536 ok $x->get_Strategy() == Z_DEFAULT_STRATEGY;
538 $status = $x->deflate($hello, $Answer) ;
539 cmp_ok $status, '==', Z_OK ;
543 eval { $x->deflateParams() };
544 like $@, mkErr('^Compress::Raw::Zlib::deflateParams needs Level and\/or Strategy');
546 eval { $x->deflateParams(-Bufsize => 0) };
547 like $@, mkErr('^Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified 0');
549 eval { $x->deflateParams(-Joe => 3) };
550 like $@, mkErr('^Compress::Raw::Zlib::deflateStream::deflateParams: unknown key value\(s\) Joe');
552 is $x->get_Level(), Z_DEFAULT_COMPRESSION;
553 is $x->get_Strategy(), Z_DEFAULT_STRATEGY;
555 # change both Level & Strategy
556 $status = $x->deflateParams(-Level => Z_BEST_SPEED, -Strategy => Z_HUFFMAN_ONLY, -Bufsize => 1234) ;
557 cmp_ok $status, '==', Z_OK ;
559 is $x->get_Level(), Z_BEST_SPEED;
560 is $x->get_Strategy(), Z_HUFFMAN_ONLY;
562 $status = $x->deflate($goodbye, $Answer) ;
563 cmp_ok $status, '==', Z_OK ;
567 $status = $x->deflateParams(-Level => Z_NO_COMPRESSION) ;
568 cmp_ok $status, '==', Z_OK ;
570 is $x->get_Level(), Z_NO_COMPRESSION;
571 is $x->get_Strategy(), Z_HUFFMAN_ONLY;
573 $status = $x->deflate($goodbye, $Answer) ;
574 cmp_ok $status, '==', Z_OK ;
577 # change only Strategy
578 $status = $x->deflateParams(-Strategy => Z_FILTERED) ;
579 cmp_ok $status, '==', Z_OK ;
581 is $x->get_Level(), Z_NO_COMPRESSION;
582 is $x->get_Strategy(), Z_FILTERED;
584 $status = $x->deflate($goodbye, $Answer) ;
585 cmp_ok $status, '==', Z_OK ;
588 cmp_ok $x->flush($Answer), '==', Z_OK ;
591 ok(($k, $err) = new Compress::Raw::Zlib::Inflate()) ;
593 cmp_ok $err, '==', Z_OK ;
596 $status = $k->inflate($Answer, $Z) ;
598 cmp_ok $status, '==', Z_STREAM_END ;
604 title "ConsumeInput and a read-only buffer trapped" ;
606 ok my $k = new Compress::Raw::Zlib::Inflate(-ConsumeInput => 1) ;
609 eval { $k->inflate("abc", $Z) ; };
610 like $@, mkErr("Compress::Raw::Zlib::Inflate::inflate input parameter cannot be read-only when ConsumeInput is specified");
618 title 'test inflate/deflate with a substr';
622 { $contents .= chr int rand 255 }
623 ok my $x = new Compress::Raw::Zlib::Deflate(-AppendOutput => 1) ;
626 my $status = $x->deflate(substr($contents,0), $X);
627 cmp_ok $status, '==', Z_OK ;
629 cmp_ok $x->flush($X), '==', Z_OK ;
631 my $append = "Appended" ;
634 ok my $k = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ;
638 $status = $k->inflate(substr($X, 0), $Z) ;
640 cmp_ok $status, '==', Z_STREAM_END ;
641 #print "status $status X [$X]\n" ;
644 #is length($X), length($append);
646 #is length($X), length($keep);
649 title 'Looping Append test - checks that deRef_l resets the output buffer';
653 my $hello = "I am a HAL 9000 computer" ;
654 my @hello = split('', $hello) ;
655 my ($err, $x, $X, $status);
657 ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1 ) );
659 cmp_ok $err, '==', Z_OK ;
665 $status = $x->deflate($_, $X) ;
666 last unless $status == Z_OK ;
671 cmp_ok $status, '==', Z_OK ;
673 cmp_ok $x->flush($X), '==', Z_OK ;
676 my @Answer = split('', $Answer) ;
679 ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) );
681 cmp_ok $err, '==', Z_OK ;
688 $status = $k->inflate($_, $GOT) ;
689 last if $status == Z_STREAM_END or $status != Z_OK ;
692 cmp_ok $status, '==', Z_STREAM_END ;
699 title 'test inflate input parameter via substr';
701 my $hello = "I am a HAL 9000 computer" ;
706 ok my $x = new Compress::Raw::Zlib::Deflate ( -AppendOutput => 1 );
708 cmp_ok $x->deflate($data, $X), '==', Z_OK ;
710 cmp_ok $x->flush($X), '==', Z_OK ;
712 my $append = "Appended" ;
716 ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1,
717 -ConsumeInput => 1 ) ;
719 cmp_ok $k->inflate(substr($X, 0, -1), $Z), '==', Z_STREAM_END ; ;
726 ok $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1,
727 -ConsumeInput => 0 ) ;
729 cmp_ok $k->inflate(substr($X, 0, -1), $Z), '==', Z_STREAM_END ; ;
730 #cmp_ok $k->inflate(substr($X, 0), $Z), '==', Z_STREAM_END ; ;
739 skip "InflateScan needs zlib 1.2.1 or better, you have $Zlib_ver", 1
740 if ZLIB_VERNUM() < 0x1210 ;
742 # regression - check that resetLastBlockByte can cope with a NULL
744 Compress::Raw::Zlib::InflateScan->new->resetLastBlockByte(undef);
745 ok 1, "resetLastBlockByte(undef) is ok" ;
754 skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 13
755 if ZLIB_VERNUM() < 0x1210 ;
757 my $hello = "I am a HAL 9000 computer" ;
758 my @hello = split('', $hello) ;
759 my ($err, $x, $X, $status);
761 ok( ($x, $err) = new Compress::Raw::Zlib::Deflate (
762 WindowBits => WANT_GZIP ,
764 ), "Create deflate object" );
765 ok $x, "Compress::Raw::Zlib::Deflate ok" ;
766 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
768 $status = $x->deflate($hello, $X) ;
769 cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
771 cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ;
774 ($k, $err) = new Compress::Raw::Zlib::Inflate(
775 WindowBits => WANT_GZIP ,
778 ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ;
779 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
781 $status = $k->inflate($X, $GOT) ;
782 cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
783 is $GOT, $hello, "uncompressed data matches ok" ;
786 ($k, $err) = new Compress::Raw::Zlib::Inflate(
787 WindowBits => WANT_GZIP_OR_ZLIB ,
789 ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ;
790 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
792 $status = $k->inflate($X, $GOT) ;
793 cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
794 is $GOT, $hello, "uncompressed data matches ok" ;
800 title "gzip error mode";
802 # read with no special windowbits setting - this will fail
803 # then read with WANT_GZIP_OR_ZLIB - thi swill work
806 skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12
807 if ZLIB_VERNUM() < 0x1210 ;
809 my $hello = "I am a HAL 9000 computer" ;
810 my ($err, $x, $X, $status);
812 ok( ($x, $err) = new Compress::Raw::Zlib::Deflate (
813 WindowBits => WANT_GZIP ,
815 ), "Create deflate object" );
816 ok $x, "Compress::Raw::Zlib::Deflate ok" ;
817 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
819 $status = $x->deflate($hello, $X) ;
820 cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
822 cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ;
825 ($k, $err) = new Compress::Raw::Zlib::Inflate(
826 WindowBits => MAX_WBITS ,
829 ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ;
830 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
832 $status = $k->inflate($X, $GOT) ;
833 cmp_ok $status, '==', Z_DATA_ERROR, "Got Z_DATA_ERROR" ;
836 ($k, $err) = new Compress::Raw::Zlib::Inflate(
837 WindowBits => WANT_GZIP_OR_ZLIB ,
839 ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ;
840 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
842 $status = $k->inflate($X, $GOT) ;
843 cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
844 is $GOT, $hello, "uncompressed data matches ok" ;
849 title "gzip/zlib error mode";
851 # read with no WANT_GZIP windowbits setting - this will fail
852 # then read with WANT_GZIP_OR_ZLIB - thi swill work
855 skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12
856 if ZLIB_VERNUM() < 0x1210 ;
858 my $hello = "I am a HAL 9000 computer" ;
859 my ($err, $x, $X, $status);
861 ok( ($x, $err) = new Compress::Raw::Zlib::Deflate (
863 ), "Create deflate object" );
864 ok $x, "Compress::Raw::Zlib::Deflate ok" ;
865 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
867 $status = $x->deflate($hello, $X) ;
868 cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
870 cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ;
873 ($k, $err) = new Compress::Raw::Zlib::Inflate(
874 WindowBits => WANT_GZIP ,
877 ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ;
878 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
880 $status = $k->inflate($X, $GOT) ;
881 cmp_ok $status, '==', Z_DATA_ERROR, "Got Z_DATA_ERROR" ;
884 ($k, $err) = new Compress::Raw::Zlib::Inflate(
885 WindowBits => WANT_GZIP_OR_ZLIB ,
887 ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ;
888 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
890 $status = $k->inflate($X, $GOT) ;
891 cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
892 is $GOT, $hello, "uncompressed data matches ok" ;
896 title "zlibCompileFlags";
898 my $flags = Compress::Raw::Zlib::zlibCompileFlags;
900 if (ZLIB_VERNUM() < 0x1210)
902 is $flags, 0, "zlibCompileFlags == 0 if < 1.2.1";
906 ok $flags, "zlibCompileFlags != 0 if < 1.2.1";
911 title "repeated calls to flush";
913 my $hello = "I am a HAL 9000 computer" ;
914 my ($err, $x, $X, $status);
916 ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" );
917 isa_ok $x, "Compress::Raw::Zlib::deflateStream" ;
918 cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
920 $status = $x->deflate($hello, $X) ;
921 cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
923 cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ;
924 cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ;
925 is $X, "", "no output from second flush";
930 title 'Looping Append test with substr output - substr the end of the string';
934 my $hello = "I am a HAL 9000 computer" ;
935 my @hello = split('', $hello) ;
936 my ($err, $x, $X, $status);
938 ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1,
939 -AppendOutput => 1 ) );
941 cmp_ok $err, '==', Z_OK ;
947 $status = $x->deflate($_, substr($Answer, length($Answer))) ;
948 last unless $status == Z_OK ;
952 cmp_ok $status, '==', Z_OK ;
954 cmp_ok $x->flush(substr($Answer, length($Answer))), '==', Z_OK ;
956 #cmp_ok length $Answer, ">", 0 ;
958 my @Answer = split('', $Answer) ;
962 ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) );
964 cmp_ok $err, '==', Z_OK ;
971 $status = $k->inflate($_, substr($GOT, length($GOT))) ;
972 last if $status == Z_STREAM_END or $status != Z_OK ;
975 cmp_ok $status, '==', Z_STREAM_END ;
980 title 'Looping Append test with substr output - substr the complete string';
984 my $hello = "I am a HAL 9000 computer" ;
985 my @hello = split('', $hello) ;
986 my ($err, $x, $X, $status);
988 ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1,
989 -AppendOutput => 1 ) );
991 cmp_ok $err, '==', Z_OK ;
997 $status = $x->deflate($_, substr($Answer, 0)) ;
998 last unless $status == Z_OK ;
1002 cmp_ok $status, '==', Z_OK ;
1004 cmp_ok $x->flush(substr($Answer, 0)), '==', Z_OK ;
1006 my @Answer = split('', $Answer) ;
1009 ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) );
1011 cmp_ok $err, '==', Z_OK ;
1018 $status = $k->inflate($_, substr($GOT, 0)) ;
1019 last if $status == Z_STREAM_END or $status != Z_OK ;
1022 cmp_ok $status, '==', Z_STREAM_END ;