[jit] Fix the saving of the 'cfg->ret_var_set' flag when inlining, it was set to...
[mono.git] / mcs / tests / test-7.cs
1 using System;
2
3 namespace Mine {
4
5         public class MyBoolean {
6                 public static implicit operator bool (MyBoolean x)
7                 {
8                         return true;
9                 }
10         }
11
12         public class MyTrueFalse {
13                 public static bool operator true (MyTrueFalse i)
14                 {
15                         return true;
16                 }
17                 
18                 public static bool operator false (MyTrueFalse i)
19                 {
20                         return false;
21                 }
22         }
23         
24         public class Blah {
25
26                 public int i;
27
28                 public static int Main ()
29                 {
30                         Blah k, l;
31
32                         k = new Blah (2) + new Blah (3);
33                         if (k.i != 5)
34                                 return 1;
35                         
36                         k = ~ new Blah (5);
37                         if (k.i != -6)
38                                 return 1;
39                         
40                         
41                         k = + new Blah (4);
42                         if (k.i != 4)
43                                 return 1;
44                         
45                         k = - new Blah (21);
46                         if (k.i != -21)
47                                 return 1;
48
49                         k = new Blah (22) - new Blah (21);
50                         if (k.i != 1)
51                                 return 1;
52
53                         if (!k)
54                                 Console.WriteLine ("! returned true");
55
56                         int number = k;
57                         if (number != 1)
58                                 return 1;
59                         
60                         k++;    
61                         ++k;
62
63                         if (k)
64                                 Console.WriteLine ("k is definitely true");
65
66                         k = new Blah (30);
67
68                         double f = (double) k;
69
70                         if (f != 30.0)
71                                 return 1;
72
73                         int i = new Blah (5) * new Blah (10);
74
75                         if (i != 50)
76                                 return 1;
77
78                         k = new Blah (50);
79                         l = new Blah (10);
80                         
81                         i = k / l;
82
83                         if (i != 5)
84                                 return 1;
85
86                         i = k % l;
87
88                         if (i != 0)
89                                 return 1;
90
91                         MyBoolean myb = new MyBoolean ();
92
93                         if (!myb)
94                                 return 10;
95
96                         //
97                         // Tests the conditional operator invoking operator true
98                         MyTrueFalse mf = new MyTrueFalse ();
99                         int x = mf ? 1 : 2;
100                         if (x != 1)
101                                 return 11;
102                         
103                         Console.WriteLine ("Test passed");
104                         return 0;
105                 }
106         
107                 public Blah (int v)
108                 {
109                         i = v;
110                 }
111         
112                 public static Blah operator + (Blah i, Blah j)
113                 {
114                         Blah b = new Blah (i.i + j.i);
115                         Console.WriteLine ("Overload binary + operator");
116                         return b;
117                 }
118
119                 public static Blah operator + (Blah i)
120                 {
121                         Console.WriteLine ("Overload unary + operator");
122                         return new Blah (i.i);
123                 }
124
125                 public static Blah operator - (Blah i)
126                 {
127                         Console.WriteLine ("Overloaded unary - operator");
128                         return new Blah (- i.i);
129                 }
130
131                 public static Blah operator - (Blah i, Blah j)
132                 {
133                         Blah b = new Blah (i.i - j.i);
134                         Console.WriteLine ("Overloaded binary - operator");
135                         return b;
136                 }
137
138                 public static int operator * (Blah i, Blah j)
139                 {
140                         Console.WriteLine ("Overloaded binary * operator");
141                         return i.i * j.i;
142                 }
143
144                 public static int operator / (Blah i, Blah j)
145                 {
146                         Console.WriteLine ("Overloaded binary / operator");
147                         return i.i / j.i;
148                 }
149
150                 public static int operator % (Blah i, Blah j)
151                 {
152                         Console.WriteLine ("Overloaded binary % operator");
153                         return i.i % j.i;
154                 }
155                 
156                 public static Blah operator ~ (Blah i)
157                 {
158                         Console.WriteLine ("Overloaded ~ operator");
159                         return new Blah (~i.i);
160                 }
161         
162                 public static bool operator ! (Blah i)
163                 {
164                         Console.WriteLine ("Overloaded ! operator");
165                         return (i.i == 1);
166                 }
167
168                 public static Blah operator ++ (Blah i)
169                 {
170                         Blah b = new Blah (i.i + 1);
171                         Console.WriteLine ("Incrementing i");
172                         return b;
173                 }
174
175                 public static Blah operator -- (Blah i)
176                 {
177                         Blah b = new Blah (i.i - 1);
178                         Console.WriteLine ("Decrementing i");
179                         return b;
180                 }       
181         
182                 public static bool operator true (Blah i)
183                 {
184                         Console.WriteLine ("Overloaded true operator");
185                         return (i.i == 3);
186                 }
187
188                 public static bool operator false (Blah i)
189                 {
190                         Console.WriteLine ("Overloaded false operator");
191                         return (i.i != 1);
192                 }       
193         
194                 public static implicit operator int (Blah i) 
195                 {       
196                         Console.WriteLine ("Converting implicitly from Blah->int");
197                         return i.i;
198                 }
199
200                 public static explicit operator double (Blah i)
201                 {
202                         Console.WriteLine ("Converting explicitly from Blah->double");
203                         return (double) i.i;
204                 }
205
206         }
207
208 }