4 #@INC = ("../lib", "lib/compress");
20 # use Test::NoWarnings, if available
23 if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
37 plan tests => $count + $extra;
39 use_ok('Compress::Raw::Bzip2') ;
52 my ($dummy, $file, $line) = caller ;
55 $string = quotemeta $string;
56 $file = quotemeta($file);
58 #return "/$string\\s+at $file line $line/" if $] >= 5.006 ;
59 return "/$string\\s+at /" ;
66 return "/$string\\s+at \\(eval /" if $] > 5.006 ;
67 return "/$string\\s+at /" ;
77 my $len = length $hello ;
82 eval { new Compress::Raw::Bzip2(1,2,3,4,5,6) };
83 like $@, mkErr "Usage: Compress::Raw::Bzip2::new(className, appendOut=1, blockSize100k=1, workfactor=0, verbosity=0)";
90 title "bzdeflate/bzinflate - small buffer";
91 # ==============================
93 my $hello = "I am a HAL 9000 computer" ;
94 my @hello = split('', $hello) ;
95 my ($err, $x, $X, $status);
97 ok( ($x, $err) = new Compress::Raw::Bzip2(0), "Create bzdeflate object" );
98 ok $x, "Compress::Raw::Bzip2 ok" ;
99 cmp_ok $err, '==', BZ_OK, "status is BZ_OK" ;
101 is $x->uncompressedBytes(), 0, "uncompressedBytes() == 0" ;
102 is $x->compressedBytes(), 0, "compressedBytes() == 0" ;
108 $status = $x->bzdeflate($_, $X) ;
109 last unless $status == BZ_RUN_OK ;
114 cmp_ok $status, '==', BZ_RUN_OK, "bzdeflate returned BZ_RUN_OK" ;
116 cmp_ok $x->bzflush($X), '==', BZ_RUN_OK, "bzflush returned BZ_RUN_OK" ;
119 is $x->uncompressedBytes(), length $hello, "uncompressedBytes ok" ;
120 is $x->compressedBytes(), length $Answer, "compressedBytes ok" ;
122 cmp_ok $x->bzclose($X), '==', BZ_STREAM_END, "bzclose returned BZ_STREAM_END";
125 #open F, ">/tmp/xx1"; print F $Answer ; close F;
126 my @Answer = split('', $Answer) ;
129 ok(($k, $err) = new Compress::Raw::Bunzip2(0, 0));
130 ok $k, "Compress::Raw::Bunzip2 ok" ;
131 cmp_ok $err, '==', BZ_OK, "status is BZ_OK" ;
133 is $k->compressedBytes(), 0, "compressedBytes() == 0" ;
134 is $k->uncompressedBytes(), 0, "uncompressedBytes() == 0" ;
140 $status = $k->bzinflate($_, $Z) ;
142 last if $status == BZ_STREAM_END or $status != BZ_OK ;
146 cmp_ok $status, '==', BZ_STREAM_END, "Got BZ_STREAM_END" ;
147 is $GOT, $hello, "uncompressed data matches ok" ;
148 is $k->compressedBytes(), length $Answer, "compressedBytes ok" ;
149 is $k->uncompressedBytes(), length $hello , "uncompressedBytes ok";
155 # bzdeflate/bzinflate - small buffer with a number
156 # ==============================
160 ok my ($x, $err) = new Compress::Raw::Bzip2 (1) ;
162 cmp_ok $err, '==', BZ_OK ;
167 cmp_ok $x->bzdeflate($hello, $Answer), '==', BZ_RUN_OK ;
169 cmp_ok $x->bzclose($Answer), '==', BZ_STREAM_END, "bzclose returned BZ_STREAM_END";
171 my @Answer = split('', $Answer) ;
174 ok(($k, $err) = new Compress::Raw::Bunzip2(1, 0) );
176 cmp_ok $err, '==', BZ_OK ;
182 $status = $k->bzinflate($_, $GOT) ;
183 last if $status == BZ_STREAM_END or $status != BZ_OK ;
187 cmp_ok $status, '==', BZ_STREAM_END ;
194 # bzdeflate/bzinflate options - AppendOutput
195 # ================================
200 my $hello = "I am a HAL 9000 computer" ;
201 my @hello = split('', $hello) ;
203 ok my ($x, $err) = new Compress::Raw::Bzip2 (1) ;
205 cmp_ok $err, '==', BZ_OK ;
211 $status = $x->bzdeflate($_, $X) ;
212 last unless $status == BZ_RUN_OK ;
215 cmp_ok $status, '==', BZ_RUN_OK ;
217 cmp_ok $x->bzclose($X), '==', BZ_STREAM_END ;
220 my @Answer = split('', $X) ;
223 ok(($k, $err) = new Compress::Raw::Bunzip2( {-Bufsize => 1, -AppendOutput =>1}));
225 cmp_ok $err, '==', BZ_OK ;
230 $status = $k->bzinflate($_, $Z) ;
231 last if $status == BZ_STREAM_END or $status != BZ_OK ;
235 cmp_ok $status, '==', BZ_STREAM_END ;
242 title "bzdeflate/bzinflate - larger buffer";
243 # ==============================
245 # generate a long random string
248 { $contents .= chr int rand 255 }
251 ok my ($x, $err) = new Compress::Raw::Bzip2(0) ;
253 cmp_ok $err, '==', BZ_OK ;
255 my (%X, $Y, %Z, $X, $Z);
256 #cmp_ok $x->bzdeflate($contents, $X{key}), '==', BZ_RUN_OK ;
257 cmp_ok $x->bzdeflate($contents, $X), '==', BZ_RUN_OK ;
263 #cmp_ok $x->bzflush($X{key}), '==', BZ_RUN_OK ;
265 cmp_ok $x->bzclose($X), '==', BZ_STREAM_END ;
273 ok(($k, $err) = new Compress::Raw::Bunzip2(0, 0) );
275 cmp_ok $err, '==', BZ_OK ;
277 #cmp_ok $k->bzinflate($Y, $Z{key}), '==', BZ_STREAM_END ;
278 #ok $contents eq $Z{key} ;
279 cmp_ok $k->bzinflate($Y, $Z), '==', BZ_STREAM_END ;
282 # redo bzdeflate with AppendOutput
284 ok (($k, $err) = new Compress::Raw::Bunzip2(1, 0)) ;
286 cmp_ok $err, '==', BZ_OK ;
290 my @bits = split('', $keep) ;
291 foreach my $bit (@bits) {
292 $s = $k->bzinflate($bit, $out) ;
295 cmp_ok $s, '==', BZ_STREAM_END ;
297 ok $contents eq $out ;
303 for my $consume ( 0 .. 1)
305 title "bzinflate - check remaining buffer after BZ_STREAM_END, Consume $consume";
307 ok my $x = new Compress::Raw::Bzip2(0) ;
310 cmp_ok $x->bzdeflate($hello, $X), '==', BZ_RUN_OK;
311 cmp_ok $x->bzclose($Y), '==', BZ_STREAM_END;
314 ok my $k = new Compress::Raw::Bunzip2(0, $consume) ;
316 my $first = substr($X, 0, 2) ;
317 my $remember_first = $first ;
318 my $last = substr($X, 2) ;
319 cmp_ok $k->bzinflate($first, $Z), '==', BZ_OK;
324 ok $first eq $remember_first ;
328 $last .= "appendage" ;
329 my $remember_last = $last ;
330 cmp_ok $k->bzinflate($last, $T), '==', BZ_STREAM_END;
333 is $last, "appendage" ;
336 is $last, $remember_last ;
343 title "ConsumeInput and a read-only buffer trapped" ;
345 ok my $k = new Compress::Raw::Bunzip2(0, 1) ;
348 eval { $k->bzinflate("abc", $Z) ; };
349 like $@, mkErr("Compress::Raw::Bunzip2::bzinflate input parameter cannot be read-only when ConsumeInput is specified");
357 title 'test bzinflate/bzdeflate with a substr';
361 { $contents .= chr int rand 255 }
362 ok my $x = new Compress::Raw::Bzip2(1) ;
365 my $status = $x->bzdeflate(substr($contents,0), $X);
366 cmp_ok $status, '==', BZ_RUN_OK ;
368 cmp_ok $x->bzflush($X), '==', BZ_RUN_OK ;
370 my $append = "Appended" ;
373 ok my $k = new Compress::Raw::Bunzip2(1, 0) ;
377 $status = $k->bzinflate(substr($X, 0), $Z) ;
379 cmp_ok $status, '==', BZ_STREAM_END ;
380 #print "status $status X [$X]\n" ;
383 #is length($X), length($append);
385 #is length($X), length($keep);
388 title 'Looping Append test - checks that deRef_l resets the output buffer';
392 my $hello = "I am a HAL 9000 computer" ;
393 my @hello = split('', $hello) ;
394 my ($err, $x, $X, $status);
396 ok( ($x, $err) = new Compress::Raw::Bzip2 (0) );
398 cmp_ok $err, '==', BZ_OK ;
404 $status = $x->bzdeflate($_, $X) ;
405 last unless $status == BZ_RUN_OK ;
410 cmp_ok $status, '==', BZ_RUN_OK ;
412 cmp_ok $x->bzclose($X), '==', BZ_STREAM_END ;
415 my @Answer = split('', $Answer) ;
418 ok(($k, $err) = new Compress::Raw::Bunzip2(1, 0) );
420 cmp_ok $err, '==', BZ_OK ;
427 $status = $k->bzinflate($_, $GOT) ;
428 last if $status == BZ_STREAM_END or $status != BZ_OK ;
431 cmp_ok $status, '==', BZ_STREAM_END ;
438 title 'test bzinflate input parameter via substr';
440 my $hello = "I am a HAL 9000 computer" ;
445 ok my $x = new Compress::Raw::Bzip2 (1);
447 cmp_ok $x->bzdeflate($data, $X), '==', BZ_RUN_OK ;
449 cmp_ok $x->bzclose($X), '==', BZ_STREAM_END ;
451 my $append = "Appended" ;
455 ok my $k = new Compress::Raw::Bunzip2 ( 1, 1);
457 # cmp_ok $k->bzinflate(substr($X, 0, -1), $Z), '==', BZ_STREAM_END ; ;
458 cmp_ok $k->bzinflate(substr($X, 0), $Z), '==', BZ_STREAM_END ; ;
465 ok $k = new Compress::Raw::Bunzip2 ( 1, 0);
467 cmp_ok $k->bzinflate(substr($X, 0, -1), $Z), '==', BZ_STREAM_END ; ;
468 #cmp_ok $k->bzinflate(substr($X, 0), $Z), '==', BZ_STREAM_END ; ;
477 title 'Looping Append test with substr output - substr the end of the string';
481 my $hello = "I am a HAL 9000 computer" ;
482 my @hello = split('', $hello) ;
483 my ($err, $x, $X, $status);
485 ok( ($x, $err) = new Compress::Raw::Bzip2 (1) );
487 cmp_ok $err, '==', BZ_OK ;
493 $status = $x->bzdeflate($_, substr($Answer, length($Answer))) ;
494 last unless $status == BZ_RUN_OK ;
498 cmp_ok $status, '==', BZ_RUN_OK ;
500 cmp_ok $x->bzclose(substr($Answer, length($Answer))), '==', BZ_STREAM_END ;
502 my @Answer = split('', $Answer) ;
505 ok(($k, $err) = new Compress::Raw::Bunzip2(1, 0) );
507 cmp_ok $err, '==', BZ_OK ;
514 $status = $k->bzinflate($_, substr($GOT, length($GOT))) ;
515 last if $status == BZ_STREAM_END or $status != BZ_OK ;
518 cmp_ok $status, '==', BZ_STREAM_END ;
523 title 'Looping Append test with substr output - substr the complete string';
527 my $hello = "I am a HAL 9000 computer" ;
528 my @hello = split('', $hello) ;
529 my ($err, $x, $X, $status);
531 ok( ($x, $err) = new Compress::Raw::Bzip2 (1) );
533 cmp_ok $err, '==', BZ_OK ;
539 $status = $x->bzdeflate($_, substr($Answer, 0)) ;
540 last unless $status == BZ_RUN_OK ;
544 cmp_ok $status, '==', BZ_RUN_OK ;
546 cmp_ok $x->bzclose(substr($Answer, 0)), '==', BZ_STREAM_END ;
548 my @Answer = split('', $Answer) ;
551 ok(($k, $err) = new Compress::Raw::Bunzip2(1, 0) );
553 cmp_ok $err, '==', BZ_OK ;
560 $status = $k->bzinflate($_, substr($GOT, 0)) ;
561 last if $status == BZ_STREAM_END or $status != BZ_OK ;
564 cmp_ok $status, '==', BZ_STREAM_END ;