Commit | Line | Data |
---|---|---|
0f1612a7 | 1 | use strict; |
2 | use warnings; | |
3 | ||
31623e47 | 4 | BEGIN { |
0f1612a7 | 5 | if ($ENV{'PERL_CORE'}){ |
6 | chdir 't'; | |
7 | unshift @INC, '../lib'; | |
8 | } | |
9 | use Config; | |
fc04eb16 | 10 | if (! $Config{'useithreads'}) { |
11 | print("1..0 # Skip: Perl not compiled with 'useithreads'\n"); | |
12 | exit(0); | |
31623e47 | 13 | } |
14 | } | |
15 | ||
16 | use ExtUtils::testlib; | |
0f1612a7 | 17 | |
a662d730 | 18 | my $test = 0; |
fc04eb16 | 19 | sub ok { |
a662d730 | 20 | my ($ok, $name) = @_; |
21 | $test++; | |
fc04eb16 | 22 | |
31623e47 | 23 | # You have to do it this way or VMS will get confused. |
fc04eb16 | 24 | if ($ok) { |
a662d730 | 25 | print("ok $test - $name\n"); |
fc04eb16 | 26 | } else { |
a662d730 | 27 | print("not ok $test - $name\n"); |
fc04eb16 | 28 | printf("# Failed test at line %d\n", (caller)[2]); |
29 | } | |
31623e47 | 30 | |
fc04eb16 | 31 | return ($ok); |
31623e47 | 32 | } |
33 | ||
fc04eb16 | 34 | BEGIN { |
35 | $| = 1; | |
a662d730 | 36 | print("1..61\n"); ### Number of tests that will be run ### |
fc04eb16 | 37 | }; |
38 | ||
39 | use threads; | |
a662d730 | 40 | ok(1, 'Loaded'); |
31623e47 | 41 | |
fc04eb16 | 42 | ### Start of Testing ### |
31623e47 | 43 | |
894eec8b | 44 | my $cnt = 30; |
45 | ||
46 | sub stress_re { | |
fc04eb16 | 47 | my $s = "abcd" x (1000 + $_[0]); |
48 | my $t = ''; | |
49 | while ($s =~ /(.)/g) { $t .= $1 } | |
894eec8b | 50 | return ($s eq $t) ? 'ok' : 'not'; |
31623e47 | 51 | } |
894eec8b | 52 | |
31623e47 | 53 | my @threads; |
894eec8b | 54 | for (1..$cnt) { |
a662d730 | 55 | my $thr = threads->create('stress_re', $_); |
56 | ok($thr, "Thread created - iter $_"); | |
57 | push(@threads, $thr); | |
31623e47 | 58 | } |
59 | ||
894eec8b | 60 | for (1..$cnt) { |
a662d730 | 61 | my ($result, $thr); |
62 | $thr = $threads[$_-1]; | |
63 | $result = $thr->join if $thr; | |
64 | ok($thr && defined($result) && ($result eq 'ok'), "Thread joined - iter $_"); | |
31623e47 | 65 | } |
66 | ||
fc04eb16 | 67 | # EOF |