Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mcs / tests / dtest-008.cs
1 using System;
2 using System.Collections.Generic;
3
4 // Dynamic statements
5
6 class Disposable : IDisposable
7 {
8         public static int Counter;
9
10         public void Dispose ()
11         {
12                 ++Counter;
13         }
14
15         public void Test ()
16         {
17         }
18 }
19
20 public class Test
21 {
22         bool ForEachTest ()
23         {
24                 dynamic d = new List<int> { 5, 10, 7 };
25                 dynamic res = 9;
26                 foreach (var v in d) {
27                         res += v;
28                 }
29
30                 return res == 31;
31         }
32         
33         bool ForEachTest_2()
34         {
35                 dynamic c = new int [] { 5, 7 };
36                 int total = 0;
37                 foreach (var v in c)
38                 {
39                         total += v;
40                 }
41                 
42                 return total == 12;
43         }
44         
45         bool ForEachTest_3()
46         {
47                 dynamic[] c = new dynamic [] { (byte) 1, 7 };
48                 int total = 0;
49                 foreach (var v in c)
50                 {
51                         total += v;
52                 }
53
54                 Console.WriteLine (total);
55                 return total == 8;
56         }
57
58         bool UsingTest ()
59         {
60                 dynamic d = new Disposable ();
61                 try {
62                         using (d) {
63                                 d.VV ();
64                         }
65                 } catch { }
66
67                 if (Disposable.Counter != 1)
68                         return false;
69 /*
70                 try {
71                         using (dynamic u = new Disposable ()) {
72                                 u.VV ();
73                         }
74                 } catch { }
75
76                 if (Disposable.Counter != 2)
77                         return false;
78                 
79                 using (dynamic u = new Disposable ()) {
80                         u.Test ();
81                 }
82 */
83                 return true;
84         }
85
86         public static int Main ()
87         {
88                 var t = new Test ();
89                 if (!t.ForEachTest ())
90                         return 1;
91
92                 if (!t.ForEachTest_2 ())
93                         return 2;
94                 
95                 if (!t.ForEachTest_3 ())
96                         return 3;
97                 
98                 if (!t.UsingTest ())
99                         return 10;
100
101                 Console.WriteLine ("ok");
102                 return 0;
103         }
104 }