#!/usr/local/bin/perl -T -w
BEGIN {
if ($ENV{PERL_CORE}) {
chdir 't' if -d 't';
@INC = '../lib';
} elsif (!grep /blib/, @INC) {
chdir 't' if -d 't';
unshift @INC, ('../blib/lib', '../blib/arch');
}
}
BEGIN {delete $ENV{THREADS_DEBUG}} # no debugging during testing!
use forks; # must be done _before_ Test::More which loads real threads.pm
use forks::shared;
use Config;
my ($reason,$tests,$entries);
BEGIN {
$entries = 25;
$tests = 3 + (3 * $entries);
eval {require Thread::Queue};
$reason = '';
$reason = 'Thread::Queue not found'
unless defined $Thread::Queue::VERSION;
$tests = 1 if $reason;
} #BEGIN
use Test::More tests => $tests;
use strict;
use warnings;
SKIP: {
skip $reason, $tests if $reason;
my $q = Thread::Queue->new;
isa_ok( $q,'Thread::Queue', "Check if object has correct type" );
#------------------------------------------------------------------------
# queueing from child thread, dequeuing from main thread
threads->new( sub {
$q->enqueue( 1..$entries );
} )->join;
is( $q->pending,$entries,"Check all $entries entries on queue" );
foreach (1..$entries) {
my $value = $q->dequeue;
is( $value,$_,"Check whether '$_' gotten from queue in main" );
}
#------------------------------------------------------------------------
# queueing from main thread, non-blocking dequeuing from child thread
$q = Thread::Queue->new( 1..$entries );
is( $q->pending,$entries,"Check all $entries entries on queue" );
threads->new( sub {
foreach (1..$entries) {
my $value = $q->dequeue_nb;
is( $value,$_,"Check '$_' gotten from queue in child" );
}
} )->join;
#------------------------------------------------------------------------
# queueing and dequeueing from child threads
my $enqueue = threads->new( sub {
foreach (1..$entries) {
$q->enqueue( $_ );
}
} );
my $dequeue = threads->new( sub {
foreach (1..$entries) {
my $value = $q->dequeue;
is( $value,$_,"Check '$_' gotten from queue in other child" );
}
} );
$enqueue->join;
$dequeue->join;
#------------------------------------------------------------------------
} #SKIP
1;
syntax highlighted by Code2HTML, v. 0.9.1