2 using System
.Collections
.Generic
;
4 // Generics mutate tests
6 class Disposable
<T
> : IDisposable
13 interface IFoo
<TOne
, TTwo
>
21 public static readonly T Value
;
22 public readonly T Value2
;
28 static Func
<T
[]> For
<T
> (List
<T
> list
)
32 for (int i
= 0; i
< t
.Length
; ++i
) {
40 static Func
<T
> Throw
<T
> (T t
)
44 throw new ApplicationException (l
.ToString ());
48 static Func
<Type
> TypeOf
<T
> (T t
)
53 var e
= typeof (Disposable
<T
>);
54 e
= typeof (Disposable
<>);
60 static Func
<T
> Do
<T
> (T t
)
67 } while (default (T
) != null);
73 static Func
<T
> Lock
<T
> (T t
)
84 static Func
<T
> Catch
<T
> (T t
)
89 throw new ApplicationException (l
.ToString ());
96 static Func
<T
> Finally
<T
> (T t
)
110 static Func
<T
> Using
<T
> (T t
)
113 using (var d
= new Disposable
<T
> ()) {
120 static Func
<T
> Switch
<T
> (T t
)
131 static Func
<List
<T
>> ForForeach
<T
> (T
[] t
)
135 return new List
<T
> () { e }
;
137 throw new ApplicationException ();
141 public void ArrayMutate
<T
> (T
[] array
)
144 Action
<int> anonMeth
= delegate (int slc
) {
145 long[] idx
= new long[] { 0, 0 }
;
146 for (int i
= 0; i
< r
; i
++) {
152 static Func
<T
[][]> ArrayMultiMutate
<T
> (T
[][] array
)
155 for (int i
= 0; i
< 3; i
++) {
156 array
[i
][i
] = default (T
);
163 static Func
<int> ArrayMultiMutate
<T
> (T
[,] array
)
166 return array
[0, 0].GetHashCode ();
170 static Func
<T
[]> NestedTypeMutate
<T
> () where T
: IEquatable
<T
>
172 var local
= new CA
<T
>.Nested ();
174 return new[] { CA<T>.Nested.Value, local.Value2 }
;
178 public static int Main ()
180 if (For (new List
<int> { 5, 10 }
) ()[1] != 10)
187 } catch (ApplicationException
) {
202 var t6
= Finally (5);
206 var t7
= Using (1.1);
210 var t8
= Switch (55);
214 var t9
= ForForeach (new[] { 4, 1 }
);
218 var t10
= ArrayMultiMutate (new string[][] { new string[] { "a", "b", "c" }
, new string[] { "1", "2", "3" }
, new string[] { "A", "B", "C" }
});
219 if (t10 ()[2][2] != null)
222 var array
= new short[,] { { 10, 20 }
};
223 var t10a
= ArrayMultiMutate (array
);
224 if (t10a () != array
[0, 0].GetHashCode ())
227 var t11
= TypeOf ("b");
228 if (t11 () != typeof (string))
231 var t12
= NestedTypeMutate
<ulong> () ();
232 if (t12
[0] != 0 || t12
[1] != 0)
235 Console
.WriteLine ("OK");