1use lib 't'; 2use ExtUtils::testlib; 3use Storable::AMF3 qw(freeze thaw ref_lost_memory ref_clear deparse_amf); 4use Scalar::Util qw(refaddr); 5use GrianUtils qw(ref_mem_safe loose $msg); 6use strict; 7use warnings; 8no warnings 'once'; 9use Data::Dumper; 10sub tt(&); 11sub loose(&); 12 13my @item ; 14push @item, GrianUtils->my_items($_) for qw(t/AMF0 t/AMF3); 15 16 17my @objs = grep !ref_lost_memory( $_->{obj} ), @item;; 18my @recurrent = grep ref_lost_memory( $_->{obj} ), @item; 19 20my ($name, $obj, $image_amf3, $image_amf0); 21sub get_item{ 22 ($name, $obj, $image_amf3, $image_amf0) = @{ $_[0] }{qw(name obj amf3 amf0 eval)}; 23} 24 25my $total = 1*@item + @objs*6+ @recurrent ; 26eval "use Test::More tests=>$total;"; 27warn $@ if $@; 28 29 30TEST_LOOP: for my $item (@recurrent){ 31 get_item( $item ); 32 ok( ! loose { my $a = thaw($image_amf3, 1); 1}, "thaw recurrent $name - $msg"); 33} 34my $count; 35 36TEST_LOOP: for my $item (@item){ 37 get_item( $item ); 38 ok( ! loose { my $a = thaw $image_amf3;ref_clear($a); $a= {}; 1}, "thaw destroy $name - $msg"); 39} 40TEST_LOOP: for my $item (@objs){ 41 get_item( $item ); 42 43 my $freeze = freeze $obj; 44 my $a1 = $freeze; 45 my $a2 = $freeze; 46 47 ok(! loose { my $a = thaw $image_amf3;1}, "thaw $name - $msg"); 48 ok(! loose { my $a = thaw $freeze}, "thaw $name - $msg"); 49 ok(! loose { my $a = freeze $obj;1}, "freeze $name - $msg"); 50 ok(! loose { my $a = thaw freeze $obj;1}, "thaw freeze $name - $msg"); 51 ok(! loose { my $a = \freeze thaw $image_amf3}, "freeze thaw $item - $msg"); 52 ok(! loose { my $a = freeze thaw $freeze;1}, "freeze thaw $name - $msg"); 53} 54 55