Ooops. Not everybody does threads.
[p5sagit/p5-mst-13.2.git] / ext / threads / shared / t / av_refs.t
CommitLineData
8eea0bff 1BEGIN {
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
12sub 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
23use ExtUtils::testlib;
24use strict;
25BEGIN { print "1..11\n" };
26use threads;
27use threads::shared;
28ok(1,1,"loaded");
29
30my $sv;
31share($sv);
32$sv = "hi";
33my @av;
34share(@av);
35push @av, $sv;
36ok(2, $av[0] eq "hi");
37push @av, "foo";
38ok(3, $av[1] eq 'foo');
39my $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();
48ok(4,$av->[0] eq "bar");
49ok(5,$av->[1]->[0] eq 'hi');
50threads->create(sub { $av[0] = "hihi" })->join();
51ok(6,$av->[1]->[0] eq 'hihi');
52ok(7, pop(@{$av->[1]}) eq "foo");
53ok(8, scalar(@{$av->[1]}) == 1);
54threads->create(sub { @$av = () })->join();
55threads->create(sub { ok(9, scalar @$av == 0)})->join();
56threads->create(sub { unshift(@$av, threads->create(sub { my @array; share(@array); return \@array})->join())})->join();
57ok(10, ref($av->[0]) eq 'ARRAY');
58threads->create(sub { push @{$av->[0]}, \@av })->join();
59threads->create(sub { $av[0] = 'testtest'})->join();
60threads->create(sub { ok(11, $av->[0]->[0]->[0] eq 'testtest')})->join();
61
62
63
64
65
66