1#!./perl -Tw
2
3# Tests of threads::shared's behavior when threads are disabled.
4
5BEGIN {
6    chdir 't';
7    @INC = '../lib';
8    require Config;
9    if (($Config::Config{'extensions'} !~ m!\bthreads/shared\b!) ){
10        print "1..0 # Skip -- Perl configured without threads::shared module\n";
11        exit 0;
12    }
13}
14
15# Can't use Test::More, it turns threads on.
16use Test;
17plan tests => 31;
18
19use threads::shared;
20
21# Make sure threads are really off.
22ok( !$INC{"threads.pm"} );
23
24# Check each faked function.
25foreach my $func (qw(share cond_wait cond_signal cond_broadcast)) {
26    ok( my $func_ref = __PACKAGE__->can($func) ? 1 : 0 );
27
28    eval qq{$func()};
29    ok( $@, qr/^Not enough arguments / );
30
31    my %hash = (foo => 42, bar => 23);
32    eval qq{$func(\%hash)};
33    ok( $@, '' );
34    ok( $hash{foo}, 42 );
35    ok( $hash{bar}, 23 );
36}
37
38# These all have no return value.
39foreach my $func (qw(cond_wait cond_signal cond_broadcast)) {
40    my @array = qw(1 2 3 4);
41    ok( eval qq{$func(\@array)}, undef );
42    ok( "@array", "1 2 3 4" );
43}
44
45# share() is supposed to return back it's argument as a ref.
46{
47    my @array = qw(1 2 3 4);
48    ok( share(@array), \@array );
49    ok( ref &share({}), 'HASH' );
50    ok( "@array", "1 2 3 4" );
51}
52
53# lock() should be a no-op.  The return value is currently undefined.
54{
55    my @array = qw(1 2 3 4);
56    lock(@array);
57    ok( "@array", "1 2 3 4" );
58}
59