15759b3d2Safresh1#!/usr/bin/perl -w 25759b3d2Safresh1 35759b3d2Safresh1BEGIN { 45759b3d2Safresh1 if( $ENV{PERL_CORE} ) { 55759b3d2Safresh1 chdir 't'; 65759b3d2Safresh1 @INC = ('../lib', 'lib'); 75759b3d2Safresh1 } 85759b3d2Safresh1 else { 95759b3d2Safresh1 unshift @INC, 't/lib'; 105759b3d2Safresh1 } 115759b3d2Safresh1} 125759b3d2Safresh1 135759b3d2Safresh1use strict; 14256a93a4Safresh1use warnings; 155759b3d2Safresh1 165759b3d2Safresh1use Test::Builder; 175759b3d2Safresh1require Test::Simple::Catch; 185759b3d2Safresh1my($out, $err) = Test::Simple::Catch::caught(); 195759b3d2Safresh1Test::Builder->new->no_header(1); 205759b3d2Safresh1Test::Builder->new->no_ending(1); 215759b3d2Safresh1local $ENV{HARNESS_ACTIVE} = 0; 225759b3d2Safresh1 235759b3d2Safresh1 245759b3d2Safresh1# Can't use Test.pm, that's a 5.005 thing. 255759b3d2Safresh1package main; 265759b3d2Safresh1 275759b3d2Safresh1 285759b3d2Safresh1my $TB = Test::Builder->create; 29*5486feefSafresh1$TB->plan(tests => 110); 305759b3d2Safresh1 315759b3d2Safresh1# Utility testing functions. 325759b3d2Safresh1sub ok ($;$) { 335759b3d2Safresh1 return $TB->ok(@_); 345759b3d2Safresh1} 355759b3d2Safresh1 365759b3d2Safresh1sub is ($$;$) { 375759b3d2Safresh1 my($thing, $that, $name) = @_; 385759b3d2Safresh1 395759b3d2Safresh1 my $ok = $TB->is_eq($$thing, $that, $name); 405759b3d2Safresh1 415759b3d2Safresh1 $$thing = ''; 425759b3d2Safresh1 435759b3d2Safresh1 return $ok; 445759b3d2Safresh1} 455759b3d2Safresh1 465759b3d2Safresh1sub like ($$;$) { 475759b3d2Safresh1 my($thing, $regex, $name) = @_; 485759b3d2Safresh1 $regex = "/$regex/" if !ref $regex and $regex !~ m{^/.*/$}s; 495759b3d2Safresh1 505759b3d2Safresh1 my $ok = $TB->like($$thing, $regex, $name); 515759b3d2Safresh1 525759b3d2Safresh1 $$thing = ''; 535759b3d2Safresh1 545759b3d2Safresh1 return $ok; 555759b3d2Safresh1} 565759b3d2Safresh1 575759b3d2Safresh1 585759b3d2Safresh1require Test::More; 595759b3d2Safresh1Test::More->import(tests => 11, import => ['is_deeply']); 605759b3d2Safresh1 615759b3d2Safresh1my $Filename = quotemeta $0; 625759b3d2Safresh1 635759b3d2Safresh1#line 68 645759b3d2Safresh1ok !is_deeply('foo', 'bar', 'plain strings'); 655759b3d2Safresh1is( $out, "not ok 1 - plain strings\n", 'plain strings' ); 665759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 675759b3d2Safresh1# Failed test 'plain strings' 685759b3d2Safresh1# at $0 line 68. 695759b3d2Safresh1# got: 'foo' 705759b3d2Safresh1# expected: 'bar' 715759b3d2Safresh1ERR 725759b3d2Safresh1 735759b3d2Safresh1 745759b3d2Safresh1#line 78 755759b3d2Safresh1ok !is_deeply({}, [], 'different types'); 765759b3d2Safresh1is( $out, "not ok 2 - different types\n", 'different types' ); 775759b3d2Safresh1like( $err, <<ERR, ' right diagnostic' ); 785759b3d2Safresh1# Failed test 'different types' 795759b3d2Safresh1# at $Filename line 78. 805759b3d2Safresh1# Structures begin differing at: 815759b3d2Safresh1# \\\$got = HASH\\(0x[0-9a-f]+\\) 825759b3d2Safresh1# \\\$expected = ARRAY\\(0x[0-9a-f]+\\) 835759b3d2Safresh1ERR 845759b3d2Safresh1 855759b3d2Safresh1#line 88 865759b3d2Safresh1ok !is_deeply({ this => 42 }, { this => 43 }, 'hashes with different values'); 875759b3d2Safresh1is( $out, "not ok 3 - hashes with different values\n", 885759b3d2Safresh1 'hashes with different values' ); 895759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 905759b3d2Safresh1# Failed test 'hashes with different values' 915759b3d2Safresh1# at $0 line 88. 925759b3d2Safresh1# Structures begin differing at: 935759b3d2Safresh1# \$got->{this} = '42' 945759b3d2Safresh1# \$expected->{this} = '43' 955759b3d2Safresh1ERR 965759b3d2Safresh1 975759b3d2Safresh1#line 99 985759b3d2Safresh1ok !is_deeply({ that => 42 }, { this => 42 }, 'hashes with different keys'); 995759b3d2Safresh1is( $out, "not ok 4 - hashes with different keys\n", 1005759b3d2Safresh1 'hashes with different keys' ); 1015759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 1025759b3d2Safresh1# Failed test 'hashes with different keys' 1035759b3d2Safresh1# at $0 line 99. 1045759b3d2Safresh1# Structures begin differing at: 1055759b3d2Safresh1# \$got->{this} = Does not exist 1065759b3d2Safresh1# \$expected->{this} = '42' 1075759b3d2Safresh1ERR 1085759b3d2Safresh1 1095759b3d2Safresh1#line 110 1105759b3d2Safresh1ok !is_deeply([1..9], [1..10], 'arrays of different length'); 1115759b3d2Safresh1is( $out, "not ok 5 - arrays of different length\n", 1125759b3d2Safresh1 'arrays of different length' ); 1135759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 1145759b3d2Safresh1# Failed test 'arrays of different length' 1155759b3d2Safresh1# at $0 line 110. 1165759b3d2Safresh1# Structures begin differing at: 1175759b3d2Safresh1# \$got->[9] = Does not exist 1185759b3d2Safresh1# \$expected->[9] = '10' 1195759b3d2Safresh1ERR 1205759b3d2Safresh1 1215759b3d2Safresh1#line 121 1225759b3d2Safresh1ok !is_deeply([undef, undef], [undef], 'arrays of undefs' ); 1235759b3d2Safresh1is( $out, "not ok 6 - arrays of undefs\n", 'arrays of undefs' ); 1245759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 1255759b3d2Safresh1# Failed test 'arrays of undefs' 1265759b3d2Safresh1# at $0 line 121. 1275759b3d2Safresh1# Structures begin differing at: 1285759b3d2Safresh1# \$got->[1] = undef 1295759b3d2Safresh1# \$expected->[1] = Does not exist 1305759b3d2Safresh1ERR 1315759b3d2Safresh1 1325759b3d2Safresh1#line 131 1335759b3d2Safresh1ok !is_deeply({ foo => undef }, {}, 'hashes of undefs' ); 1345759b3d2Safresh1is( $out, "not ok 7 - hashes of undefs\n", 'hashes of undefs' ); 1355759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 1365759b3d2Safresh1# Failed test 'hashes of undefs' 1375759b3d2Safresh1# at $0 line 131. 1385759b3d2Safresh1# Structures begin differing at: 1395759b3d2Safresh1# \$got->{foo} = undef 1405759b3d2Safresh1# \$expected->{foo} = Does not exist 1415759b3d2Safresh1ERR 1425759b3d2Safresh1 1435759b3d2Safresh1#line 141 1445759b3d2Safresh1ok !is_deeply(\42, \23, 'scalar refs'); 1455759b3d2Safresh1is( $out, "not ok 8 - scalar refs\n", 'scalar refs' ); 1465759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 1475759b3d2Safresh1# Failed test 'scalar refs' 1485759b3d2Safresh1# at $0 line 141. 1495759b3d2Safresh1# Structures begin differing at: 1505759b3d2Safresh1# \${ \$got} = '42' 1515759b3d2Safresh1# \${\$expected} = '23' 1525759b3d2Safresh1ERR 1535759b3d2Safresh1 1545759b3d2Safresh1#line 151 1555759b3d2Safresh1ok !is_deeply([], \23, 'mixed scalar and array refs'); 1565759b3d2Safresh1is( $out, "not ok 9 - mixed scalar and array refs\n", 1575759b3d2Safresh1 'mixed scalar and array refs' ); 1585759b3d2Safresh1like( $err, <<ERR, ' right diagnostic' ); 1595759b3d2Safresh1# Failed test 'mixed scalar and array refs' 1605759b3d2Safresh1# at $Filename line 151. 1615759b3d2Safresh1# Structures begin differing at: 1625759b3d2Safresh1# \\\$got = ARRAY\\(0x[0-9a-f]+\\) 1635759b3d2Safresh1# \\\$expected = SCALAR\\(0x[0-9a-f]+\\) 1645759b3d2Safresh1ERR 1655759b3d2Safresh1 1665759b3d2Safresh1 1675759b3d2Safresh1my($a1, $a2, $a3); 1685759b3d2Safresh1$a1 = \$a2; $a2 = \$a3; 1695759b3d2Safresh1$a3 = 42; 1705759b3d2Safresh1 1715759b3d2Safresh1my($b1, $b2, $b3); 1725759b3d2Safresh1$b1 = \$b2; $b2 = \$b3; 1735759b3d2Safresh1$b3 = 23; 1745759b3d2Safresh1 1755759b3d2Safresh1#line 173 1765759b3d2Safresh1ok !is_deeply($a1, $b1, 'deep scalar refs'); 1775759b3d2Safresh1is( $out, "not ok 10 - deep scalar refs\n", 'deep scalar refs' ); 1785759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 1795759b3d2Safresh1# Failed test 'deep scalar refs' 1805759b3d2Safresh1# at $0 line 173. 1815759b3d2Safresh1# Structures begin differing at: 1825759b3d2Safresh1# \${\${ \$got}} = '42' 1835759b3d2Safresh1# \${\${\$expected}} = '23' 1845759b3d2Safresh1ERR 1855759b3d2Safresh1 1865759b3d2Safresh1# I don't know how to properly display this structure. 1875759b3d2Safresh1# $a2 = { foo => \$a3 }; 1885759b3d2Safresh1# $b2 = { foo => \$b3 }; 1895759b3d2Safresh1# is_deeply([$a1], [$b1], 'deep mixed scalar refs'); 1905759b3d2Safresh1 1915759b3d2Safresh1my $foo = { 1925759b3d2Safresh1 this => [1..10], 1935759b3d2Safresh1 that => { up => "down", left => "right" }, 1945759b3d2Safresh1 }; 1955759b3d2Safresh1 1965759b3d2Safresh1my $bar = { 1975759b3d2Safresh1 this => [1..10], 1985759b3d2Safresh1 that => { up => "down", left => "right", foo => 42 }, 1995759b3d2Safresh1 }; 2005759b3d2Safresh1 2015759b3d2Safresh1#line 198 2025759b3d2Safresh1ok !is_deeply( $foo, $bar, 'deep structures' ); 2035759b3d2Safresh1ok( @Test::More::Data_Stack == 0, '@Data_Stack not holding onto things' ); 2045759b3d2Safresh1is( $out, "not ok 11 - deep structures\n", 'deep structures' ); 2055759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 2065759b3d2Safresh1# Failed test 'deep structures' 2075759b3d2Safresh1# at $0 line 198. 2085759b3d2Safresh1# Structures begin differing at: 2095759b3d2Safresh1# \$got->{that}{foo} = Does not exist 2105759b3d2Safresh1# \$expected->{that}{foo} = '42' 2115759b3d2Safresh1ERR 2125759b3d2Safresh1 2135759b3d2Safresh1 2145759b3d2Safresh1#line 221 2155759b3d2Safresh1my @tests = ([], 2165759b3d2Safresh1 [qw(42)], 2175759b3d2Safresh1 [qw(42 23), qw(42 23)] 2185759b3d2Safresh1 ); 2195759b3d2Safresh1 2205759b3d2Safresh1foreach my $test (@tests) { 2215759b3d2Safresh1 my $num_args = @$test; 2225759b3d2Safresh1 2235759b3d2Safresh1 my $warning; 2245759b3d2Safresh1 local $SIG{__WARN__} = sub { $warning .= join '', @_; }; 2255759b3d2Safresh1 ok !is_deeply(@$test); 2265759b3d2Safresh1 2275759b3d2Safresh1 like \$warning, 2285759b3d2Safresh1 "/^is_deeply\\(\\) takes two or three args, you gave $num_args\.\n/"; 2295759b3d2Safresh1} 2305759b3d2Safresh1 2315759b3d2Safresh1 2325759b3d2Safresh1#line 240 2335759b3d2Safresh1# [rt.cpan.org 6837] 2345759b3d2Safresh1ok !is_deeply([{Foo => undef}],[{Foo => ""}]), 'undef != ""'; 2355759b3d2Safresh1ok( @Test::More::Data_Stack == 0, '@Data_Stack not holding onto things' ); 2365759b3d2Safresh1 2375759b3d2Safresh1 2385759b3d2Safresh1#line 258 2395759b3d2Safresh1# [rt.cpan.org 7031] 2405759b3d2Safresh1my $a = []; 2415759b3d2Safresh1ok !is_deeply($a, $a.''), "don't compare refs like strings"; 2425759b3d2Safresh1ok !is_deeply([$a], [$a.'']), " even deep inside"; 2435759b3d2Safresh1 2445759b3d2Safresh1 2455759b3d2Safresh1#line 265 2465759b3d2Safresh1# [rt.cpan.org 7030] 2475759b3d2Safresh1ok !is_deeply( {}, {key => []} ), '[] could match non-existent values'; 2485759b3d2Safresh1ok !is_deeply( [], [[]] ); 2495759b3d2Safresh1 2505759b3d2Safresh1 2515759b3d2Safresh1#line 273 2525759b3d2Safresh1$$err = $$out = ''; 2535759b3d2Safresh1ok !is_deeply( [\'a', 'b'], [\'a', 'c'] ); 2545759b3d2Safresh1is( $out, "not ok 20\n", 'scalar refs in an array' ); 2555759b3d2Safresh1is( $err, <<ERR, ' right diagnostic' ); 2565759b3d2Safresh1# Failed test at $0 line 274. 2575759b3d2Safresh1# Structures begin differing at: 2585759b3d2Safresh1# \$got->[1] = 'b' 2595759b3d2Safresh1# \$expected->[1] = 'c' 2605759b3d2Safresh1ERR 2615759b3d2Safresh1 2625759b3d2Safresh1 2635759b3d2Safresh1#line 285 2645759b3d2Safresh1my $ref = \23; 2655759b3d2Safresh1ok !is_deeply( 23, $ref ); 2665759b3d2Safresh1is( $out, "not ok 21\n", 'scalar vs ref' ); 2675759b3d2Safresh1is( $err, <<ERR, ' right diagnostic'); 2685759b3d2Safresh1# Failed test at $0 line 286. 2695759b3d2Safresh1# Structures begin differing at: 2705759b3d2Safresh1# \$got = '23' 2715759b3d2Safresh1# \$expected = $ref 2725759b3d2Safresh1ERR 2735759b3d2Safresh1 2745759b3d2Safresh1#line 296 2755759b3d2Safresh1ok !is_deeply( $ref, 23 ); 2765759b3d2Safresh1is( $out, "not ok 22\n", 'ref vs scalar' ); 2775759b3d2Safresh1is( $err, <<ERR, ' right diagnostic'); 2785759b3d2Safresh1# Failed test at $0 line 296. 2795759b3d2Safresh1# Structures begin differing at: 2805759b3d2Safresh1# \$got = $ref 2815759b3d2Safresh1# \$expected = '23' 2825759b3d2Safresh1ERR 2835759b3d2Safresh1 2845759b3d2Safresh1#line 306 2855759b3d2Safresh1ok !is_deeply( undef, [] ); 2865759b3d2Safresh1is( $out, "not ok 23\n", 'is_deeply and undef [RT 9441]' ); 2875759b3d2Safresh1like( $err, <<ERR, ' right diagnostic' ); 2885759b3d2Safresh1# Failed test at $Filename line 306\\. 2895759b3d2Safresh1# Structures begin differing at: 2905759b3d2Safresh1# \\\$got = undef 2915759b3d2Safresh1# \\\$expected = ARRAY\\(0x[0-9a-f]+\\) 2925759b3d2Safresh1ERR 2935759b3d2Safresh1 2945759b3d2Safresh1 2955759b3d2Safresh1# rt.cpan.org 8865 2965759b3d2Safresh1{ 2975759b3d2Safresh1 my $array = []; 2985759b3d2Safresh1 my $hash = {}; 2995759b3d2Safresh1 3005759b3d2Safresh1#line 321 3015759b3d2Safresh1 ok !is_deeply( $array, $hash ); 3025759b3d2Safresh1 is( $out, "not ok 24\n", 'is_deeply and different reference types' ); 3035759b3d2Safresh1 is( $err, <<ERR, ' right diagnostic' ); 3045759b3d2Safresh1# Failed test at $0 line 321. 3055759b3d2Safresh1# Structures begin differing at: 3065759b3d2Safresh1# \$got = $array 3075759b3d2Safresh1# \$expected = $hash 3085759b3d2Safresh1ERR 3095759b3d2Safresh1 3105759b3d2Safresh1#line 332 3115759b3d2Safresh1 ok !is_deeply( [$array], [$hash] ); 3125759b3d2Safresh1 is( $out, "not ok 25\n", 'nested different ref types' ); 3135759b3d2Safresh1 is( $err, <<ERR, ' right diagnostic' ); 3145759b3d2Safresh1# Failed test at $0 line 332. 3155759b3d2Safresh1# Structures begin differing at: 3165759b3d2Safresh1# \$got->[0] = $array 3175759b3d2Safresh1# \$expected->[0] = $hash 3185759b3d2Safresh1ERR 3195759b3d2Safresh1 3205759b3d2Safresh1 3215759b3d2Safresh1 # Overloaded object tests 3225759b3d2Safresh1 { 3235759b3d2Safresh1 my $foo = bless [], "Foo"; 3245759b3d2Safresh1 my $bar = bless {}, "Bar"; 3255759b3d2Safresh1 3265759b3d2Safresh1 { 3275759b3d2Safresh1 package Bar; 3285759b3d2Safresh1 "overload"->import(q[""] => sub { "wibble" }); 3295759b3d2Safresh1 } 3305759b3d2Safresh1 3315759b3d2Safresh1#line 353 3325759b3d2Safresh1 ok !is_deeply( [$foo], [$bar] ); 3335759b3d2Safresh1 is( $out, "not ok 26\n", 'string overloaded refs respected in diag' ); 3345759b3d2Safresh1 is( $err, <<ERR, ' right diagnostic' ); 3355759b3d2Safresh1# Failed test at $0 line 353. 3365759b3d2Safresh1# Structures begin differing at: 3375759b3d2Safresh1# \$got->[0] = $foo 3385759b3d2Safresh1# \$expected->[0] = 'wibble' 3395759b3d2Safresh1ERR 3405759b3d2Safresh1 3415759b3d2Safresh1 } 3425759b3d2Safresh1} 3435759b3d2Safresh1 3445759b3d2Safresh1 3455759b3d2Safresh1# rt.cpan.org 14746 3465759b3d2Safresh1{ 3475759b3d2Safresh1# line 349 3485759b3d2Safresh1 ok !is_deeply( sub {"foo"}, sub {"bar"} ), 'function refs'; 3495759b3d2Safresh1 is( $out, "not ok 27\n" ); 3505759b3d2Safresh1 like( $err, <<ERR, ' right diagnostic' ); 3515759b3d2Safresh1# Failed test at $Filename line 349. 3525759b3d2Safresh1# Structures begin differing at: 3535759b3d2Safresh1# \\\$got = CODE\\(0x[0-9a-f]+\\) 3545759b3d2Safresh1# \\\$expected = CODE\\(0x[0-9a-f]+\\) 3555759b3d2Safresh1ERR 3565759b3d2Safresh1 3575759b3d2Safresh1 3585759b3d2Safresh1 use Symbol; 3595759b3d2Safresh1 my $glob1 = gensym; 3605759b3d2Safresh1 my $glob2 = gensym; 3615759b3d2Safresh1 3625759b3d2Safresh1#line 357 3635759b3d2Safresh1 ok !is_deeply( $glob1, $glob2 ), 'typeglobs'; 3645759b3d2Safresh1 is( $out, "not ok 28\n" ); 3655759b3d2Safresh1 like( $err, <<ERR, ' right diagnostic' ); 3665759b3d2Safresh1# Failed test at $Filename line 357. 3675759b3d2Safresh1# Structures begin differing at: 3685759b3d2Safresh1# \\\$got = GLOB\\(0x[0-9a-f]+\\) 3695759b3d2Safresh1# \\\$expected = GLOB\\(0x[0-9a-f]+\\) 3705759b3d2Safresh1ERR 3715759b3d2Safresh1 3725759b3d2Safresh1} 3735759b3d2Safresh1 3745759b3d2Safresh1 3755759b3d2Safresh1# rt.cpan.org 53469 3765759b3d2Safresh1{ 3775759b3d2Safresh1 3785759b3d2Safresh1 # Accept both old and new-style stringification 3795759b3d2Safresh1 my $modifiers = (qr/foobar/ =~ /\Q(?^/) ? '^' : '-xism'; 3805759b3d2Safresh1#line 380 3815759b3d2Safresh1 ok !is_deeply( qr/a/, qr/b/, "different regexes" ); 3825759b3d2Safresh1 is( $out, "not ok 29 - different regexes\n" ); 3835759b3d2Safresh1 is( $err, <<ERR, ' right diagnostic' ); 3845759b3d2Safresh1# Failed test 'different regexes' 3855759b3d2Safresh1# at $0 line 380. 3865759b3d2Safresh1# Structures begin differing at: 3875759b3d2Safresh1# \$got = (?$modifiers:a) 3885759b3d2Safresh1# \$expected = (?$modifiers:b) 3895759b3d2Safresh1ERR 3905759b3d2Safresh1} 3915759b3d2Safresh1 3925759b3d2Safresh1 3935759b3d2Safresh1# false values that should not compare equal 3945759b3d2Safresh1{ 3955759b3d2Safresh1 ok !is_deeply( 0, '', "0 != ''" ); 3965759b3d2Safresh1 is( $out, "not ok 30 - 0 != ''\n" ); 3975759b3d2Safresh1 ok !is_deeply( 0, undef, "0 != undef" ); 3985759b3d2Safresh1 is( $out, "not ok 31 - 0 != undef\n" ); 3995759b3d2Safresh1 ok !is_deeply( '', undef, "'' != undef" ); 4005759b3d2Safresh1 is( $out, "not ok 32 - '' != undef\n" ); 4015759b3d2Safresh1 4025759b3d2Safresh1 ok !is_deeply( [0], [''], "[0] != ['']" ); 4035759b3d2Safresh1 is( $out, "not ok 33 - [0] != ['']\n" ); 4045759b3d2Safresh1 ok !is_deeply( [0], [undef], "[0] != [undef]" ); 4055759b3d2Safresh1 is( $out, "not ok 34 - [0] != [undef]\n" ); 4065759b3d2Safresh1 ok !is_deeply( [''], [undef], "[''] != [undef]" ); 4075759b3d2Safresh1 is( $out, "not ok 35 - [''] != [undef]\n" ); 4085759b3d2Safresh1 4095759b3d2Safresh1 ok !is_deeply( [0], [], "[0] != []" ); 4105759b3d2Safresh1 is( $out, "not ok 36 - [0] != []\n" ); 4115759b3d2Safresh1 ok !is_deeply( [undef], [], "[undef] != []" ); 4125759b3d2Safresh1 is( $out, "not ok 37 - [undef] != []\n" ); 4135759b3d2Safresh1 ok !is_deeply( [''], [], "[''] != []" ); 4145759b3d2Safresh1 is( $out, "not ok 38 - [''] != []\n" ); 4155759b3d2Safresh1 4165759b3d2Safresh1 ok !is_deeply( {x => 0}, {x => ''}, "{x => 0} != {x => ''}" ); 4175759b3d2Safresh1 is( $out, "not ok 39 - {x => 0} != {x => ''}\n" ); 4185759b3d2Safresh1 ok !is_deeply( {x => 0}, {x => undef}, "{x => 0} != {x => undef}" ); 4195759b3d2Safresh1 is( $out, "not ok 40 - {x => 0} != {x => undef}\n" ); 4205759b3d2Safresh1 ok !is_deeply( {x => ''}, {x => undef}, "{x => ''} != {x => undef}" ); 4215759b3d2Safresh1 is( $out, "not ok 41 - {x => ''} != {x => undef}\n" ); 4225759b3d2Safresh1} 4235759b3d2Safresh1 4245759b3d2Safresh1# this will also happily fail before 5.10, even though there's no VSTRING ref type 4255759b3d2Safresh1{ 4265759b3d2Safresh1 my $version1 = v1.2.3; 4275759b3d2Safresh1 my $version2 = v1.2.4; 4285759b3d2Safresh1 ok !is_deeply( [\\$version1], [\\$version2], "version objects"); 4295759b3d2Safresh1 is( $out, "not ok 42 - version objects\n" ); 4305759b3d2Safresh1} 431*5486feefSafresh1 432*5486feefSafresh1{ 433*5486feefSafresh1 my $version1 = v1.2.3; 434*5486feefSafresh1 my $version2 = '' . v1.2.3; 435*5486feefSafresh1 ok is_deeply( [\$version1], [\$version2], "version objects"); 436*5486feefSafresh1 is( $out, "ok 43 - version objects\n" ); 437*5486feefSafresh1} 438*5486feefSafresh1 439*5486feefSafresh1{ 440*5486feefSafresh1 my $version1 = v1.2.3; 441*5486feefSafresh1 my $version2 = v1.2.3; 442*5486feefSafresh1 ok !is_deeply( [$version1], [\$version2], "version objects"); 443*5486feefSafresh1 is( $out, "not ok 44 - version objects\n" ); 444*5486feefSafresh1} 445*5486feefSafresh1 446*5486feefSafresh1{ 447*5486feefSafresh1 my $string = "abc"; 448*5486feefSafresh1 my $string2 = "b"; 449*5486feefSafresh1 ok is_deeply( [\substr($string, 1, 1)], [\$string2], "lvalue ref"); 450*5486feefSafresh1 is( $out, "ok 45 - lvalue ref\n" ); 451*5486feefSafresh1} 452*5486feefSafresh1 453*5486feefSafresh1{ 454*5486feefSafresh1 my $string = "b"; 455*5486feefSafresh1 my $string2 = "b"; 456*5486feefSafresh1 ok !is_deeply( [\substr($string, 1, 1)], ["b"], "lvalue ref"); 457*5486feefSafresh1 is( $out, "not ok 46 - lvalue ref\n" ); 458*5486feefSafresh1} 459