This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
More tests now too.
[perl5.git] / ext / threads / t / basic.t
CommitLineData
47ba8780 1
a54396a0
AB
2
3#
4# The reason this does not use a Test module is that
5# they mess up test numbers between threads
6#
7# And even when that will be fixed, this is a basic
8# test and should not rely on shared variables
9#
5da2326b
AB
10# This will test the basic API, it will not use any coderefs
11# as they are more advanced
a54396a0 12#
47ba8780
AB
13#########################
14
a54396a0 15
83ebf7e2
RGS
16BEGIN {
17 chdir 't' if -d 't';
18 @INC = '../lib';
19 require Config; import Config;
20 unless ($Config{'useithreads'}) {
21 print "1..0 # Skip: no useithreads\n";
22 exit 0;
23 }
24}
25
47ba8780 26use ExtUtils::testlib;
47ba8780 27use strict;
490a6cf2 28BEGIN { print "1..14\n" };
47ba8780
AB
29use threads;
30
31
a54396a0
AB
32
33print "ok 1\n";
34
47ba8780
AB
35
36#########################
37
5da2326b
AB
38
39
40
a54396a0
AB
41sub ok {
42 my ($id, $ok, $name) = @_;
43
44 # You have to do it this way or VMS will get confused.
45 print $ok ? "ok $id - $name\n" : "not ok $id - $name\n";
46
47 printf "# Failed test at line %d\n", (caller)[2] unless $ok;
48
49 return $ok;
50}
51
52
47ba8780 53
5da2326b
AB
54sub test1 {
55 ok(2,'bar' eq $_[0],"Test that argument passing works");
56}
57threads->create('test1','bar')->join();
47ba8780 58
5da2326b
AB
59sub test2 {
60 ok(3,'bar' eq $_[0]->[0]->{foo},"Test that passing arguments as references work");
61}
47ba8780 62
5da2326b 63threads->create('test2',[{foo => 'bar'}])->join();
a54396a0 64
47ba8780
AB
65
66#test execuion of normal sub
5da2326b
AB
67sub test3 { ok(4,shift() == 1,"Test a normal sub") }
68threads->create('test3',1)->join();
a54396a0 69
47ba8780
AB
70
71#check Config
5da2326b 72ok(5, 1 == $Config::threads,"Check that Config::threads is true");
47ba8780
AB
73
74#test trying to detach thread
75
5da2326b
AB
76sub test4 { ok(6,1,"Detach test") }
77
78my $thread1 = threads->create('test4');
47ba8780
AB
79
80$thread1->detach();
5da2326b
AB
81sleep 2;
82ok(7,1,"Detach test");
83
84
85
86sub test5 {
87 threads->create('test6')->join();
88 ok(9,1,"Nested thread test");
47ba8780 89}
a54396a0 90
5da2326b
AB
91sub test6 {
92 ok(8,1,"Nested thread test");
93}
47ba8780 94
5da2326b
AB
95threads->create('test5')->join();
96
97sub test7 {
98 my $self = threads->self();
99 ok(9, $self->tid == 7, "Wanted 7, got ".$self->tid);
100 ok(10, threads->tid() == 7, "Wanted 7, got ".threads->tid());
47ba8780 101}
47ba8780 102
5da2326b
AB
103threads->create('test7')->join;
104
105sub test8 {
106 my $self = threads->self();
107 ok(11, $self->tid == 8, "Wanted 8, got ".$self->tid);
108 ok(12, threads->tid() == 8, "Wanted 8, got ".threads->tid());
109}
47ba8780 110
5da2326b 111threads->create('test8')->join;
47ba8780
AB
112
113
5da2326b
AB
114#check support for threads->self() in main thread
115ok(13, 0 == threads->self->tid(),"Check so that tid for threads work for main thread");
116ok(14, 0 == threads->tid(),"Check so that tid for threads work for main thread");
117
1181;
47ba8780
AB
119
120
121
122
123
124
125