print "1.." . &last() . "\n"; use Carp; $SIG{__WARN__} = sub { warn Carp::longmess(@_) }; use FreezeThaw qw(freeze thaw cmpStr safeFreeze cmpStrHard); require 'dumpvar.pl' ; #@deb = map {FreezeThaw::makeEmpty (ref $_)} ([1,2],{3,4}); #dumpValue ( \@deb ); $FreezeThaw::string = ''; $a1 = 'aa$a\nadf'; FreezeThaw::freezeString $a1; ($aaa,$rest) = FreezeThaw::thawString 0; print($aaa eq $a1 and $rest == length($FreezeThaw::string) ? "ok 1\n": "not ok 1\n"); $FreezeThaw::string = ''; $a2 = 'lk$s\nbgj'; FreezeThaw::freezeScalar $a2; ($aaa,$rest) = FreezeThaw::thawString 0; print($aaa eq $a2 and $rest == length($FreezeThaw::string) ? "ok 2\n": "not ok 2\n"); $FreezeThaw::string = ''; $a3 = [ 0, "aa", 2, "b" ]; FreezeThaw::freezeArray $a3; ($b,$rest) = FreezeThaw::thawArray 0; $bb = $FreezeThaw::string; $FreezeThaw::string = ''; undef @FreezeThaw::seen; undef %FreezeThaw::count; FreezeThaw::freezeArray $b; #print "$FreezeThaw::string\n"; print $bb eq $FreezeThaw::string ? "ok 3\n": "not ok 3\n"; $FreezeThaw::string = ''; undef @FreezeThaw::seen; undef %FreezeThaw::count; $a4 = [ 0, ["a", 1], 2, "ccc", [4, ["four", 4]] ]; FreezeThaw::freezeArray $a4; ($b,$rest) = FreezeThaw::thawArray 0; $bb = $FreezeThaw::string; $FreezeThaw::string = ''; undef @FreezeThaw::seen; undef %FreezeThaw::count; FreezeThaw::freezeArray $b; #print "$bb\n"; #print "$FreezeThaw::string\n"; print $bb eq $FreezeThaw::string ? "ok 4\n": "not ok 4\n"; $FreezeThaw::string = ''; $a5 = [ {"000" => undef}, ["a", 1], 2, "ccc", [4, ["four", 4]], {"five" => 5, "5" => [5,55]}]; FreezeThaw::freezeArray $a5; ($b) = FreezeThaw::thawArray 0; $bb = $FreezeThaw::string; $FreezeThaw::string = ''; undef @FreezeThaw::seen; undef %FreezeThaw::count; FreezeThaw::freezeArray $b; #print "$bb\n"; print $bb eq $FreezeThaw::string ? "ok 5\n": "not ok 5\n"; $out = freeze $a1, $a2, $a3, $a4, $a5; #print "$out\n"; @out = thaw $out; $out1 = freeze @out; #print $out; print $out1 eq $out ? "ok 6\n": "not ok 6\n"; print 0 == cmpStr([$a1, $a2, $a3, $a4, $a5], \@out) ? "ok 7\n": "not ok 7\n"; print 0 == cmpStrHard([$a1, $a2, $a3, $a4, $a5], \@out) ? "ok 8\n": "not ok 8\n"; print 0 != cmpStr([$a1, $a2, $a3, $a6, $a5], \@out) ? "ok 9\n": "not ok 9\n"; print 0 != cmpStrHard([$a1, $a2, $a3, $a6, $a5], \@out) ? "ok 10\n": "not ok 10\n"; print 0 == cmpStr(\@out, \@out) ? "ok 11\n": "not ok 11\n"; #print 0 == cmpStrHard(\@out, \@out) ? "ok 11.5\n": "not ok 11.5\n"; $a8 = \\$a1; $aa = freeze $a8; #print "$aa\n"; ($b) = thaw $aa; $bb = freeze $b; #print "$bb\n"; print $bb eq $aa ? "ok 12\n": "not ok 12\n"; { package Simple; sub new { bless {what => ['nott','so','simple']}; } } $a9 = new Simple; $aa = freeze $a9; #print "`$aa'\n"; ($b) = thaw $aa; $bb = freeze $b; #print "$bb\n"; print $bb eq $aa ? "ok 13\n": "not ok 13\n"; $a85 = \$a85; $aa = freeze $a85; #print "#$aa\n"; ($b) = thaw $aa; #dumpValue ($b); $bb = freeze $b; #print "#$bb\n"; print $bb eq $aa ? "ok 14\n": "not ok 14\n# aa=`$aa'\n# bb=`$bb'\n# b=`$b'\n"; $a86 = \$a86; $a87 = \$a86; $a88 = \$a87; print 0 == cmpStr($a85, $a86) ? "ok 15\n": "not ok 15\n"; #print ((freeze $a85), "\n"); #print ((freeze $a87), "\n"); print 0 == cmpStr($a85, $a87) ? "ok 16\n": "not ok 16\n"; print 0 != cmpStr($a85, $a88) ? "ok 17\n": "not ok 17\n"; print 0 != cmpStrHard($a85, $a86) ? "ok 18\n": "not ok 18\n"; #print freeze(\@out,\@out), "\n"; print 0 == cmpStrHard(\@out, \@out) ? "ok 19\n": "not ok 19\n"; $a9 = \&subr; $aa = safeFreeze $a9; #print "$aa\n"; ($b) = thaw $aa; $bb = safeFreeze $b; #print "$bb\n"; print $bb eq $aa ? "ok 20\n": "not ok 20\n"; $a9 = new Simple; $aa = freeze [$a9,89]; #print "#`$aa'\n"; ($b) = thaw $aa; $bb = freeze $b; #print "$bb\n"; print $bb eq $aa ? "ok 21\n": "not ok 21\n"; $aa = freeze [$a9,$a9]; #print "#`$aa'\n"; ($b) = thaw $aa; $bb = freeze $b; #print "#`$bb'\n"; print $bb eq $aa ? "ok 22\n": "not ok 22\n"; $a10 = new Simple; $aa = freeze [$a9,$a10]; ($b) = thaw $aa; $bb = freeze $b; print $bb eq $aa ? "ok 23\n": "not ok 23\n# aa=`$aa'\n# bb=`$bb'\n"; $a11 = [$a9,$a10,$a9,$a10]; $aa = freeze $a11; ($b) = thaw $aa; $bb = freeze $b; # print STDERR "`$bb'\n"; print $bb eq $aa ? "ok 24\n": "not ok 24\n# aa=`$aa'\n# bb=`$bb'\n"; $a15 = {}; $a16 = {}; $a12 = [$a15,$a16,$a15,$a16]; $a15->{add} = $a12; $a16->{add} = \$a12; $aa = freeze $a12; #print STDERR "#`$aa'\n"; ($b) = thaw $aa; $bb = freeze $b; #print STDERR "#`$bb'\n"; print $bb eq $aa ? "ok 25\n": "not ok 25\n# aa=`$aa'\n# bb=`$bb'\n"; $a15 = bless {}, 'Simple'; $a16 = bless {}, 'Simple'; $a12 = [$a15,$a16,$a15,$a16]; $a15->{add} = $a12; $a16->{add} = \$a12; $aa = freeze $a12; #print STDERR "#`$aa'\n"; ($b) = thaw $aa; $bb = freeze $b; #print STDERR "#`$bb'\n"; print $bb eq $aa ? "ok 26\n": "not ok 26\n# aa=`$aa'\n# bb=`$bb'\n"; require Math::BigInt; $v = new Math::BigInt 5; $vf = freeze $v; ($vv) = thaw $vf; $vi = $vv; $vi **= 100; print "# vi=`$vi' vv=`$vv' vf=`$vf' v=`$v'\nnot " unless "$vi" =~ /^\+? 7888609052210118054117285652827862296732064351 090230047702789306640625 \Z /x; print "ok 27\n"; if (eval '"Regexp" eq ref qr/1/') { # Have qr// eval <<'EOE'; my $rex = qr/^abc/mi; my $f = freeze [$rex, $rex, 11]; print "# '$f'\n"; my @o = thaw $f; my @out = @{$o[0]}; print "# ", ref $out[0], "\nnot " unless ref $out[0] eq 'Regexp'; print "ok 28\n"; print "not " unless "xyz\nABC" =~ $out[0]; print "ok 29\n"; print "# ", ref $out[0], "\nnot " unless ref $out[1] eq 'Regexp'; print "ok 30\n"; print "not " unless "xyz\nABC" =~ $out[1]; print "ok 31\n"; print "not " unless @out == 3; print "ok 32\n"; print "not " unless $out[2] == 11; print "ok 33\n"; print "not " unless @o == 1; print "ok 34\n"; print "not " unless ($out[1]+0) == ($out[1]+0); # Addresses print "ok 35\n"; EOE warn if $@; } else { for (28..35) { print "ok $_ # skipped: no qr// support\n"; } } sub last {35}