Another ex-PVBM assert
[p5sagit/p5-mst-13.2.git] / t / op / state.t
index 6d835c4..411ffaa 100644 (file)
@@ -10,7 +10,7 @@ BEGIN {
 use strict;
 use feature ":5.10";
 
-plan tests => 117;
+plan tests => 123;
 
 ok( ! defined state $uninit, q(state vars are undef by default) );
 
@@ -321,6 +321,33 @@ foreach my $spam (@spam) {
     is $x, "two", "masked"
 }
 
+# normally closureless anon subs share a CV and pad. If the anon sub has a
+# state var, this would mean that it is shared. Check that this doesn't
+# happen
+
+{
+    my @f;
+    push @f, sub { state $x; ++$x } for 1..2;
+    $f[0]->() for 1..10;
+    is $f[0]->(), 11;
+    is $f[1]->(), 1;
+}
+
+# each copy of an anon sub should get its own 'once block'
+
+{
+    my $x; # used to force a closure
+    my @f;
+    push @f, sub { $x=0; state $s = $_[0]; $s } for 1..2;
+    is $f[0]->(1), 1;
+    is $f[0]->(2), 1;
+    is $f[1]->(3), 3;
+    is $f[1]->(4), 3;
+}
+
+
+
+
 foreach my $forbidden (<DATA>) {
     chomp $forbidden;
     no strict 'vars';