Move threads from ext/ to dist/
[perl.git] / ext / threads-shared / t / shared_attr.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     if (! defined($name)) {
17         $name = '';
18     }
19
20     # You have to do it this way or VMS will get confused.
21     if ($ok) {
22         print("ok $id - $name\n");
23     } else {
24         print("not ok $id - $name\n");
25         printf("# Failed test at line %d\n", (caller)[2]);
26     }
27
28     return ($ok);
29 }
30
31 BEGIN {
32     $| = 1;
33     print("1..101\n");   ### Number of tests that will be run ###
34 };
35
36 use threads;
37 use threads::shared;
38 ok(1, 1, 'Loaded');
39
40 ### Start of Testing ###
41
42 my $test_count;
43 share($test_count);
44 $test_count = 2;
45
46 for(1..10) {
47     my $foo : shared = "foo";
48     ok($test_count++, $foo eq "foo");
49     threads->create(sub { $foo = "bar" })->join();
50     ok($test_count++, $foo eq "bar");
51     my @foo : shared = ("foo","bar");
52     ok($test_count++, $foo[1] eq "bar");
53     threads->create(sub { ok($test_count++, shift(@foo) eq "foo")})->join();
54     ok($test_count++, $foo[0] eq "bar");
55     my %foo : shared = ( foo => "bar" );
56     ok($test_count++, $foo{foo} eq "bar");
57     threads->create(sub { $foo{bar} = "foo" })->join();
58     ok($test_count++, $foo{bar} eq "foo");
59
60     threads->create(sub { $foo{array} = \@foo})->join();
61     threads->create(sub { push @{$foo{array}}, "baz"})->join();
62     ok($test_count++, $foo[-1] eq "baz");
63 }
64
65 my $shared :shared = &share({});
66 $$shared{'foo'} = 'bar';
67
68 for(1..10) {
69   my $str1 = "$shared";
70   my $str2 = "$shared";
71   ok($test_count++, $str1 eq $str2, 'stringify');
72   $str1 = $$shared{'foo'};
73   $str2 = $$shared{'foo'};
74   ok($test_count++, $str1 eq $str2, 'contents');
75 }
76
77 exit(0);
78
79 # EOF