Test arrays containing references, and references to shared arrays.
[p5sagit/p5-mst-13.2.git] / ext / threads / shared / t / av_refs.t
1 BEGIN {
2 #    chdir 't' if -d 't';
3 #    push @INC ,'../lib';
4     require Config; import Config;
5     unless ($Config{'useithreads'}) {
6         print "1..0 # Skip: no useithreads\n";
7         exit 0;
8     }
9 }
10
11
12 sub ok {
13     my ($id, $ok, $name) = @_;
14
15     # You have to do it this way or VMS will get confused.
16     print $ok ? "ok $id - $name\n" : "not ok $id - $name\n";
17
18     printf "# Failed test at line %d\n", (caller)[2] unless $ok;
19
20     return $ok;
21 }
22
23 use ExtUtils::testlib;
24 use strict;
25 BEGIN { print "1..11\n" };
26 use threads;
27 use threads::shared;
28 ok(1,1,"loaded");
29
30 my $sv;
31 share($sv);
32 $sv = "hi";
33 my @av;
34 share(@av);
35 push @av, $sv;
36 ok(2, $av[0] eq "hi");
37 push @av, "foo";
38 ok(3, $av[1] eq 'foo');
39 my $av = threads->create(sub {  
40     my $av;     
41     my @av2;
42     share($av);
43     share(@av2);
44     $av = \@av2;
45     push @$av, "bar", \@av;
46     return $av;
47 })->join();
48 ok(4,$av->[0] eq "bar");
49 ok(5,$av->[1]->[0] eq 'hi');
50 threads->create(sub { $av[0] = "hihi" })->join();
51 ok(6,$av->[1]->[0] eq 'hihi');
52 ok(7, pop(@{$av->[1]}) eq "foo");
53 ok(8, scalar(@{$av->[1]}) == 1);
54 threads->create(sub { @$av = () })->join();
55 threads->create(sub { ok(9, scalar @$av == 0)})->join();
56 threads->create(sub { unshift(@$av, threads->create(sub { my @array; share(@array); return \@array})->join())})->join();
57 ok(10, ref($av->[0]) eq 'ARRAY');
58 threads->create(sub { push @{$av->[0]}, \@av })->join();
59 threads->create(sub { $av[0] = 'testtest'})->join();
60 threads->create(sub { ok(11, $av->[0]->[0]->[0] eq 'testtest')})->join();
61
62
63
64
65
66