2002-05-16 Dietmar Maurer <dietmar@ximian.com>
[mono.git] / mcs / tests / test-7.cs
1 using System;
2
3 namespace Mine {
4
5         public class Blah {
6
7                 public int i;
8
9                 public static int Main ()
10                 {
11                         Blah k, l;
12
13                         k = new Blah (2) + new Blah (3);
14                         if (k.i != 5)
15                                 return 1;
16                         
17                         k = ~ new Blah (5);
18                         if (k.i != -6)
19                                 return 1;
20                         
21                         
22                         k = + new Blah (4);
23                         if (k.i != 4)
24                                 return 1;
25                         
26                         k = - new Blah (21);
27                         if (k.i != -21)
28                                 return 1;
29
30                         k = new Blah (22) - new Blah (21);
31                         if (k.i != 1)
32                                 return 1;
33
34                         if (!k)
35                                 Console.WriteLine ("! returned true");
36
37                         int number = k;
38                         if (number != 1)
39                                 return 1;
40                         
41                         k++;    
42                         ++k;
43
44                         if (k)
45                                 Console.WriteLine ("k is definitely true");
46
47                         k = new Blah (30);
48
49                         double f = (double) k;
50
51                         if (f != 30.0)
52                                 return 1;
53
54                         int i = new Blah (5) * new Blah (10);
55
56                         if (i != 50)
57                                 return 1;
58
59                         k = new Blah (50);
60                         l = new Blah (10);
61                         
62                         i = k / l;
63
64                         if (i != 5)
65                                 return 1;
66
67                         i = k % l;
68
69                         if (i != 0)
70                                 return 1;
71                         
72                         return 0;
73                 }
74         
75                 public Blah (int v)
76                 {
77                         i = v;
78                 }
79         
80                 public static Blah operator + (Blah i, Blah j)
81                 {
82                         Blah b = new Blah (i.i + j.i);
83                         Console.WriteLine ("Overload binary + operator");
84                         return b;
85                 }
86
87                 public static Blah operator + (Blah i)
88                 {
89                         Console.WriteLine ("Overload unary + operator");
90                         return new Blah (i.i);
91                 }
92
93                 public static Blah operator - (Blah i)
94                 {
95                         Console.WriteLine ("Overloaded unary - operator");
96                         return new Blah (- i.i);
97                 }
98
99                 public static Blah operator - (Blah i, Blah j)
100                 {
101                         Blah b = new Blah (i.i - j.i);
102                         Console.WriteLine ("Overloaded binary - operator");
103                         return b;
104                 }
105
106                 public static int operator * (Blah i, Blah j)
107                 {
108                         Console.WriteLine ("Overloaded binary * operator");
109                         return i.i * j.i;
110                 }
111
112                 public static int operator / (Blah i, Blah j)
113                 {
114                         Console.WriteLine ("Overloaded binary / operator");
115                         return i.i / j.i;
116                 }
117
118                 public static int operator % (Blah i, Blah j)
119                 {
120                         Console.WriteLine ("Overloaded binary % operator");
121                         return i.i % j.i;
122                 }
123                 
124                 public static Blah operator ~ (Blah i)
125                 {
126                         Console.WriteLine ("Overloaded ~ operator");
127                         return new Blah (~i.i);
128                 }
129         
130                 public static bool operator ! (Blah i)
131                 {
132                         Console.WriteLine ("Overloaded ! operator");
133                         return (i.i == 1);
134                 }
135
136                 public static Blah operator ++ (Blah i)
137                 {
138                         Blah b = new Blah (i.i + 1);
139                         Console.WriteLine ("Incrementing i");
140                         return b;
141                 }
142
143                 public static Blah operator -- (Blah i)
144                 {
145                         Blah b = new Blah (i.i - 1);
146                         Console.WriteLine ("Decrementing i");
147                         return b;
148                 }       
149         
150                 public static bool operator true (Blah i)
151                 {
152                         Console.WriteLine ("Overloaded true operator");
153                         return (i.i == 3);
154                 }
155
156                 public static bool operator false (Blah i)
157                 {
158                         Console.WriteLine ("Overloaded false operator");
159                         return (i.i != 1);
160                 }       
161         
162                 public static implicit operator int (Blah i) 
163                 {       
164                         Console.WriteLine ("Converting implicitly from Blah->int");
165                         return i.i;
166                 }
167
168                 public static explicit operator double (Blah i)
169                 {
170                         Console.WriteLine ("Converting explicitly from Blah->double");
171                         return (double) i.i;
172                 }
173
174         }
175
176 }