File: 11contexts.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 (94 lines) | stat: -rw-r--r-- 1,594 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
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
#!/usr/bin/perl

use v5.14;
use warnings;

use Test2::V0;

use Future;

use Future::AsyncAwait;

# if await in cond
{
   async sub with_if_cond
   {
      if( await $_[0] ) {
         return "true";
      }
      else {
         return "false";
      }
   }

   my $f1 = Future->new;
   my $fret = with_if_cond( $f1 );

   ok( !$fret->is_ready, '$fret not immediate with_if_cond' );

   $f1->done( 1 );
   is( scalar $fret->get, "true", '$fret now ready after done' );
}

# if await in body
{
   async sub with_if_body
   {
      if( $_[0] ) {
         return await $_[1];
      }
      else {
         return "immediate";
      }
   }

   my $f1 = Future->new;
   my $fret = with_if_body( 1, $f1 );

   $f1->done( "defer" );
   is( scalar $fret->get, "defer", '$fret now ready after done in if body' );

   $fret = with_if_body( 0, undef );

   is( scalar $fret->get, "immediate", '$fret now ready after done in if body immediate' );
}

# do await in body
{
   async sub with_do_body
   {
      return 1 + do {
         my $f = $_[0];
         await $f;
      };
   }

   my $f1 = Future->new;
   my $fret = with_do_body( $f1 );

   $f1->done( 10 );
   is( scalar $fret->get, 11, '$fret now ready after done in do body' );
}

# await in eval{}
{
   async sub with_eval
   {
      my $f = shift;

      local $@;
      my $ret = eval {
         await $f;
         return "tried";
      } or die $@;
      return "($ret)";
   }

   my $f1 = Future->new;
   my $fret = with_eval( $f1 );

   $f1->done;
   is( scalar $fret->get, "(tried)", '$fret now ready after done in eval' );
}

done_testing;