From e9892ef4bc3335e9f75342c6d804015002680b0b Mon Sep 17 00:00:00 2001 From: Gianni Ceccarelli Date: Thu, 22 Dec 2011 16:54:11 +0000 Subject: remove MooseX::Types as far as sensible it leaks! --- author_t/leaks.t | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 author_t/leaks.t (limited to 'author_t/leaks.t') diff --git a/author_t/leaks.t b/author_t/leaks.t new file mode 100644 index 0000000..f3c811b --- /dev/null +++ b/author_t/leaks.t @@ -0,0 +1,75 @@ +#!perl +use strict; +use warnings; +package Foo;{ +use Moose; +use Data::MultiValued::AttributeTrait::Ranges; + +with 'Data::MultiValued::UglySerializationHelperRole'; + +has rr => ( + is => 'rw', + isa => 'Str', + traits => ['MultiValued::Ranges'], + predicate => 'has_rr', + clearer => 'clear_rr', +); + +} +package main; +use Test::Most 'die'; +use Data::Printer; +use JSON::XS; +BEGIN { $ENV{DEBUG_MEM}=1 }; +use Dash::Leak; + +my $ropts={from=>10,to=>20}; + +my $json = JSON::XS->new->utf8; +my $obj = Foo->new(rr=>'foo'); +$obj->rr_multi($ropts,777); + +subtest 'serialisation memory leak' => sub { + $obj=Foo->new_in_place($json->decode($json->encode($obj->as_hash))); + leaksz 'start memory leak'; + for my $iter (0..2000) { + $obj=Foo->new_in_place($json->decode($json->encode($obj->as_hash))); + } + leaksz 'stop memory leak'; + ok(1,'done'); +}; + +subtest 'accessor memory leak' => sub { + leaksz 'start memory leak'; + for my $iter (0..1000) { + $obj->rr_multi({at=>35}); + } + leaksz 'stop memory leak non-exist'; + leaksz '...'; + for my $iter (0..1000) { + $obj->rr_multi({at=>15}); + } + leaksz 'stop memory leak exist'; + + ok(1,'done'); +}; + +subtest 'inner memory leak' => sub { + my $cont = $obj->{rr__MULTIVALUED_STORAGE__} + {_storage}; + + leaksz 'start memory leak'; + for my $iter (0..1000) { + eval { $cont->get({at=>35}) } + } + leaksz 'stop memory leak non-exist'; + leaksz '...'; + for my $iter (0..1000) { + $cont->get({at=>15}); + } + leaksz 'stop memory leak exist'; + + ok(1,'done'); +}; + +done_testing(); -- cgit v1.2.3