xref: /openbsd-src/gnu/usr.bin/perl/dist/Thread-Queue/t/06_insert.t (revision f3efcd0145415b7d44d9da97e0ad5c21b186ac61)
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