BEGIN { # Magic Perl CORE pragma if ($ENV{PERL_CORE}) { chdir 't' if -d 't'; @INC = '../lib'; } } use strict; use warnings; use Test::More tests => 1 + (2 * (4 * 9)); BEGIN { use_ok('Thread::Conveyor::Monitored') } my $file = 'outmonitored'; my $handle; my $class : shared; diag( "Monitoring to file" ); foreach my $optimize (qw(cpu memory)) { foreach my $times (10,100,1000,int(rand(1000))) { diag( "$times boxes optimized for $optimize" ); my $mbelt = Thread::Conveyor::Monitored->new( { optimize => $optimize, pre => sub { open( $handle,">$_[0]" ) or die "Could not open file"; $class = ref(Thread::Conveyor::Monitored->belt); }, monitor => sub { print $handle (%{$_[0]}) }, post => sub { close( $handle ) or die "Could not close file"; return 'anydone' }, }, $file ); isa_ok( $mbelt, 'Thread::Conveyor::Monitored', 'check belt object type' ); my $thread = $mbelt->thread; isa_ok( $thread, 'threads', 'check thread object type' ); $mbelt->put( {$_ => $_+1} ) foreach 1..$times; my $onbelt = $mbelt->onbelt; ok(($onbelt >= 0 and $onbelt <= $times),'check number of values on the belt'); threads->yield until $class; ok( $class =~ m#^Thread::Conveyor::#, 'check result of ->belt' ); is( ($mbelt->shutdown)[0],'anydone', 'check result of shutdown' ); my $check = ''; $check .= ($_.($_+1)) foreach 1..$times; ok( open( my $in,"<$file" ), 'check opening of file' ); is( join('',<$in>), $check, 'check whether monitoring ok' ); ok( close( $in ), 'check closing of file' ); ok( unlink( $file ) ); 1 while unlink $file; # multiversioned filesystems } #$times } #$optimize