xref: /openbsd-src/gnu/usr.bin/perl/t/class/threads.t (revision 5486feefcc8cb79b19e014ab332cc5dfd05b3b33)
1f2a19305Safresh1#!./perl
2f2a19305Safresh1
3f2a19305Safresh1BEGIN {
4f2a19305Safresh1    chdir 't' if -d 't';
5f2a19305Safresh1    require './test.pl';
6f2a19305Safresh1    set_up_inc('../lib');
7f2a19305Safresh1    require Config;
8f2a19305Safresh1
9f2a19305Safresh1    skip_all_without_config('useithreads');
10f2a19305Safresh1    skip_all_if_miniperl("no dynamic loading on miniperl, no threads");
11f2a19305Safresh1}
12f2a19305Safresh1
13f2a19305Safresh1use v5.36;
14f2a19305Safresh1use feature 'class';
15f2a19305Safresh1no warnings 'experimental::class';
16f2a19305Safresh1
17f2a19305Safresh1use threads;
18f2a19305Safresh1
19*5486feefSafresh1class Testcase1 {
20f2a19305Safresh1    field $x :param;
21f2a19305Safresh1    method x { return $x }
22f2a19305Safresh1}
23f2a19305Safresh1
24f2a19305Safresh1{
25f2a19305Safresh1    my $ret = threads->create(sub {
26f2a19305Safresh1        pass("Created dummy thread");
27f2a19305Safresh1        return 1;
28f2a19305Safresh1    })->join;
29f2a19305Safresh1    next_test(); # account for pass() inside thread
30f2a19305Safresh1    is($ret, 1, "Returned from dummy thread");
31f2a19305Safresh1}
32f2a19305Safresh1
33f2a19305Safresh1{
34*5486feefSafresh1    my $obj = Testcase1->new(x => 10);
35f2a19305Safresh1    threads->create(sub {
36f2a19305Safresh1        is($obj->x, 10, '$obj->x inside thread created before');
37f2a19305Safresh1    })->join;
38f2a19305Safresh1    next_test(); # account for is() inside thread
39f2a19305Safresh1}
40f2a19305Safresh1
41f2a19305Safresh1threads->create(sub {
42*5486feefSafresh1    my $obj = Testcase1->new(x => 20);
43f2a19305Safresh1    is($obj->x, 20, '$obj->x created inside thread');
44f2a19305Safresh1})->join;
45f2a19305Safresh1next_test(); # account for is() inside thread
46f2a19305Safresh1
47f2a19305Safresh1done_testing;
48