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 '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}