use strict;
use warnings;
use Test::Most tests => 17, 'die';
use threads;
use Thread::Task::Worker;
use Thread::Task::Thread;
is( scalar( threads->list ), 0, 'One thread exists' );
SCOPE: {
my $master = Thread::Task::Thread->new->spawn;
isa_ok( $master, 'Thread::Task::Thread' );
is( scalar( threads->list ), 1, 'Found 1 thread' );
ok( $master->is_running, 'Master is_running' );
my $worker = Thread::Task::Worker->new;
isa_ok( $worker, 'Thread::Task::Worker' );
$master->start($worker);
sleep 1;
is( scalar( threads->list ), 2, 'Found 2 threads' );
ok( $master->is_running, 'Master is_running' );
ok( !$master->is_joinable, 'Master is not is_joinable' );
ok( !$master->is_detached, 'Master is not is_detached' );
ok( $worker->is_running, 'Worker is_running' );
ok( !$worker->is_joinable, 'Worker is not is_joinable' );
ok( !$worker->is_detached, 'Worker is not is_detached' );
$worker->stop;
sleep 1;
ok( $master->is_running, 'Master is_running' );
ok( !$master->is_joinable, 'Master is not is_joinable' );
ok( !$master->is_detached, 'Master is not is_detached' );
ok( !$worker->thread, 'Worker thread has ended' );
}
is( scalar( threads->list ), 1, 'Thread is gone' );