Move threads from ext/ to dist/
[perl.git] / dist / threads / t / list.t
1 use strict;
2 use warnings;
3
4 BEGIN {
5     use Config;
6     if (! $Config{'useithreads'}) {
7         print("1..0 # SKIP Perl not compiled with 'useithreads'\n");
8         exit(0);
9     }
10 }
11
12 use ExtUtils::testlib;
13
14 sub ok {
15     my ($id, $ok, $name) = @_;
16
17     # You have to do it this way or VMS will get confused.
18     if ($ok) {
19         print("ok $id - $name\n");
20     } else {
21         print("not ok $id - $name\n");
22         printf("# Failed test at line %d\n", (caller)[2]);
23     }
24
25     return ($ok);
26 }
27
28 BEGIN {
29     $| = 1;
30     print("1..15\n");   ### Number of tests that will be run ###
31 };
32
33 use threads;
34 ok(1, 1, 'Loaded');
35
36 ### Start of Testing ###
37
38 ok(2, scalar @{[threads->list()]} == 0, 'No threads yet');
39
40 threads->create(sub {})->join();
41 ok(3, scalar @{[threads->list()]} == 0, 'Empty thread list after join');
42
43 my $thread = threads->create(sub {});
44 ok(4, scalar(threads->list()) == 1, 'Non-empty thread list');
45 ok(5, threads->list() == 1,             'Non-empty thread list');
46 $thread->join();
47 ok(6, scalar @{[threads->list()]} == 0, 'Thread list empty again');
48 ok(7, threads->list() == 0,             'Thread list empty again');
49
50 $thread = threads->create(sub {
51     ok(8, threads->list() == 1, 'Non-empty thread list in thread');
52     ok(9, threads->self == (threads->list())[0], 'Self in thread list')
53 });
54
55 threads->yield; # help out non-preemptive thread implementations
56 sleep 1;
57
58 ok(10, scalar(threads->list()) == 1, 'Thread count 1');
59 ok(11, threads->list() == 1,             'Thread count 1');
60 my $cnt = threads->list();
61 ok(12, $cnt == 1,                        'Thread count 1');
62 my ($thr_x) = threads->list();
63 ok(13, $thread == $thr_x,                'Thread in list');
64 $thread->join();
65 ok(14, scalar @{[threads->list()]} == 0, 'Thread list empty');
66 ok(15, threads->list() == 0,             'Thread list empty');
67
68 exit(0);
69
70 # EOF