The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl 

use strict;
use warnings;
use experimental 'smartmatch';

use Test::More tests => 4;
use Test::Differences;
use threads::lite qw/spawn receive/;

my $thread = spawn({ monitor => 1 }, sub {
	require Time::HiRes;
	my (undef, $queue) = threads::lite::receiveq('queue', qr//);
	$queue->enqueue(qw/foo bar baz/);
	$queue->enqueue(qw/1 2 3/);
	1;
	});

alarm 5;

my $queue = threads::lite::queue->new;
$thread->send('queue', $queue);

my @first = $queue->dequeue;
my @second = $queue->dequeue;
my @third = $queue->dequeue_nb;

eq_or_diff \@first, [ qw/foo bar baz/ ], 'first entry is right';
eq_or_diff \@second, [ qw/1 2 3/ ], 'Second entry is right';
is @third, 0, 'Third message was empty';

receive {
	when([ 'exit', 'normal', $thread->id, 1 ]) {
		eq_or_diff $_, [ 'exit', 'normal', $thread->id, 1 ], 'thread returned normally';
	}
	default {
		ok(0, 'thread returned normally');
	}
};