1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => "Not used on Cygwin" if ( $^O eq 'cygwin' );
if ( $] lt '5.010001' && $^O ne 'MSWin32' ) {
plan skip_all => "old Perl and threads not supported on Unix platforms";
}
eval 'use threads'; ## no critic
plan skip_all => "threads not available" if $@;
use_ok 'MCE::Channel';
use_ok 'MCE::Channel::ThreadsFast';
}
my $chnl = MCE::Channel->new( impl => 'ThreadsFast', mp => 1 );
is $chnl->impl(), 'ThreadsFast', 'implementation name';
# send recv
{
$chnl->send('a string');
is $chnl->recv, 'a string', 'send recv scalar';
$chnl->send('');
is $chnl->recv, '', 'send recv blank string';
$chnl->send(undef);
is $chnl->recv, '', 'send recv undef stringified';
}
# send recv_nb
if ($^O ne 'MSWin32')
{
$chnl->send('a string');
is $chnl->recv_nb, 'a string', 'send recv_nb scalar';
$chnl->send('');
is $chnl->recv_nb, '', 'send recv_nb blank string';
$chnl->send(undef);
is $chnl->recv_nb, '', 'send recv_nb undef stringified';
}
# send2 recv2
{
$chnl->send2('a string');
is $chnl->recv2, 'a string', 'send2 recv2 scalar';
$chnl->send2('');
is $chnl->recv2, '', 'send2 recv2 blank string';
$chnl->send2(undef);
is $chnl->recv2, '', 'send2 recv2 undef stringified';
}
# send2 recv2_nb
if ($^O ne 'MSWin32')
{
$chnl->send2('a string');
is $chnl->recv2_nb, 'a string', 'send2 recv2_nb scalar';
$chnl->send2('');
is $chnl->recv2_nb, '', 'send2 recv2_nb blank string';
$chnl->send2(undef);
is $chnl->recv2_nb, '', 'send2 recv2_nb undef stringified';
}
# enqueue dequeue
{
$chnl->enqueue('a string');
is $chnl->dequeue, 'a string', 'enqueue dequeue scalar';
$chnl->enqueue(qw/ a list of items /);
is scalar( my $item1 = $chnl->dequeue ), 'a', 'enqueue dequeue item1';
is scalar( my $item2 = $chnl->dequeue ), 'list', 'enqueue dequeue item2';
is scalar( my $item3 = $chnl->dequeue ), 'of', 'enqueue dequeue item3';
is scalar( my $item4 = $chnl->dequeue ), 'items', 'enqueue dequeue item4';
$chnl->enqueue('');
is $chnl->dequeue, '', 'enqueue dequeue blank string';
$chnl->enqueue(undef);
is $chnl->dequeue, '', 'enqueue dequeue undef stringified';
$chnl->enqueue(qw/ a b c /);
is join( '', $chnl->dequeue(3) ), 'abc', 'enqueue dequeue count';
}
# enqueue dequeue_nb
if ($^O ne 'MSWin32')
{
$chnl->enqueue('a string');
is $chnl->dequeue_nb, 'a string', 'enqueue dequeue_nb scalar';
$chnl->enqueue(qw/ a list of items /);
is scalar( my $item1 = $chnl->dequeue_nb ), 'a', 'enqueue dequeue_nb item1';
is scalar( my $item2 = $chnl->dequeue_nb ), 'list', 'enqueue dequeue_nb item2';
is scalar( my $item3 = $chnl->dequeue_nb ), 'of', 'enqueue dequeue_nb item3';
is scalar( my $item4 = $chnl->dequeue_nb ), 'items', 'enqueue dequeue_nb item4';
$chnl->enqueue('');
is $chnl->dequeue_nb, '', 'enqueue dequeue_nb blank string';
$chnl->enqueue(undef);
is $chnl->dequeue_nb, '', 'enqueue dequeue_nb undef stringified';
$chnl->enqueue(qw/ a b c /);
is join( '', $chnl->dequeue_nb(3) ), 'abc', 'enqueue dequeue_nb count';
}
# end
if ($^O ne 'MSWin32')
{
$chnl->enqueue("item $_") for 1 .. 2;
$chnl->end;
for my $method (qw/ send enqueue /) {
local $SIG{__WARN__} = sub {
is $_[0],
"WARNING: ($method) called on a channel that has been 'end'ed\n",
"channel ended, $method";
};
$chnl->$method("item");
}
is $chnl->dequeue_nb, 'item 1', 'channel ended, dequeue_nb item 1';
is $chnl->dequeue_nb, 'item 2', 'channel ended, dequeue_nb item 2';
}
done_testing;
|