Clone

 view release on metacpan or  search on metacpan

t/03-scalar.t  view on Meta::CPAN

my $a = Test::Scalar->new(1.0);
my $b = $a->clone(1);

ok( $$a == $$b, '$$a == $$b' );
ok( $a != $b, '$a != $b' );

{
  print "# using a reference on a string (CowREFCNT == 0).\n";

  my $c = \"something";
  my $d = Clone::clone($c, 2);

  ok( $$c == $$d, 'test 2 scalar content' );
  ok( $c != $d, 'SV are differents SVs' );
}

{
  print "# using a reference on one SvPV (CowREFCNT > 0).\n";

  my $str = "my string";
  my $c = \$str;

  my $d = Clone::clone($c, 2);

  ok( $$c == $$d, 'test 2 scalar content' );
  ok( $c != $d, 'SV are differents SVs' );


  if ( B::COW::can_cow() ) {
    my $sv_c = svref_2object( $c );
    my $sv_d = svref_2object( $d );

    ok( $sv_c->FLAGS & B::SVf_IsCOW, 'COW flag set on c' );
    ok( $sv_d->FLAGS & B::SVf_IsCOW, 'COW flag set on d' );
  }
}


$$d .= 'abcd';
ok( $$c ne $$d, 'only one scalar changed' );

my $circ = undef;
$circ = \$circ;
$aref = clone($circ);
if ($has_data_dumper) {
  ok( Dumper($circ) eq Dumper($aref), 'Dumper check' );
}

# the following used to produce a segfault, rt.cpan.org id=2264
undef $a;
$b = clone($a);
ok( $$a == $$b, 'int check' );

# used to get a segfault cloning a ref to a qr data type.
my $str = 'abcdefg';
my $qr = qr/$str/;
my $qc = clone( $qr );
ok( $qr eq $qc, 'string check' );
ok( $str =~ /$qc/, 'regexp check' );

# test for unicode support
{
  my $a = \( chr(256) );
  my $b = clone( $a );
  ok( ord($$a) == ord($$b) );
}



( run in 2.380 seconds using v1.01-cache-2.11-cpan-98e64b0badf )