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