1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#!/usr/bin/perl
use v5.14;
use warnings;
use Test2::V0;
use Future;
use Future::AsyncAwait;
# while await in body
{
my @F = map { Future->new } 1 .. 3;
async sub with_while_body
{
while( @F ) {
await $F[0];
shift @F;
}
return "end while";
}
my $fret = with_while_body();
$F[0]->done;
$F[0]->done;
$F[0]->done;
is( scalar $fret->get, "end while", '$fret now ready after while loop with body finishes' );
}
# while await in condition
{
my @F = map { Future->new } 1 .. 3;
async sub with_while_cond
{
while( await $F[0] ) {
shift @F;
}
return "end while";
}
my $fret = with_while_cond();
$F[0]->done( 1 );
$F[0]->done( 1 );
$F[0]->done( 0 );
is( scalar $fret->get, "end while", '$fret now ready after while loop with cond finishes' );
}
# last inside while await
{
my $f1 = Future->new;
async sub with_while_last
{
while( 1 ) {
await $f1;
last;
}
return "end while";
}
my $fret = with_while_last();
$f1->done;
is( scalar $fret->get, "end while", '$fret now ready after while loop with last' );
}
# next inside while await
{
my $f1 = Future->new;
async sub with_while_next
{
my $continue = 1;
while( $continue ) {
await $f1;
$continue = 0;
next;
die "Unreachable";
}
return "end while";
}
my $fret = with_while_next();
$f1->done;
is( scalar $fret->get, "end while", '$fret now ready after while loop with next' );
}
done_testing;
|