7 if (! $Config{'useithreads'}) {
8 print("1..0 # SKIP Perl not compiled with 'useithreads'\n");
11 if (! $Config{'d_select'}) {
12 print("1..0 # SKIP 'select()' not available for testing\n");
24 my $q = Thread::Queue->new();
25 my $rpt = Thread::Queue->new();
27 my $th = threads->create( sub {
28 # (1) Set queue limit, and report it
30 $rpt->enqueue($q->limit);
32 # (3) Fetch an item from queue
33 my $item = $q->dequeue();
34 is($item, 1, 'Dequeued item 1');
36 $rpt->enqueue($q->pending());
38 # q = (2, 3, 4, 5); r = (4)
40 # (4) Enqueue more items - will block
42 # q = (5, 'foo', 6, 7); r = (4, 3, 4, 3)
44 # (6) Get reports from main
45 my @items = $rpt->dequeue(5);
46 is_deeply(\@items, [4, 3, 4, 3, 'go'], 'Queue reports');
49 @items = $q->dequeue_nb(99);
50 is_deeply(\@items, [5, 'foo', 6, 7], 'Queue items');
53 # (2) Read queue limit from thread
54 my $item = $rpt->dequeue();
55 is($item, $q->limit, 'Queue limit set');
57 $q->enqueue(1, 2, 3, 4, 5);
59 # (5) Read queue count
60 $item = $rpt->dequeue;
61 # q = (2, 3, 4, 5); r = ()
62 is($item, $q->pending(), 'Queue count');
63 # Report back the queue count
64 $rpt->enqueue($q->pending);
65 # q = (2, 3, 4, 5); r = (4)
67 # Read an item from queue
68 $item = $q->dequeue();
69 is($item, 2, 'Dequeued item 2');
70 # q = (3, 4, 5); r = (4)
71 # Report back the queue count
72 $rpt->enqueue($q->pending);
73 # q = (3, 4, 5); r = (4, 3)
75 # 'insert' doesn't care about queue limit
77 $rpt->enqueue($q->pending);
78 # q = (3, 4, 5, 'foo'); r = (4, 3, 4)
80 # Read an item from queue
81 $item = $q->dequeue();
82 is($item, 3, 'Dequeued item 3');
83 # q = (3, 4, 5); r = (4)
84 # Report back the queue count
85 $rpt->enqueue($q->pending);
86 # q = (4, 5, 'foo'); r = (4, 3, 4, 3)
88 # Read an item from queue
89 $item = $q->dequeue();
90 is($item, 4, 'Dequeued item 4');
91 # Thread is now unblocked
93 # Handshake with thread