summaryrefslogtreecommitdiff
path: root/cpan/Compress-Raw-Bzip2/t/01bzip2.t
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2009-10-01 14:31:17 +0100
committerNicholas Clark <nick@ccl4.org>2009-10-01 14:31:17 +0100
commitd371e02a597f759bb8188a51ce0eaac8bb8ce869 (patch)
tree7ff7023aab4b51071c43f1de842dfd8510d68498 /cpan/Compress-Raw-Bzip2/t/01bzip2.t
parente9dc4a2bf6ff50c27a5bd2e83ff4755923a33e7a (diff)
downloadperl-d371e02a597f759bb8188a51ce0eaac8bb8ce869.tar.gz
Move Compress::Raw::Bzip2 from ext/ to cpan/
Diffstat (limited to 'cpan/Compress-Raw-Bzip2/t/01bzip2.t')
-rw-r--r--cpan/Compress-Raw-Bzip2/t/01bzip2.t567
1 files changed, 567 insertions, 0 deletions
diff --git a/cpan/Compress-Raw-Bzip2/t/01bzip2.t b/cpan/Compress-Raw-Bzip2/t/01bzip2.t
new file mode 100644
index 0000000000..008c0b3492
--- /dev/null
+++ b/cpan/Compress-Raw-Bzip2/t/01bzip2.t
@@ -0,0 +1,567 @@
+BEGIN {
+ if ($ENV{PERL_CORE}) {
+ chdir 't' if -d 't';
+ #@INC = ("../lib", "lib/compress");
+ @INC = ("../lib");
+ }
+}
+
+use lib 't';
+use strict;
+use warnings;
+use bytes;
+
+use Test::More ;
+#use CompTestUtils;
+
+
+BEGIN
+{
+ # use Test::NoWarnings, if available
+ my $extra = 0 ;
+ $extra = 1
+ if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
+
+
+ my $count = 0 ;
+ if ($] < 5.005) {
+ $count = 103 ;
+ }
+ elsif ($] >= 5.006) {
+ $count = 157 ;
+ }
+ else {
+ $count = 115 ;
+ }
+
+ plan tests => $count + $extra;
+
+ use_ok('Compress::Raw::Bzip2') ;
+}
+
+sub title
+{
+ #diag "" ;
+ ok 1, $_[0] ;
+ #diag "" ;
+}
+
+sub mkErr
+{
+ my $string = shift ;
+ my ($dummy, $file, $line) = caller ;
+ -- $line ;
+
+ $string = quotemeta $string;
+ $file = quotemeta($file);
+
+ #return "/$string\\s+at $file line $line/" if $] >= 5.006 ;
+ return "/$string\\s+at /" ;
+}
+
+sub mkEvalErr
+{
+ my $string = shift ;
+
+ return "/$string\\s+at \\(eval /" if $] > 5.006 ;
+ return "/$string\\s+at /" ;
+}
+
+
+
+my $hello = <<EOM ;
+hello world
+this is a test
+EOM
+
+my $len = length $hello ;
+
+{
+ title "Error Cases" ;
+
+ eval { new Compress::Raw::Bzip2(1,2,3,4,5,6) };
+ like $@, mkErr "Usage: Compress::Raw::Bzip2::new(className, appendOut=1, blockSize100k=1, workfactor=0, verbosity=0)";
+
+}
+
+
+{
+
+ title "bzdeflate/bzinflate - small buffer";
+ # ==============================
+
+ my $hello = "I am a HAL 9000 computer" ;
+ my @hello = split('', $hello) ;
+ my ($err, $x, $X, $status);
+
+ ok( ($x, $err) = new Compress::Raw::Bzip2(0), "Create bzdeflate object" );
+ ok $x, "Compress::Raw::Bzip2 ok" ;
+ cmp_ok $err, '==', BZ_OK, "status is BZ_OK" ;
+
+ is $x->uncompressedBytes(), 0, "uncompressedBytes() == 0" ;
+ is $x->compressedBytes(), 0, "compressedBytes() == 0" ;
+
+ $X = "" ;
+ my $Answer = '';
+ foreach (@hello)
+ {
+ $status = $x->bzdeflate($_, $X) ;
+ last unless $status == BZ_RUN_OK ;
+
+ $Answer .= $X ;
+ }
+
+ cmp_ok $status, '==', BZ_RUN_OK, "bzdeflate returned BZ_RUN_OK" ;
+
+ cmp_ok $x->bzflush($X), '==', BZ_RUN_OK, "bzflush returned BZ_RUN_OK" ;
+ $Answer .= $X ;
+
+ is $x->uncompressedBytes(), length $hello, "uncompressedBytes ok" ;
+ is $x->compressedBytes(), length $Answer, "compressedBytes ok" ;
+
+ cmp_ok $x->bzclose($X), '==', BZ_STREAM_END, "bzclose returned BZ_STREAM_END";
+ $Answer .= $X ;
+
+ #open F, ">/tmp/xx1"; print F $Answer ; close F;
+ my @Answer = split('', $Answer) ;
+
+ my $k;
+ ok(($k, $err) = new Compress::Raw::Bunzip2(0, 0));
+ ok $k, "Compress::Raw::Bunzip2 ok" ;
+ cmp_ok $err, '==', BZ_OK, "status is BZ_OK" ;
+
+ is $k->compressedBytes(), 0, "compressedBytes() == 0" ;
+ is $k->uncompressedBytes(), 0, "uncompressedBytes() == 0" ;
+ my $GOT = '';
+ my $Z;
+ $Z = 1 ;#x 2000 ;
+ foreach (@Answer)
+ {
+ $status = $k->bzinflate($_, $Z) ;
+ $GOT .= $Z ;
+ last if $status == BZ_STREAM_END or $status != BZ_OK ;
+
+ }
+
+ cmp_ok $status, '==', BZ_STREAM_END, "Got BZ_STREAM_END" ;
+ is $GOT, $hello, "uncompressed data matches ok" ;
+ is $k->compressedBytes(), length $Answer, "compressedBytes ok" ;
+ is $k->uncompressedBytes(), length $hello , "uncompressedBytes ok";
+
+}
+
+
+{
+ # bzdeflate/bzinflate - small buffer with a number
+ # ==============================
+
+ my $hello = 6529 ;
+
+ ok my ($x, $err) = new Compress::Raw::Bzip2 (1) ;
+ ok $x ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ my $status;
+ my $Answer = '';
+
+ cmp_ok $x->bzdeflate($hello, $Answer), '==', BZ_RUN_OK ;
+
+ cmp_ok $x->bzclose($Answer), '==', BZ_STREAM_END, "bzclose returned BZ_STREAM_END";
+
+ my @Answer = split('', $Answer) ;
+
+ my $k;
+ ok(($k, $err) = new Compress::Raw::Bunzip2(1, 0) );
+ ok $k ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ #my $GOT = '';
+ my $GOT ;
+ foreach (@Answer)
+ {
+ $status = $k->bzinflate($_, $GOT) ;
+ last if $status == BZ_STREAM_END or $status != BZ_OK ;
+
+ }
+
+ cmp_ok $status, '==', BZ_STREAM_END ;
+ is $GOT, $hello ;
+
+}
+
+{
+
+# bzdeflate/bzinflate options - AppendOutput
+# ================================
+
+ # AppendOutput
+ # CRC
+
+ my $hello = "I am a HAL 9000 computer" ;
+ my @hello = split('', $hello) ;
+
+ ok my ($x, $err) = new Compress::Raw::Bzip2 (1) ;
+ ok $x ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ my $status;
+ my $X;
+ foreach (@hello)
+ {
+ $status = $x->bzdeflate($_, $X) ;
+ last unless $status == BZ_RUN_OK ;
+ }
+
+ cmp_ok $status, '==', BZ_RUN_OK ;
+
+ cmp_ok $x->bzclose($X), '==', BZ_STREAM_END ;
+
+
+ my @Answer = split('', $X) ;
+
+ my $k;
+ ok(($k, $err) = new Compress::Raw::Bunzip2( {-Bufsize => 1, -AppendOutput =>1}));
+ ok $k ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ my $Z;
+ foreach (@Answer)
+ {
+ $status = $k->bzinflate($_, $Z) ;
+ last if $status == BZ_STREAM_END or $status != BZ_OK ;
+
+ }
+
+ cmp_ok $status, '==', BZ_STREAM_END ;
+ is $Z, $hello ;
+}
+
+
+{
+
+ title "bzdeflate/bzinflate - larger buffer";
+ # ==============================
+
+ # generate a long random string
+ my $contents = '' ;
+ foreach (1 .. 50000)
+ { $contents .= chr int rand 255 }
+
+
+ ok my ($x, $err) = new Compress::Raw::Bzip2(0) ;
+ ok $x ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ my (%X, $Y, %Z, $X, $Z);
+ #cmp_ok $x->bzdeflate($contents, $X{key}), '==', BZ_RUN_OK ;
+ cmp_ok $x->bzdeflate($contents, $X), '==', BZ_RUN_OK ;
+
+ #$Y = $X{key} ;
+ $Y = $X ;
+
+
+ #cmp_ok $x->bzflush($X{key}), '==', BZ_RUN_OK ;
+ #$Y .= $X{key} ;
+ cmp_ok $x->bzclose($X), '==', BZ_STREAM_END ;
+ $Y .= $X ;
+
+
+
+ my $keep = $Y ;
+
+ my $k;
+ ok(($k, $err) = new Compress::Raw::Bunzip2(0, 0) );
+ ok $k ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ #cmp_ok $k->bzinflate($Y, $Z{key}), '==', BZ_STREAM_END ;
+ #ok $contents eq $Z{key} ;
+ cmp_ok $k->bzinflate($Y, $Z), '==', BZ_STREAM_END ;
+ ok $contents eq $Z ;
+
+ # redo bzdeflate with AppendOutput
+
+ ok (($k, $err) = new Compress::Raw::Bunzip2(1, 0)) ;
+ ok $k ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ my $s ;
+ my $out ;
+ my @bits = split('', $keep) ;
+ foreach my $bit (@bits) {
+ $s = $k->bzinflate($bit, $out) ;
+ }
+
+ cmp_ok $s, '==', BZ_STREAM_END ;
+
+ ok $contents eq $out ;
+
+
+}
+
+
+for my $consume ( 0 .. 1)
+{
+ title "bzinflate - check remaining buffer after BZ_STREAM_END, Consume $consume";
+
+ ok my $x = new Compress::Raw::Bzip2(0) ;
+
+ my ($X, $Y, $Z);
+ cmp_ok $x->bzdeflate($hello, $X), '==', BZ_RUN_OK;
+ cmp_ok $x->bzclose($Y), '==', BZ_STREAM_END;
+ $X .= $Y ;
+
+ ok my $k = new Compress::Raw::Bunzip2(0, $consume) ;
+
+ my $first = substr($X, 0, 2) ;
+ my $remember_first = $first ;
+ my $last = substr($X, 2) ;
+ cmp_ok $k->bzinflate($first, $Z), '==', BZ_OK;
+ if ($consume) {
+ ok $first eq "" ;
+ }
+ else {
+ ok $first eq $remember_first ;
+ }
+
+ my $T ;
+ $last .= "appendage" ;
+ my $remember_last = $last ;
+ cmp_ok $k->bzinflate($last, $T), '==', BZ_STREAM_END;
+ is $hello, $Z . $T ;
+ if ($consume) {
+ is $last, "appendage" ;
+ }
+ else {
+ is $last, $remember_last ;
+ }
+
+}
+
+
+{
+ title "ConsumeInput and a read-only buffer trapped" ;
+
+ ok my $k = new Compress::Raw::Bunzip2(0, 1) ;
+
+ my $Z;
+ eval { $k->bzinflate("abc", $Z) ; };
+ like $@, mkErr("Compress::Raw::Bunzip2::bzinflate input parameter cannot be read-only when ConsumeInput is specified");
+
+}
+
+foreach (1 .. 2)
+{
+ next if $[ < 5.005 ;
+
+ title 'test bzinflate/bzdeflate with a substr';
+
+ my $contents = '' ;
+ foreach (1 .. 5000)
+ { $contents .= chr int rand 255 }
+ ok my $x = new Compress::Raw::Bzip2(1) ;
+
+ my $X ;
+ my $status = $x->bzdeflate(substr($contents,0), $X);
+ cmp_ok $status, '==', BZ_RUN_OK ;
+
+ cmp_ok $x->bzflush($X), '==', BZ_RUN_OK ;
+
+ my $append = "Appended" ;
+ $X .= $append ;
+
+ ok my $k = new Compress::Raw::Bunzip2(1, 0) ;
+
+ my $Z;
+ my $keep = $X ;
+ $status = $k->bzinflate(substr($X, 0), $Z) ;
+
+ cmp_ok $status, '==', BZ_STREAM_END ;
+ #print "status $status X [$X]\n" ;
+ is $contents, $Z ;
+ ok $X eq $append;
+ #is length($X), length($append);
+ #ok $X eq $keep;
+ #is length($X), length($keep);
+}
+
+title 'Looping Append test - checks that deRef_l resets the output buffer';
+foreach (1 .. 2)
+{
+
+ my $hello = "I am a HAL 9000 computer" ;
+ my @hello = split('', $hello) ;
+ my ($err, $x, $X, $status);
+
+ ok( ($x, $err) = new Compress::Raw::Bzip2 (0) );
+ ok $x ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ $X = "" ;
+ my $Answer = '';
+ foreach (@hello)
+ {
+ $status = $x->bzdeflate($_, $X) ;
+ last unless $status == BZ_RUN_OK ;
+
+ $Answer .= $X ;
+ }
+
+ cmp_ok $status, '==', BZ_RUN_OK ;
+
+ cmp_ok $x->bzclose($X), '==', BZ_STREAM_END ;
+ $Answer .= $X ;
+
+ my @Answer = split('', $Answer) ;
+
+ my $k;
+ ok(($k, $err) = new Compress::Raw::Bunzip2(1, 0) );
+ ok $k ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ my $GOT ;
+ my $Z;
+ $Z = 1 ;#x 2000 ;
+ foreach (@Answer)
+ {
+ $status = $k->bzinflate($_, $GOT) ;
+ last if $status == BZ_STREAM_END or $status != BZ_OK ;
+ }
+
+ cmp_ok $status, '==', BZ_STREAM_END ;
+ is $GOT, $hello ;
+
+}
+
+if ($] >= 5.005)
+{
+ title 'test bzinflate input parameter via substr';
+
+ my $hello = "I am a HAL 9000 computer" ;
+ my $data = $hello ;
+
+ my($X, $Z);
+
+ ok my $x = new Compress::Raw::Bzip2 (1);
+
+ cmp_ok $x->bzdeflate($data, $X), '==', BZ_RUN_OK ;
+
+ cmp_ok $x->bzclose($X), '==', BZ_STREAM_END ;
+
+ my $append = "Appended" ;
+ $X .= $append ;
+ my $keep = $X ;
+
+ ok my $k = new Compress::Raw::Bunzip2 ( 1, 1);
+
+# cmp_ok $k->bzinflate(substr($X, 0, -1), $Z), '==', BZ_STREAM_END ; ;
+ cmp_ok $k->bzinflate(substr($X, 0), $Z), '==', BZ_STREAM_END ; ;
+
+ ok $hello eq $Z ;
+ is $X, $append;
+
+ $X = $keep ;
+ $Z = '';
+ ok $k = new Compress::Raw::Bunzip2 ( 1, 0);
+
+ cmp_ok $k->bzinflate(substr($X, 0, -1), $Z), '==', BZ_STREAM_END ; ;
+ #cmp_ok $k->bzinflate(substr($X, 0), $Z), '==', BZ_STREAM_END ; ;
+
+ ok $hello eq $Z ;
+ is $X, $keep;
+
+}
+
+exit if $] < 5.006 ;
+
+title 'Looping Append test with substr output - substr the end of the string';
+foreach (1 .. 2)
+{
+
+ my $hello = "I am a HAL 9000 computer" ;
+ my @hello = split('', $hello) ;
+ my ($err, $x, $X, $status);
+
+ ok( ($x, $err) = new Compress::Raw::Bzip2 (1) );
+ ok $x ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ $X = "" ;
+ my $Answer = '';
+ foreach (@hello)
+ {
+ $status = $x->bzdeflate($_, substr($Answer, length($Answer))) ;
+ last unless $status == BZ_RUN_OK ;
+
+ }
+
+ cmp_ok $status, '==', BZ_RUN_OK ;
+
+ cmp_ok $x->bzclose(substr($Answer, length($Answer))), '==', BZ_STREAM_END ;
+
+ my @Answer = split('', $Answer) ;
+
+ my $k;
+ ok(($k, $err) = new Compress::Raw::Bunzip2(1, 0) );
+ ok $k ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ my $GOT = '';
+ my $Z;
+ $Z = 1 ;#x 2000 ;
+ foreach (@Answer)
+ {
+ $status = $k->bzinflate($_, substr($GOT, length($GOT))) ;
+ last if $status == BZ_STREAM_END or $status != BZ_OK ;
+ }
+
+ cmp_ok $status, '==', BZ_STREAM_END ;
+ is $GOT, $hello ;
+
+}
+
+title 'Looping Append test with substr output - substr the complete string';
+foreach (1 .. 2)
+{
+
+ my $hello = "I am a HAL 9000 computer" ;
+ my @hello = split('', $hello) ;
+ my ($err, $x, $X, $status);
+
+ ok( ($x, $err) = new Compress::Raw::Bzip2 (1) );
+ ok $x ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ $X = "" ;
+ my $Answer = '';
+ foreach (@hello)
+ {
+ $status = $x->bzdeflate($_, substr($Answer, 0)) ;
+ last unless $status == BZ_RUN_OK ;
+
+ }
+
+ cmp_ok $status, '==', BZ_RUN_OK ;
+
+ cmp_ok $x->bzclose(substr($Answer, 0)), '==', BZ_STREAM_END ;
+
+ my @Answer = split('', $Answer) ;
+
+ my $k;
+ ok(($k, $err) = new Compress::Raw::Bunzip2(1, 0) );
+ ok $k ;
+ cmp_ok $err, '==', BZ_OK ;
+
+ my $GOT = '';
+ my $Z;
+ $Z = 1 ;#x 2000 ;
+ foreach (@Answer)
+ {
+ $status = $k->bzinflate($_, substr($GOT, 0)) ;
+ last if $status == BZ_STREAM_END or $status != BZ_OK ;
+ }
+
+ cmp_ok $status, '==', BZ_STREAM_END ;
+ is $GOT, $hello ;
+}
+