#!/sw/bin/perl -w # # Blatantly based on the YAML::Syck leak testcases written by Clayton # O'Neill and Andrew Danforth use strict; use Convert::Bencode_XS qw(bencode bdecode); use Test::More tests => 6; SKIP: { eval { require Devel::Leak } or skip( "Devel::Leak not installed", 6 ); my $struct = { foo => 'bar', nums => [ 1,2,3 ], this => 'that' }; my $encoded = bencode($struct); my $handle; my $diff; bencode($struct); my $before = Devel::Leak::NoteSV($handle); bencode($struct) foreach( 1 .. 100); $diff = Devel::Leak::NoteSV($handle) - $before; is( $diff, 0, "No leaks - bencode" ); # Run one decode to create all the expected SVs bdecode($encoded); $before = Devel::Leak::NoteSV($handle); bdecode($encoded) foreach ( 1 .. 100 ); $diff = Devel::Leak::NoteSV($handle) - $before; is( $diff, 0, "No leaks - bdecode" ); $encoded = 'd3:food4:this4:thate3:bar'; eval { bdecode($encoded) }; ok ( $@, "bdecode failed (expected)" ); eval { bdecode($encoded) }; $before = Devel::Leak::NoteSV($handle); eval { bdecode($encoded) }; $diff = Devel::Leak::NoteSV($handle) - $before; is( $diff, 0, "No leaks - bdecode incomplete dictionary" ); $encoded = 'l3:foo3:bar'; eval { bdecode($encoded) }; ok ( $@, "bdecode failed (expected)" ); eval { bdecode($encoded) }; $before = Devel::Leak::NoteSV($handle); eval { bdecode($encoded) }; $diff = Devel::Leak::NoteSV($handle) - $before; is( $diff, 0, "No leaks - bdecode incomplete list" ); }