Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Cassify S17 tests
  • Loading branch information
lizmat committed Apr 16, 2014
1 parent baace2c commit 2b72453
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 23 deletions.
4 changes: 3 additions & 1 deletion S17-concurrency/promise.t
Expand Up @@ -172,7 +172,9 @@ plan 64;

{
my @a;
my @p = (^10).pick(*).map: { start { sleep $_; @a.push: $_ } };
my @p = (^10).pick(*).map: {
start { sleep $_; cas @a, -> @current { my @ = @current, OUTER::<$_> } }
};
my $all = Promise.allof(@p);
isa_ok $all, Promise, 'allof gives a Promise';
my $b = $all.result; # block
Expand Down
38 changes: 19 additions & 19 deletions S17-concurrency/scheduler.t
Expand Up @@ -61,8 +61,8 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
# Timing related tests are always a tad fragile, e.g. on a loaded system.
# Hopefully the times are enough leeway.
my $tracker = '';
$*SCHEDULER.cue({ $tracker ~= '2s'; }, :in(2));
$*SCHEDULER.cue({ $tracker ~= '1s'; }, :in(1));
$*SCHEDULER.cue({ cas $tracker, {$_ ~ '2s'} }, :in(2));
$*SCHEDULER.cue({ cas $tracker, {$_ ~ '1s'} }, :in(1));
is $tracker, '', "Cue on $name with :in doesn't schedule immediately";
sleep 3;
is $tracker, "1s2s", "Timer tasks on $name with :in ran in right order";
Expand All @@ -72,14 +72,14 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
{
my $tracker = '';
$*SCHEDULER.cue(
{ $tracker ~= '2s'; },
{ cas $tracker, {$_ ~ '2s'} },
:in(2),
:catch({ $tracker ~= '2scatch'})
:catch({ cas $tracker, { $_ ~ '2scatch'} })
);
$*SCHEDULER.cue(
{ $tracker ~= '1s'; die },
{ cas $tracker, {$_ ~ '1s'; die } },
:in(1),
:catch({ $tracker ~= '1scatch'})
:catch({ cas $tracker, {$_ ~ '1scatch'} })
);
is $tracker, '', "Cue on $name with :in/:catch doesn't schedule immediately";
sleep 3;
Expand All @@ -89,8 +89,8 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
#?rakudo.moar skip ":at NYI"
{
my $tracker = '';
$*SCHEDULER.cue({ $tracker ~= '2s'; }, :at(now + 2));
$*SCHEDULER.cue({ $tracker ~= '1s'; }, :at(now + 1));
$*SCHEDULER.cue({ cas $tracker, {$_ ~ '2s'} }, :at(now + 2));
$*SCHEDULER.cue({ cas $tracker, {$_ ~ '1s'} }, :at(now + 1));
is $tracker, '', "Cue on $name with :at doesn't schedule immediately";
sleep 3;
is $tracker, "1s2s", "Timer tasks on $name with :at ran in right order";
Expand All @@ -100,14 +100,14 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
{
my $tracker = '';
$*SCHEDULER.cue(
{ $tracker ~= '2s'; die },
{ cas $tracker, {$_ ~ '2s'} die },
:at(now + 2),
:catch({ $tracker ~= '2scatch'})
:catch({ cas $tracker, {$_ ~ '2scatch'} })
);
$*SCHEDULER.cue(
{ $tracker ~= '1s'; },
{ cas $tracker, {$_ ~ '1s'} },
:at(now + 1),
:catch({ $tracker ~= '1scatch'})
:catch({ cas $tracker, {$_ ~ '1scatch'} })
);
is $tracker, '', "Cue on $name with :at/:catch doesn't schedule immediately";
sleep 3;
Expand All @@ -119,7 +119,7 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
# Also at risk of being a little fragile, but again hopefully Ok on all
# but the most ridiculously loaded systems.
my $a = 0;
$*SCHEDULER.cue({ $a++ }, :every(0.1));
$*SCHEDULER.cue({ cas $a, {.succ} }, :every(0.1));
sleep 1;
diag "seen $a runs" if !
ok 5 < $a < 15, "Cue with :every schedules repeatedly";
Expand All @@ -131,7 +131,7 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
# but the most ridiculously loaded systems.
my $a = 0;
my $b = 0;
$*SCHEDULER.cue({ $a++; die }, :every(0.1), :catch({ $b++ }));
$*SCHEDULER.cue({ cas $a, {.succ}; die }, :every(0.1), :catch({ cas $b, {.succ} }));
sleep 1;
diag "seen $a runs" if !
ok 5 < $a < 15, "Cue with :every/:catch schedules repeatedly (1)";
Expand All @@ -142,7 +142,7 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
#?rakudo.moar skip ":in, :every NYI"
{
my $a = 0;
$*SCHEDULER.cue({ $a++ }, :in(2), :every(0.1));
$*SCHEDULER.cue({ cas $a, {.succ} }, :in(2), :every(0.1));
sleep 3;
diag "seen $a runs" if !
ok 5 < $a < 15, "Cue with :every/:in schedules repeatedly";
Expand All @@ -152,7 +152,7 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
{
my $a = 0;
my $b = 0;
$*SCHEDULER.cue({ $a++; die }, :in(2), :every(0.1), :catch({ $b++ }));
$*SCHEDULER.cue({ cas $a,{.succ}; die }, :in(2), :every(0.1), :catch({ cas $b, {.succ} }));
sleep 3;
diag "seen $a runs" if !
ok 5 < $a < 15, "Cue with :every/:in/:catch schedules repeatedly (1)";
Expand All @@ -163,7 +163,7 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
#?rakudo.moar skip ":at, :every NYI"
{
my $a = 0;
$*SCHEDULER.cue({ $a++ }, :at(now + 2), :every(0.1));
$*SCHEDULER.cue({ cas $a, {.succ} }, :at(now + 2), :every(0.1));
sleep 3;
diag "seen $a runs" if !
ok 5 < $a < 15, "Cue with :every/:at schedules repeatedly";
Expand All @@ -172,7 +172,7 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
#?rakudo.moar skip ":times NYI"
{
my $tracker;
$*SCHEDULER.cue({ $tracker++ }, :times(10));
$*SCHEDULER.cue({ cas $tracker, {.succ} }, :times(10));
sleep 3;
is $tracker, 10, "Cue on $name with :times(10)";
}
Expand All @@ -181,7 +181,7 @@ ok $*SCHEDULER ~~ Scheduler, "$name does Scheduler role";
{
my $a = 0;
my $b = 0;
$*SCHEDULER.cue({ $a++; die }, :at(now + 2), :every(0.1), :catch({ $b++ }));
$*SCHEDULER.cue({ cas $a, {.succ}; die }, :at(now + 2), :every(0.1), :catch({ cas $b, {.succ} }));
sleep 3;
diag "seen $a runs" if !
ok 5 < $a < 15, "Cue with :every/:at/:catch schedules repeatedly (1)";
Expand Down
8 changes: 5 additions & 3 deletions S17-concurrency/thread.t
Expand Up @@ -92,10 +92,10 @@ plan 25;
}

{
my $seen = 0;
my $seen = 0;
my $threads = 3;
my $times = 10000;
my @t = (1..$threads).map: { Thread.start({ $seen++ for ^$times}) };
my @t = (1..$threads).map: { Thread.start({ cas $seen, {.succ} for ^$times}) };
.finish for @t;
ok 0 <= $seen <= $threads * $times, "we didn't segfault";
}
Expand All @@ -105,7 +105,9 @@ plan 25;
my $threads = 3;
my $times = 10000;
%seen{^$times} = (0 xx $times); # prime the hash
my @t = (1..$threads).map: { Thread.start({ %seen{$_}++ for ^$times}) };
my @t = (1..$threads).map: { Thread.start({
cas %seen{$_}, {.succ} for ^$times;
}) };
.finish for @t;
ok 0 <= ([+] %seen.values) <= $threads * $times, "we didn't segfault";
unless
Expand Down

0 comments on commit 2b72453

Please sign in to comment.