GvNAME() is shared from 5.10 onwards.
[p5sagit/Devel-Size.git] / t / globs.t
index 0fecd46..ae32309 100644 (file)
--- a/t/globs.t
+++ b/t/globs.t
@@ -60,9 +60,18 @@ $SIG{__WARN__} = sub {
     my $copy = *PFLAP;
     my $copy_gv_size = total_size($copy);
     # GV copies point back to the real GV through GvEGV. They share the same GP
-    # and GvFILE
-    is($copy_gv_size, $real_gv_size + $incremental_gv_size - $gp_size,
-      'GV copies point back to the real GV');
+    # and GvFILE. In 5.10 and later GvNAME is also shared.
+    my $shared_gvname = 0;
+    if ($] >= 5.010) {
+       # Calculate the size of the shared HEK:
+       my %h = (PFLAP => 0);
+       my $shared = (keys %h)[0];
+       $shared_gvname = total_size($shared);
+       undef $shared;
+       $shared_gvname-= total_size($shared);
+    }
+    is($copy_gv_size, $real_gv_size + $incremental_gv_size - $gp_size
+       - $shared_gvname, 'GV copies point back to the real GV');
 }
 
 sub gv_grew {
@@ -99,11 +108,11 @@ sub gv_grew {
     cmp_ok($new_thing_size, '>', 0, "For $type, new item has a size");
 
     is($cv_now_size, $cv_was_size,
-       "Under multiplicity, the optree doesn't directly close onto a GV, so CVs won't change size")
-           if $Config{usemultiplicity};
+       "Under ithreads, the optree doesn't directly close onto a GV, so CVs won't change size")
+           if $Config{useithreads};
     if ($] < 5.010 && $type eq 'SCALAR') {
        is($cv_now_size, $cv_was_size, "CV doesn't grow as GV has SCALAR")
-           unless $Config{usemultiplicity};
+           unless $Config{useithreads};
        is($io_now_size, $io_was_size, "IO doesn't grow as GV has SCALAR");
        is($gv_now_size, $gv_was_size, 'GV size unchanged as GV has SCALAR');
        is($gv_now_total_size, $gv_was_total_size,
@@ -112,7 +121,7 @@ sub gv_grew {
        # CV like things (effectively) close back over their typeglob, so its
        # hard to just get the size of the CV.
        cmp_ok($cv_now_size, '>', $cv_was_size, "CV grew for $type")
-           unless $Config{usemultiplicity};
+           unless $Config{useithreads};
        cmp_ok($io_now_size, '>', $io_was_size, "IO grew for $type");
        # Assigning CVs and FORMATs to typeglobs causes the typeglob to get
        # weak reference magic
@@ -122,7 +131,7 @@ sub gv_grew {
     } else {
        is($cv_now_size, $cv_was_size + $new_thing_size,
           "CV grew by expected amount for $type")
-                   unless $Config{usemultiplicity};
+                   unless $Config{useithreads};
        is($io_now_size, $io_was_size + $new_thing_size,
           "IO total_size grew by expected amount for $type");
        is($gv_now_size, $gv_was_size + $new_thing_size,
@@ -135,7 +144,8 @@ sub gv_grew {
 gv_grew('glipp', 'zok', 'no strict "vars"; $zok = undef; 1', 'SCALAR');
 gv_grew('bang', 'boff', 'no strict "vars"; @boff = (); 1', 'ARRAY');
 gv_grew('clange', 'sock', 'no strict "vars"; %sock = (); 1', 'HASH');
-{
+SKIP: {
+    skip("Can't create FORMAT references prior to 5.8.0", 7) if $] < 5.008;
     local $Devel::Size::warn = 0;
     gv_grew('biff', 'zapeth', "format zapeth =\n.\n1", 'FORMAT');
 }