The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
BEGIN {				# Magic Perl CORE pragma
    if ($ENV{PERL_CORE}) {
        chdir 't' if -d 't';
        @INC = '../lib';
    }
}

use Test::More tests => 18;
use strict;
use warnings;

use_ok( 'Thread::Running', qw(exited running tojoin) );
can_ok( 'main',qw(
 running
 tojoin
 exited
) );

my $sleep = 2;
my $threads = 5;

my $thread = threads->create( sub { sleep $sleep } );
my $tid = $thread->tid;
sleep 1 until $thread->running;
ok( 1,'thread is running' );

is( scalar running( $thread ),"1", "check running by thread" );
is( scalar running( $tid ),"1", "check running by tid" );

sleep 1 until $thread->tojoin;
ok( 1,'thread can be joined' );

is( scalar exited( $thread ),"1", "check exited by thread" );
is( scalar exited( $tid ),"1", "check exited by tid" );

is( scalar tojoin( $thread ),"1", "check tojoin by thread" );
is( scalar tojoin( $tid ),"1", "check tojoin by tid" );

$thread->join;

my @thread;
foreach (1..$threads) {
    push @thread,threads->create( sub { sleep $sleep } );
}
my @tid = map { $_->tid } @thread;
sleep 1 until (() = threads->running( @thread )) == @tid;
ok( 1,'all threads are running' );

is( "@{[running( @thread )]}","@tid", "check running by threads" );
is( "@{[running( @tid )]}","@tid", "check running by tids" );

sleep 1 until (() = threads->tojoin( @thread )) == @tid;
ok( 1,'all threads can be joined' );

is( "@{[exited( @thread )]}","@tid", "check exited by threads" );
is( "@{[exited( @tid )]}","@tid", "check exited by tids" );

is( "@{[map {$_->tid} tojoin( @thread )]}","@tid", "check tojoin by threads" );
is( "@{[map {$_->tid} tojoin( @tid )]}","@tid", "check tojoin by tids" );

$_->join foreach @thread;