[w32file] Move MonoIO.Find{First,Next,Close} to managed
[mono.git] / mcs / tests / test-async-70.cs
1 using System;
2 using System.Threading.Tasks;
3
4 class Test
5 {
6         static async Task<int> YieldValue (int a)
7         {
8                 await Task.Yield ();
9                 return a;
10         }
11
12         static async Task<int> TestNestedReturn (int v)
13         {
14                 int x = 0;
15
16                 try {
17                         try {
18                                 x = await YieldValue (1);
19                                 Console.WriteLine ("T1");
20                                 if (x == v)
21                                         return 6;
22                         } finally {
23                                 Console.WriteLine ("F1");
24
25                                 x += await YieldValue (2);
26                         }
27
28                         Console.WriteLine ("AF1");
29                 } finally {
30                         Console.WriteLine ("F2");
31                         try {
32                                 x += await YieldValue (4);
33                                 Console.WriteLine ("T3");
34                         } finally {
35                                 Console.WriteLine ("F3");
36                                 x += await YieldValue (8);
37                         }
38                 }
39
40                 Console.WriteLine ("END");
41
42                 return x;
43         }
44
45         static async Task<int> TestNestedGoto (int v)
46         {
47                 int x = 0;
48
49                 try {
50                         try {
51                                 Console.WriteLine ("T1");
52                                 if (x == v)
53                                         goto L;
54
55                                 x = await YieldValue (1);
56                         } finally {
57                                 Console.WriteLine ("F1");
58
59                                 x += await YieldValue (2);
60                         }
61
62                         Console.WriteLine ("AF1");
63                 } finally {
64                         Console.WriteLine ("F2");
65                         try {
66                                 x += await YieldValue (4);
67                                 Console.WriteLine ("T3");
68                         } finally {
69                                 Console.WriteLine ("F3");
70                                 x += await YieldValue (8);
71                         }
72                 }
73
74                 Console.WriteLine ("END");
75 L:
76                 Console.WriteLine ("END L");
77
78                 return x;
79         }
80
81         public static int Main ()
82         {
83                 if (TestNestedReturn (1).Result != 6)
84                         return 1;
85
86                 if (TestNestedReturn (0).Result != 15)
87                         return 2;
88
89                 if (TestNestedGoto (1).Result != 15)
90                         return 3;
91
92                 if (TestNestedGoto (0).Result != 14)
93                         return 4;
94
95                 return 0;
96         }
97 }