82 lines
2.0 KiB
Perl
82 lines
2.0 KiB
Perl
use strict;
|
|
use warnings;
|
|
|
|
BEGIN {
|
|
use Config;
|
|
if (! $Config{'useithreads'}) {
|
|
print("1..0 # SKIP Perl not compiled with 'useithreads'\n");
|
|
exit(0);
|
|
}
|
|
if ($] >= 5.027000) {
|
|
print("1..0 # SKIP 'unique' attribute no longer exists\n");
|
|
exit(0);
|
|
}
|
|
}
|
|
|
|
use ExtUtils::testlib;
|
|
|
|
use threads;
|
|
|
|
BEGIN {
|
|
if (! eval 'use threads::shared; 1') {
|
|
print("1..0 # SKIP threads::shared not available\n");
|
|
exit(0);
|
|
}
|
|
|
|
$| = 1;
|
|
print("1..6\n") ; ### Number of tests that will be run ###
|
|
}
|
|
|
|
print("ok 1 - Loaded\n");
|
|
|
|
### Start of Testing ###
|
|
|
|
no warnings 'deprecated'; # Suppress warnings related to :unique
|
|
|
|
my $test :shared = 2;
|
|
|
|
# bugid 24383 - :unique hashes weren't being made readonly on interpreter
|
|
# clone; check that they are.
|
|
|
|
our $unique_scalar : unique;
|
|
our @unique_array : unique;
|
|
our %unique_hash : unique;
|
|
threads->create(sub {
|
|
lock($test);
|
|
my $TODO = ":unique needs to be re-implemented in a non-broken way";
|
|
eval { $unique_scalar = 1 };
|
|
print $@ =~ /read-only/
|
|
? '' : 'not ', "ok $test # TODO $TODO - unique_scalar\n";
|
|
$test++;
|
|
eval { $unique_array[0] = 1 };
|
|
print $@ =~ /read-only/
|
|
? '' : 'not ', "ok $test # TODO $TODO - unique_array\n";
|
|
$test++;
|
|
if ($] >= 5.008003 && $^O ne 'MSWin32') {
|
|
eval { $unique_hash{abc} = 1 };
|
|
print $@ =~ /disallowed/
|
|
? '' : 'not ', "ok $test # TODO $TODO - unique_hash\n";
|
|
} else {
|
|
print("ok $test # SKIP $TODO - unique_hash\n");
|
|
}
|
|
$test++;
|
|
})->join;
|
|
|
|
# bugid #24940 :unique should fail on my and sub declarations
|
|
|
|
for my $decl ('my $x : unique', 'sub foo : unique') {
|
|
{
|
|
lock($test);
|
|
if ($] >= 5.008005) {
|
|
eval $decl;
|
|
print $@ =~ /^The 'unique' attribute may only be applied to 'our' variables/
|
|
? '' : 'not ', "ok $test - $decl\n";
|
|
} else {
|
|
print("ok $test # SKIP $decl\n");
|
|
}
|
|
$test++;
|
|
}
|
|
}
|
|
|
|
|