1*5759b3d2Safresh1use strict; 2*5759b3d2Safresh1use warnings; 3*5759b3d2Safresh1 4*5759b3d2Safresh1BEGIN { 5*5759b3d2Safresh1 use Config; 6*5759b3d2Safresh1 if (! $Config{'useithreads'}) { 7*5759b3d2Safresh1 print("1..0 # SKIP Perl not compiled with 'useithreads'\n"); 8*5759b3d2Safresh1 exit(0); 9*5759b3d2Safresh1 } 10*5759b3d2Safresh1 if ($] >= 5.027000) { 11*5759b3d2Safresh1 print("1..0 # SKIP 'unique' attribute no longer exists\n"); 12*5759b3d2Safresh1 exit(0); 13*5759b3d2Safresh1 } 14*5759b3d2Safresh1} 15*5759b3d2Safresh1 16*5759b3d2Safresh1use ExtUtils::testlib; 17*5759b3d2Safresh1 18*5759b3d2Safresh1use threads; 19*5759b3d2Safresh1 20*5759b3d2Safresh1BEGIN { 21*5759b3d2Safresh1 if (! eval 'use threads::shared; 1') { 22*5759b3d2Safresh1 print("1..0 # SKIP threads::shared not available\n"); 23*5759b3d2Safresh1 exit(0); 24*5759b3d2Safresh1 } 25*5759b3d2Safresh1 26*5759b3d2Safresh1 $| = 1; 27*5759b3d2Safresh1 print("1..6\n") ; ### Number of tests that will be run ### 28*5759b3d2Safresh1} 29*5759b3d2Safresh1 30*5759b3d2Safresh1print("ok 1 - Loaded\n"); 31*5759b3d2Safresh1 32*5759b3d2Safresh1### Start of Testing ### 33*5759b3d2Safresh1 34*5759b3d2Safresh1no warnings 'deprecated'; # Suppress warnings related to :unique 35*5759b3d2Safresh1 36*5759b3d2Safresh1my $test :shared = 2; 37*5759b3d2Safresh1 38*5759b3d2Safresh1# bugid 24383 - :unique hashes weren't being made readonly on interpreter 39*5759b3d2Safresh1# clone; check that they are. 40*5759b3d2Safresh1 41*5759b3d2Safresh1our $unique_scalar : unique; 42*5759b3d2Safresh1our @unique_array : unique; 43*5759b3d2Safresh1our %unique_hash : unique; 44*5759b3d2Safresh1threads->create(sub { 45*5759b3d2Safresh1 lock($test); 46*5759b3d2Safresh1 my $TODO = ":unique needs to be re-implemented in a non-broken way"; 47*5759b3d2Safresh1 eval { $unique_scalar = 1 }; 48*5759b3d2Safresh1 print $@ =~ /read-only/ 49*5759b3d2Safresh1 ? '' : 'not ', "ok $test # TODO $TODO - unique_scalar\n"; 50*5759b3d2Safresh1 $test++; 51*5759b3d2Safresh1 eval { $unique_array[0] = 1 }; 52*5759b3d2Safresh1 print $@ =~ /read-only/ 53*5759b3d2Safresh1 ? '' : 'not ', "ok $test # TODO $TODO - unique_array\n"; 54*5759b3d2Safresh1 $test++; 55*5759b3d2Safresh1 if ($] >= 5.008003 && $^O ne 'MSWin32') { 56*5759b3d2Safresh1 eval { $unique_hash{abc} = 1 }; 57*5759b3d2Safresh1 print $@ =~ /disallowed/ 58*5759b3d2Safresh1 ? '' : 'not ', "ok $test # TODO $TODO - unique_hash\n"; 59*5759b3d2Safresh1 } else { 60*5759b3d2Safresh1 print("ok $test # SKIP $TODO - unique_hash\n"); 61*5759b3d2Safresh1 } 62*5759b3d2Safresh1 $test++; 63*5759b3d2Safresh1 })->join; 64*5759b3d2Safresh1 65*5759b3d2Safresh1# bugid #24940 :unique should fail on my and sub declarations 66*5759b3d2Safresh1 67*5759b3d2Safresh1for my $decl ('my $x : unique', 'sub foo : unique') { 68*5759b3d2Safresh1 { 69*5759b3d2Safresh1 lock($test); 70*5759b3d2Safresh1 if ($] >= 5.008005) { 71*5759b3d2Safresh1 eval $decl; 72*5759b3d2Safresh1 print $@ =~ /^The 'unique' attribute may only be applied to 'our' variables/ 73*5759b3d2Safresh1 ? '' : 'not ', "ok $test - $decl\n"; 74*5759b3d2Safresh1 } else { 75*5759b3d2Safresh1 print("ok $test # SKIP $decl\n"); 76*5759b3d2Safresh1 } 77*5759b3d2Safresh1 $test++; 78*5759b3d2Safresh1 } 79*5759b3d2Safresh1} 80*5759b3d2Safresh1 81*5759b3d2Safresh1 82