[Mono.Profiler.Log] Support MLPD version 13
[mono.git] / mcs / tests / test-66.cs
1 //
2 // This tests checks out field access to arrays
3 //
4 using System;
5
6 struct A {
7         public int a;
8 }
9
10 class Y {
11         public object a;
12 }
13
14 class X {
15         static A [] a_single = new A [10];
16         static A [,] a_double = new A [10,10];
17         static Y [] o_single = new Y [10];
18         static Y [,] o_double = new Y [10,10];
19
20         static void FillOne ()
21         {
22                 a_single [0].a = 1;
23         }
24         
25         static void FillSingle ()
26         {
27                 int i;
28                 
29                 for (i = 0; i < 10; i++){
30                         a_single [i].a = i + 1;
31                 }
32         }
33
34         static void FillDouble ()
35         {
36                 int i, j;
37                 
38                 for (i = 0; i < 10; i++)
39                         for (j = 0; j < 10; j++)
40                                 a_double [i,j].a = i * j;
41         }
42
43         static void FillObject ()
44         {
45                 int i;
46                 
47                 for (i = 0; i < 10; i++){
48                         o_single [i] = new Y ();
49                         o_single [i].a = (i + 1);
50                 }
51         }
52
53         static void FillDoubleObject ()
54         {
55                 int i, j;
56                 
57                 for (i = 0; i < 10; i++)
58                         for (j = 0; j < 10; j++){
59                                 o_double [i,j] = new Y ();
60                                 o_double [i,j].a = i * j;
61                         }
62         }
63         
64         static int TestSingle ()
65         {
66                 int i;
67                 
68                 for (i = 0; i < 10; i++){
69                         if (a_single [i].a != i + 1)
70                                 return 1;
71                 }
72                 return 0;
73         }
74
75         static int TestDouble ()
76         {
77                 int i, j;
78
79                 for (i = 0; i < 10; i++){               
80                         for (j = 0; j < 10; j++)
81                                 if (a_double [i,j].a != (i *j))
82                                         return 2;
83                 }
84
85                 return 0;
86         }
87
88         static int TestObjectSingle ()
89         {
90                 int i;
91                 
92                 for (i = 0; i < 10; i++){
93                         if ((int)(o_single [i].a) != i + 1)
94                                 return 1;
95                 }
96                 return 0;
97         }
98
99         static int TestObjectDouble ()
100         {
101                 int i, j;
102
103                 for (i = 0; i < 10; i++){               
104                         for (j = 0; j < 10; j++)
105                                 if (((int)o_double [i,j].a) != (i *j))
106                                         return 2;
107                 }
108
109                 return 0;
110         }
111         
112         public static int Main ()
113         {
114                 FillSingle ();
115                 FillDouble ();
116                 FillObject ();
117                 FillDoubleObject ();
118                 
119                 if (TestSingle () != 0)
120                         return 1;
121                 
122                 if (TestDouble () != 0)
123                         return 2;
124
125                 if (TestObjectSingle () != 0)
126                         return 3;
127
128                 if (TestObjectDouble () != 0)
129                         return 4;
130
131                 Console.WriteLine ("test passes");
132                 return 0;
133         }
134 }