1use strict; 2use warnings; 3 4BEGIN { 5 use Config; 6 if (! $Config{'useithreads'}) { 7 print("1..0 # SKIP Perl not compiled with 'useithreads'\n"); 8 exit(0); 9 } 10} 11 12use threads; 13use Thread::Queue; 14 15BEGIN { # perl RT 133382 16if ($] == 5.008) { 17 require 't/test.pl'; # Test::More work-alike for Perl 5.8.0 18} else { 19 require Test::More; 20} 21Test::More->import(); 22} # end BEGIN 23plan('tests' => 16); 24 25my $q = Thread::Queue->new(1..10); 26ok($q, 'New queue'); 27 28threads->create(sub { 29 $q->insert(5); 30 $q->insert(-5); 31 $q->insert(100); 32 $q->insert(-100); 33})->join(); 34 35my @x = $q->dequeue_nb(100); 36is_deeply(\@x, [1..10], 'No-op inserts'); 37 38 39$q = Thread::Queue->new(1..10); 40ok($q, 'New queue'); 41 42threads->create(sub { 43 $q->insert(10, qw/tail/); 44 $q->insert(0, qw/head/); 45})->join(); 46 47@x = $q->dequeue_nb(100); 48is_deeply(\@x, ['head',1..10,'tail'], 'Edge inserts'); 49 50 51$q = Thread::Queue->new(1..10); 52ok($q, 'New queue'); 53 54threads->create(sub { 55 $q->insert(5, qw/foo bar/); 56 $q->insert(-2, qw/qux/); 57})->join(); 58 59@x = $q->dequeue_nb(100); 60is_deeply(\@x, [1..5,'foo','bar',6..8,'qux',9,10], 'Middle inserts'); 61 62 63$q = Thread::Queue->new(1..10); 64ok($q, 'New queue'); 65 66threads->create(sub { 67 $q->insert(20, qw/tail/); 68 $q->insert(-20, qw/head/); 69})->join(); 70 71@x = $q->dequeue_nb(100); 72is_deeply(\@x, ['head',1..10,'tail'], 'Extreme inserts'); 73 74 75$q = Thread::Queue->new(); 76ok($q, 'New queue'); 77threads->create(sub { $q->insert(0, 1..3); })->join(); 78@x = $q->dequeue_nb(100); 79is_deeply(\@x, [1..3], 'Empty queue insert'); 80 81$q = Thread::Queue->new(); 82ok($q, 'New queue'); 83threads->create(sub { $q->insert(20, 1..3); })->join(); 84@x = $q->dequeue_nb(100); 85is_deeply(\@x, [1..3], 'Empty queue insert'); 86 87$q = Thread::Queue->new(); 88ok($q, 'New queue'); 89threads->create(sub { $q->insert(-1, 1..3); })->join(); 90@x = $q->dequeue_nb(100); 91is_deeply(\@x, [1..3], 'Empty queue insert'); 92 93$q = Thread::Queue->new(); 94ok($q, 'New queue'); 95threads->create(sub { 96 $q->insert(2, 1..3); 97 $q->insert(1, 'foo'); 98})->join(); 99@x = $q->dequeue_nb(100); 100is_deeply(\@x, [1,'foo',2,3], 'Empty queue insert'); 101 102exit(0); 103 104# EOF 105