summaryrefslogtreecommitdiff
path: root/t/090-memory-usage.pl
diff options
context:
space:
mode:
Diffstat (limited to 't/090-memory-usage.pl')
-rw-r--r--t/090-memory-usage.pl59
1 files changed, 59 insertions, 0 deletions
diff --git a/t/090-memory-usage.pl b/t/090-memory-usage.pl
new file mode 100644
index 0000000..f3eaef8
--- /dev/null
+++ b/t/090-memory-usage.pl
@@ -0,0 +1,59 @@
+#! perl
+use strict;
+use 5.006002;
+use Compress::Bzip2;
+use File::Spec;
+use Memory::Usage;
+# Note that Test::LeakTrace does not find the XS leaks here. Always use Memory::Usage also.
+
+use constant MAX => 5; # MAX times all files in t => 125MB with 75, 15MB with 5, 43MB with 25
+use constant MAX_5 => MAX >= 5 ? MAX / 5 : 1;
+my $bigfile = File::Spec->catfile('t', '090-tmp-bigfile.bz2');
+
+sub t_compress {
+ warn "Creating $bigfile ...\n";
+ my $buf;
+ my $mu = Memory::Usage->new();
+ $mu->record("Before bzopen");
+ my $bz = Compress::Bzip2::bzopen($bigfile, "w");
+ for (0 .. MAX) {
+ $mu->record("Before bzwrite: $_") unless $_ % MAX_5;
+ for my $infile (glob "t/*") {
+ next if $infile eq $bigfile;
+ open(my $fh, "<", $infile);
+ while ( read( $fh, $buf, 65335 ) ) {
+ $bz->bzwrite( $buf );
+ }
+ close $fh;
+ }
+ $mu->record("After bzwrite: $_") unless $_ % MAX_5;
+ }
+ $bz->bzclose;
+ $mu->record("After bzclose");
+ $mu->dump();
+ system("bunzip2", "-tv", $bigfile);
+ warn(" size: ", -s $bigfile, "\n");
+}
+
+sub t_uncompress {
+ warn "Uncompressing $bigfile 5x ...\n";
+ my $buf;
+ my $mu = Memory::Usage->new();
+ for ( 1 .. 5 ) {
+ my $bz = Compress::Bzip2::bzinflateInit( -verbosity => 0 );
+ $mu->record("Before bunzip: $_");
+ open( my $fh, '<', $bigfile );
+ while ( read( $fh, $buf, 65335 ) ) {
+ my ( $output, $status ) = $bz->bzinflate( $buf );
+ }
+ close($fh);
+ $bz->bzclose();
+ $mu->record("After bunzip: $_");
+ }
+ $mu->dump();
+}
+
+t_compress() unless -f $bigfile;
+t_uncompress();
+
+unlink $bigfile;