[runtime] Fix DISABLE_REFLECTION_EMIT build.
[mono.git] / mono / tests / critical-finalizers.cs
1 using System;
2 using System.Runtime.ConstrainedExecution;
3
4 class P {
5
6         static public int count = 0;
7
8         /*
9         public P () {
10                 Console.WriteLine ("p");
11         }
12         */
13
14         ~P () {
15                 count++;
16         }
17 }
18
19 class Q : CriticalFinalizerObject {
20         static public int count = 0;
21         static public int first_p_count = -1;
22         static public int last_p_count = 0;
23         ~Q () {
24                 count++;
25                 if (first_p_count < 0)
26                         first_p_count = P.count;
27                 last_p_count = P.count;
28         }
29 }
30
31 class T : P {
32
33         static void makeP () {
34                 P p = new P ();
35                 Q q = new Q ();
36                 p = null;
37                 q = null;
38         }
39
40         static void callMakeP () {
41                 makeP ();
42         }
43
44         static int Main () {
45                 for (int i = 0; i < 100; ++i)
46                         callMakeP ();
47                 GC.Collect ();
48                 GC.WaitForPendingFinalizers ();
49                 Console.WriteLine (P.count);
50                 Console.WriteLine (Q.count);
51                 Console.WriteLine (Q.first_p_count);
52                 Console.WriteLine (Q.last_p_count);
53                 if (P.count == 0)
54                         return 1;
55                 if (Q.first_p_count < P.count)
56                         return 1;
57                 return 0;
58         }
59 }