File: 24context-foreach-list.t

package info (click to toggle)
libfuture-asyncawait-perl 0.70-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 528 kB
  • sloc: perl: 2,647; ansic: 118; pascal: 34; makefile: 3
file content (65 lines) | stat: -rw-r--r-- 1,446 bytes parent folder | download
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
#!/usr/bin/perl

use v5.14;
use warnings;

use Test2::V0;
BEGIN { plan skip_all => "This test requires perl 5.35.5" unless $] >= 5.035005 }

use experimental 'for_list';

use Future;

use Future::AsyncAwait;

# foreach(ARRAY) await
{
   my @idxF = map { $_ => Future->new } 1 .. 3;
   my @result;

   async sub with_foreach_list_array
   {
      foreach my ( $idx, $f ) ( @idxF ) {
         defined $f or die "ARGH: expected a Future at idx $idx";
         await $f;
         push @result, ( $idx, $f );
      }
      return "end foreach";
   }

   my $fret = with_foreach_list_array();

   $idxF[1]->done;
   $idxF[3]->done;
   $idxF[5]->done;

   is( scalar $fret->get, "end foreach", '$fret now ready after foreach(ARRAY) loop' );
   is( \@result, \@idxF, '@result after foreach(ARRAY) loop' );
}

# foreach(LIST) await
{
   my @F = map { Future->new } 1 .. 3;
   my @result;

   async sub with_foreach_list_list
   {
      foreach my ( $idx, $f ) ( 0 => $F[0], 1 => $F[1], 2 => $F[2] ) {
         defined $f or die "ARGH: expected a Future at idx $idx";
         await $f;
         push @result, ( $idx, $f );
      }
      return "end foreach";
   }

   my $fret = with_foreach_list_list();

   $F[0]->done;
   $F[1]->done;
   $F[2]->done;

   is( scalar $fret->get, "end foreach", '$fret now ready after foreach(LIST) loop' );
   is( \@result, [ 0 => $F[0], 1, => $F[1], 2 => $F[2] ], '@result after foreach(LIST) loop' );
}

done_testing;