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");