X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F09-load-threads.t;h=89cf8d3acf2522b3a2c29367b5c0e561d5e0d274;hb=142a069ea963bd4da61bfe27c6a9b745ee3f6456;hp=b63a51eb8607fec625bd85849b4c43cd6eb2aeff;hpb=393fc036f99c98cdf1ac25b9f564e1d4c020bbc8;p=perl%2Fmodules%2FScope-Upper.git diff --git a/t/09-load-threads.t b/t/09-load-threads.t index b63a51e..89cf8d3 100644 --- a/t/09-load-threads.t +++ b/t/09-load-threads.t @@ -55,7 +55,9 @@ BEGIN { ) } -use Test::Leaner tests => 1 + (2 + 2 * 2) + 6 + (1 + 2 * 4); +my $could_not_create_thread = 'Could not create thread'; + +use Test::Leaner tests => 1 + (2 + 2 * 2) + 6 + (2 * 4) + 2; sub is_loaded { my ($affirmative, $desc) = @_; @@ -80,72 +82,88 @@ is_loaded 0, 'main body, beginning'; # Test serial loadings -my $thr = spawn(sub { - my $here = "first serial thread"; - is_loaded 0, "$here, beginning"; +SKIP: { + my $thr = spawn(sub { + my $here = "first serial thread"; + is_loaded 0, "$here, beginning"; - do_load; - is_loaded 1, "$here, after loading"; + do_load; + is_loaded 1, "$here, after loading"; - return; -}); + return; + }); -$thr->join; -if (my $err = $thr->error) { - die $err; + skip "$could_not_create_thread (serial 1)" => 2 unless defined $thr; + + $thr->join; + if (my $err = $thr->error) { + die $err; + } } is_loaded 0, 'main body, in between serial loadings'; -$thr = spawn(sub { - my $here = "second serial thread"; - is_loaded 0, "$here, beginning"; +SKIP: { + my $thr = spawn(sub { + my $here = "second serial thread"; + is_loaded 0, "$here, beginning"; + + do_load; + is_loaded 1, "$here, after loading"; - do_load; - is_loaded 1, "$here, after loading"; + return; + }); - return; -}); + skip "$could_not_create_thread (serial 2)" => 2 unless defined $thr; -$thr->join; -if (my $err = $thr->error) { - die $err; + $thr->join; + if (my $err = $thr->error) { + die $err; + } } is_loaded 0, 'main body, after serial loadings'; # Test nested loadings -$thr = spawn(sub { - my $here = 'parent thread'; - is_loaded 0, "$here, beginning"; - - my $kid = spawn(sub { - my $here = 'child thread'; +SKIP: { + my $thr = spawn(sub { + my $here = 'parent thread'; is_loaded 0, "$here, beginning"; + SKIP: { + my $kid = spawn(sub { + my $here = 'child thread'; + is_loaded 0, "$here, beginning"; + + do_load; + is_loaded 1, "$here, after loading"; + + return; + }); + + skip "$could_not_create_thread (nested child)" => 2 unless defined $kid; + + $kid->join; + if (my $err = $kid->error) { + die "in child thread: $err\n"; + } + } + + is_loaded 0, "$here, after child terminated"; + do_load; is_loaded 1, "$here, after loading"; return; }); - $kid->join; - if (my $err = $kid->error) { - die "in child thread: $err\n"; - } - - is_loaded 0, "$here, after child terminated"; + skip "$could_not_create_thread (nested parent)" => (3 + 2) unless defined $thr; - do_load; - is_loaded 1, "$here, after loading"; - - return; -}); - -$thr->join; -if (my $err = $thr->error) { - die $err; + $thr->join; + if (my $err = $thr->error) { + die $err; + } } is_loaded 0, 'main body, after nested loadings'; @@ -177,54 +195,63 @@ sub sync_slave { } } -my $thr1 = spawn(sub { - my $here = 'first simultaneous thread'; - is_loaded 0, "$here, beginning"; - sync_slave 0; +SKIP: { + my $thr1 = spawn(sub { + my $here = 'first simultaneous thread'; + is_loaded 0, "$here, beginning"; + sync_slave 0; + + do_load; + is_loaded 1, "$here, after loading"; + sync_slave 1; + sync_slave 2; + + sync_slave 3; + is_loaded 1, "$here, still loaded while also loaded in the other thread"; + sync_slave 4; - do_load; - is_loaded 1, "$here, after loading"; - sync_slave 1; - sync_slave 2; + is_loaded 1, "$here, end"; - sync_slave 3; - is_loaded 1, "$here, still loaded while also loaded in the other thread"; - sync_slave 4; + return; + }); - is_loaded 1, "$here, end"; + skip "$could_not_create_thread (parallel 1)" => (4 * 2) unless defined $thr1; - return; -}); + my $thr2 = spawn(sub { + my $here = 'second simultaneous thread'; + is_loaded 0, "$here, beginning"; + sync_slave 0; -my $thr2 = spawn(sub { - my $here = 'second simultaneous thread'; - is_loaded 0, "$here, beginning"; - sync_slave 0; + sync_slave 1; + is_loaded 0, "$here, loaded in other thread but not here"; + sync_slave 2; - sync_slave 1; - is_loaded 0, "$here, loaded in other thread but not here"; - sync_slave 2; + do_load; + is_loaded 1, "$here, after loading"; + sync_slave 3; + sync_slave 4; - do_load; - is_loaded 1, "$here, after loading"; - sync_slave 3; - sync_slave 4; + is_loaded 1, "$here, end"; - is_loaded 1, "$here, end"; + return; + }); - return; -}); + sync_master($_) for 0 .. $#locks; -sync_master($_) for 0 .. $#locks; + $thr1->join; + if (my $err = $thr1->error) { + die $err; + } -$thr1->join; -if (my $err = $thr1->error) { - die $err; -} + skip "$could_not_create_thread (parallel 2)" => (4 * 1) unless defined $thr2; -$thr2->join; -if (my $err = $thr2->error) { - die $err; + $thr2->join; + if (my $err = $thr2->error) { + die $err; + } } is_loaded 0, 'main body, after simultaneous threads'; + +do_load; +is_loaded 1, 'main body, loaded at end';