use strict; eval { require LWP::Sink::deflate; }; if ($@) { print "1..0\n" if $@ =~ /^Can\'t locate Compress/; print $@; exit; } $| = 1; print "1..4\n"; use LWP::Sink::Buffer; print "chr(0)..chr(255) --> deflate --> inflate\n"; my $sink = LWP::Sink::deflate::encode->new; $sink->push(LWP::Sink::deflate::decode->new); my $b; $sink->push($b = LWP::Sink::Buffer->new); for (0..255) { $sink->put(chr $_); } $sink->close; print "not " unless $b->buffer eq join("", map chr $_, 0..255); print "ok 1\n"; #------------------------ my $orig = <<"EOT" x 1000; Lille Sonja var en stjerne der hun danset rundt på tjernet, skjønt det var kun en som klappa det var Sonjas store Pappa. EOT print "Deflating\n"; print "orig size = ", length($orig), "\n"; $sink = LWP::Sink::deflate::encode->new; $sink->push($b = LWP::Sink::Buffer->new); my $copy = $orig; while (length $copy) { my $chunk = substr($copy, 0, 20); substr($copy, 0, 20) = ''; $sink->put($chunk); } $sink->close; my $compressed = $b->buffer; print "compressed size = ", length($compressed), "\n"; # The compressed stuff should be much shorter print "not " unless length($compressed)*100 < length($orig); print "ok 2\n"; print "Inflating, feeding one char at a time\n"; $sink = LWP::Sink::deflate::decode->new; $sink->push($b = LWP::Sink::Buffer->new); for (unpack("C*", $compressed)) { $sink->put(chr $_); } undef($sink); print "not " unless $b->buffer eq $orig; print "ok 3\n"; print "Inflating, one chunk\n"; $sink = LWP::Sink::deflate::decode->new; $sink->push($b = LWP::Sink::Buffer->new); $sink->put($compressed); $sink->close; print "not " unless $b->buffer eq $orig; print "ok 4\n";