2 using System.Collections.Generic;
3 using System.Collections.ObjectModel;
4 using System.Runtime.CompilerServices;
5 using System.Threading.Tasks;
8 public int i, j, k, l, m, n;
16 public static T static_dummy;
17 public static T static_t;
18 public static Foo static_f;
31 [MethodImplAttribute (MethodImplOptions.NoInlining)]
32 public GFoo3 (T i1, T i2) {
39 // Tests for generic sharing of vtypes.
40 // The tests use arrays to pass/receive values to keep the calling convention of the methods stable, which is a current limitation of the runtime support for gsharedvt.
44 // Interfaces are used to prevent the AOT compiler from discovering instantiations, thus forcing the usage of the gsharedvt
45 // versions of methods. Unused vtype type arguments are used to test gsharedvt methods with ref type arguments, i.e.
46 // when calling foo<T,T2> as foo<object,bool>, the gsharedvt version is used, but with a ref type argument.
49 // FIXME: Add mixed ref/noref tests, i.e. Dictionary<string, int>
52 public class GSharedTests
58 public static int Main (String[] args) {
59 return TestDriver.RunTests (typeof (Tests), args);
63 [MethodImplAttribute (MethodImplOptions.NoInlining)]
64 static void gshared<T> (T [] array, int i, int j) {
66 array [i] = array [j];
70 // Test that the gshared and gsharedvt versions don't mix
71 public static int test_0_vt_gshared () {
72 string[] sarr = new string [2] { "A", "B" };
74 gshared<string> (sarr, 0, 1);
76 Foo[] arr = new Foo [2];
77 arr [0] = new Foo () { i = 1, j = 2 };
78 arr [1] = new Foo () { i = 3, j = 4 };
80 gshared<Foo> (arr, 0, 1);
81 if (arr [0].i != 3 || arr [0].j != 4)
83 if (arr [1].i != 1 || arr [1].j != 2)
89 static void ldelem_stelem<T> (T [] array, int i, int j) {
91 array [i] = array [j];
95 public static int test_0_vt_ldelem_stelem () {
96 Foo[] arr = new Foo [2];
97 arr [0] = new Foo () { i = 1, j = 2 };
98 arr [1] = new Foo () { i = 3, j = 4 };
100 ldelem_stelem<Foo> (arr, 0, 1);
101 if (arr [0].i != 3 || arr [0].j != 4)
103 if (arr [1].i != 1 || arr [1].j != 2)
106 int[] arr2 = new int [2] { 1, 2 };
107 ldelem_stelem<int> (arr2, 0, 1);
108 if (arr2 [0] !=2 || arr2 [1] != 1)
114 [MethodImplAttribute (MethodImplOptions.NoInlining)]
115 private static void initobj<T> (T [] array, int i, int j) {
120 public static int test_0_vt_initobj () {
121 Foo[] arr = new Foo [2];
122 arr [0] = new Foo () { i = 1, j = 2 };
123 arr [1] = new Foo () { i = 3, j = 4 };
125 initobj<Foo> (arr, 0, 1);
126 if (arr [0].i != 0 || arr [0].j != 0)
128 if (arr [1].i != 3 || arr [1].j != 4)
133 [MethodImplAttribute (MethodImplOptions.NoInlining)]
134 static T ldobj_stobj<T> (ref T t1, ref T t2) {
141 public static int test_0_vt_ldobj_stobj () {
144 if (ldobj_stobj (ref i, ref j) != 6)
146 if (i != 6 || j != 0)
150 if (ldobj_stobj (ref d1, ref d2) != 2.0)
152 if (d1 != 2.0 || d2 != 0.0)
157 [MethodImplAttribute (MethodImplOptions.NoInlining)]
158 private static void box<T1, T> (T [] array, object[] arr) {
159 object x = array [0];
163 public static int test_0_vt_box () {
164 Foo[] arr = new Foo [2];
165 arr [0] = new Foo () { i = 1, j = 2 };
167 object[] arr2 = new object [16];
168 box<int, Foo> (arr, arr2);
169 if (arr2 [0].GetType () != typeof (Foo))
171 Foo f = (Foo)arr2 [0];
172 if (f.i != 1 || f.j != 2)
174 string[] arr3 = new string [16];
175 object[] arr4 = new object [16];
177 box<int, string> (arr3, arr4);
178 if (arr4 [0] != (object)arr3 [0])
183 [MethodImplAttribute (MethodImplOptions.NoInlining)]
184 private static void unbox_any<T> (T [] array, object[] arr) {
189 public static int test_0_vt_unbox_any () {
190 int[] iarr = new int [16];
191 unbox_any<int> (iarr, new object [] { 12 });
193 Foo[] arr = new Foo [2];
195 object[] arr2 = new object [16];
196 arr2 [0] = new Foo () { i = 1, j = 2 };
197 unbox_any<Foo> (arr, arr2);
198 if (arr [0].i != 1 || arr [0].j != 2)
203 interface IFaceUnbox {
204 T Unbox<T, T2> (T t, T2 t2, object o);
207 class ClassUnbox : IFaceUnbox {
208 public T Unbox<T, T2> (T t, T2 t2, object o) {
213 // unbox.any on a ref type in a gsharedvt method
214 public static int test_0_ref_gsharedvt_aot_unbox_any () {
215 IFaceUnbox iface = new ClassUnbox ();
216 string s = iface.Unbox<string, int> ("A", 2, "A");
222 public static int test_0_unbox_any_enum () {
223 IFaceUnbox iface = new ClassUnbox ();
224 AnEnum res = iface.Unbox<AnEnum, int> (AnEnum.One, 0, 1);
225 if (res != AnEnum.Two)
227 res = iface.Unbox<AnEnum, int> (AnEnum.One, 0, AnEnum.Two);
228 if (res != AnEnum.Two)
230 int res2 = iface.Unbox<int, AnEnum> (0, AnEnum.One, AnEnum.Two);
236 [MethodImplAttribute (MethodImplOptions.NoInlining)]
237 static void ldfld_nongeneric<T> (GFoo<T>[] foo, int[] arr) {
241 [MethodImplAttribute (MethodImplOptions.NoInlining)]
242 static void ldfld<T> (GFoo<T>[] foo, T[] arr) {
246 [MethodImplAttribute (MethodImplOptions.NoInlining)]
247 static void stfld_nongeneric<T> (GFoo<T>[] foo, int[] arr) {
251 [MethodImplAttribute (MethodImplOptions.NoInlining)]
252 static void stfld<T> (GFoo<T>[] foo, T[] arr) {
256 [MethodImplAttribute (MethodImplOptions.NoInlining)]
257 static void ldflda<T> (GFoo<T>[] foo, int[] arr) {
258 arr [0] = foo [0].f.i;
261 public static int test_0_vt_ldfld_stfld () {
262 var foo = new GFoo<Foo> () { t = new Foo () { i = 1, j = 2 }, i = 5, f = new Foo () { i = 5, j = 6 } };
263 var farr = new GFoo<Foo>[] { foo };
265 /* Normal fields with a variable offset */
266 var iarr = new int [10];
267 ldfld_nongeneric<Foo> (farr, iarr);
271 stfld_nongeneric<Foo> (farr, iarr);
272 if (farr [0].i != 16)
275 /* Variable type field with a variable offset */
276 var arr = new Foo [10];
277 ldfld<Foo> (farr, arr);
278 if (arr [0].i != 1 || arr [0].j != 2)
280 arr [0] = new Foo () { i = 3, j = 4 };
281 stfld<Foo> (farr, arr);
282 if (farr [0].t.i != 3 || farr [0].t.j != 4)
285 ldflda<Foo> (farr, iarr);
292 [MethodImplAttribute (MethodImplOptions.NoInlining)]
293 static void stsfld<T> (T[] arr) {
294 GFoo<T>.static_t = arr [0];
297 [MethodImplAttribute (MethodImplOptions.NoInlining)]
298 static void ldsfld<T> (T[] arr) {
299 arr [0] = GFoo<T>.static_t;
302 [MethodImplAttribute (MethodImplOptions.NoInlining)]
303 static void ldsflda<T> (int[] iarr) {
304 iarr [0] = GFoo<T>.static_f.i;
307 public static int test_0_stsfld () {
308 Foo[] farr = new Foo [] { new Foo () { i = 1, j = 2 } };
311 if (GFoo<Foo>.static_t.i != 1 || GFoo<Foo>.static_t.j != 2)
314 Foo[] farr2 = new Foo [1];
316 if (farr2 [0].i != 1 || farr2 [0].j != 2)
319 var iarr = new int [10];
320 GFoo<Foo>.static_f = new Foo () { i = 5, j = 6 };
328 [MethodImplAttribute (MethodImplOptions.NoInlining)]
329 static object newarr<T> () {
330 object o = new T[10];
334 public static int test_0_vt_newarr () {
335 object o = newarr<Foo> ();
341 [MethodImplAttribute (MethodImplOptions.NoInlining)]
342 static Type ldtoken<T> () {
343 return typeof (GFoo<T>);
346 public static int test_0_vt_ldtoken () {
347 Type t = ldtoken<Foo> ();
348 if (t != typeof (GFoo<Foo>))
351 if (t != typeof (GFoo<int>))
357 public static int test_0_vtype_list () {
358 List<int> l = new List<int> ();
366 [MethodImplAttribute (MethodImplOptions.NoInlining)]
367 static int args_simple<T> (T t, int i) {
371 [MethodImplAttribute (MethodImplOptions.NoInlining)]
372 static int args_simple<T> (T t, int i, T t2) {
376 [MethodImplAttribute (MethodImplOptions.NoInlining)]
377 static Type args_rgctx<T> (T t, int i) {
381 [MethodImplAttribute (MethodImplOptions.NoInlining)]
382 static Type eh_in<T> (T t, int i) {
383 throw new OverflowException ();
386 [MethodImplAttribute (MethodImplOptions.NoInlining)]
387 static T return_t<T> (T t) {
391 [MethodImplAttribute (MethodImplOptions.NoInlining)]
392 T return_this_t<T> (T t) {
396 interface IFaceGSharedVtIn {
400 class ClassGSharedVtIn : IFaceGSharedVtIn {
401 public T return_t<T> (T t) {
406 public static int test_0_gsharedvt_in () {
407 // Check that the non-generic argument is passed at the correct stack position
408 int r = args_simple<bool> (true, 42);
411 r = args_simple<Foo> (new Foo (), 43);
414 // Check that the proper rgctx is passed to the method
415 Type t = args_rgctx<int> (5, 42);
416 if (t != typeof (int))
418 var v = args_simple<GFoo2<int>> (new GFoo2<int> () { t = 11, t2 = 12 }, 44, new GFoo2<int> () { t = 11, t2 = 12 });
421 // Check that EH works properly
424 } catch (OverflowException) {
429 public static int test_0_gsharedvt_in_ret () {
430 int i = return_t<int> (42);
433 long l = return_t<long> (Int64.MaxValue);
434 if (l != Int64.MaxValue)
436 double d = return_t<double> (3.0);
439 float f = return_t<float> (3.0f);
442 short s = return_t<short> (16);
445 var v = new GFoo2<int> () { t = 55, t2 = 32 };
446 var v2 = return_t<GFoo2<int>> (v);
447 if (v2.t != 55 || v2.t2 != 32)
449 IFaceGSharedVtIn o = new ClassGSharedVtIn ();
450 var v3 = new GFoo2<long> () { t = 55, t2 = 32 };
451 var v4 = o.return_t<GFoo2<long>> (v3);
452 if (v4.t != 55 || v4.t2 != 32)
454 i = new GSharedTests ().return_this_t<int> (42);
460 public static int test_0_gsharedvt_in_delegates () {
461 Func<int, int> f = new Func<int, int> (return_t<int>);
468 [MethodImplAttribute (MethodImplOptions.NoInlining)]
469 public static T return_t<T> (T t) {
474 public static int test_0_gsharedvt_in_delegates_reflection () {
475 var m = typeof(DelClass).GetMethod ("return_t").MakeGenericMethod (new Type [] { typeof (int) });
476 Func<int, int> f = (Func<int, int>)Delegate.CreateDelegate (typeof (Func<int,int>), null, m, false);
482 [MethodImplAttribute (MethodImplOptions.NoInlining)]
483 static T return2_t<T> (T t) {
487 public static int test_0_gsharedvt_calls () {
488 if (return2_t (2) != 2)
490 if (return2_t ("A") != "A")
492 if (return2_t (2.0) != 2.0)
497 static GFoo3<T> newobj<T> (T t1, T t2) {
498 return new GFoo3<T> (t1, t2);
501 public static int test_0_gshared_new () {
502 var g1 = newobj (1, 2);
503 if (g1.t != 1 || g1.t2 != 2)
505 var g2 = newobj (1.0, 2.0);
506 if (g1.t != 1.0 || g1.t2 != 2.0)
512 [MethodImplAttribute (MethodImplOptions.NoInlining)]
513 static GFoo2<T> newobj_vt<T> (T t1, T t2) {
514 return new GFoo2<T> () { t = t1, t2 = t2 };
517 public static int test_0_gshared_new_vt () {
518 GFoo2<int> v1 = newobj_vt (1, 2);
519 if (v1.t != 1 || v1.t2 != 2)
521 GFoo2<double> v2 = newobj_vt (1.0, 2.0);
522 if (v2.t != 1.0 || v2.t2 != 2.0)
528 // Tests for transitioning out of gsharedvt code
531 // T1=Nullable<..> is not currently supported by gsharedvt
533 [MethodImplAttribute (MethodImplOptions.NoInlining)]
534 static T return_t_nogshared<T,T1> (T t) {
537 //Console.WriteLine ("X: " + t);
541 [MethodImplAttribute (MethodImplOptions.NoInlining)]
542 static int return_int_nogshared<T,T1> (T t) {
548 [MethodImplAttribute (MethodImplOptions.NoInlining)]
549 static A return_vtype_nogshared<T,T1> (T t) {
552 return new A () { a = 1, b = 2, c = 3 };
555 [MethodImplAttribute (MethodImplOptions.NoInlining)]
556 static T return2_t_out<T> (T t) {
557 return return_t_nogshared<T, int?> (t);
560 [MethodImplAttribute (MethodImplOptions.NoInlining)]
561 static int return2_int_out<T> (T t) {
562 return return_int_nogshared<T, int?> (t);
565 [MethodImplAttribute (MethodImplOptions.NoInlining)]
566 static A return2_vtype_out<T> (T t) {
567 return return_vtype_nogshared<T, int?> (t);
574 [Category ("!FULLAOT")]
575 public static int test_0_gsharedvt_out () {
576 if (return2_t_out (2) != 2)
578 if (return2_t_out ("A") != "A")
580 if (return2_t_out (2.0) != 2.0)
582 if (return2_t_out (2.0f) != 2.0f)
584 A a = new A () { a = 1, b = 2, c = 3 };
585 A a2 = return2_t_out (a);
586 if (a2.a != 1 || a2.b != 2 || a2.c != 3)
588 // Calls with non gsharedvt return types
589 if (return2_int_out (1) != 2)
591 A c = return2_vtype_out (a);
592 if (a2.a != 1 || a2.b != 2 || a2.c != 3)
597 public class GenericClass<T> {
598 public static T Z (IList<T> x, int index)
604 public static int test_0_generic_array_helpers () {
605 int[] x = new int[] {100, 200};
607 // Generic array helpers should be treated as gsharedvt-out
608 if (GenericClass<int>.Z (x, 0) != 100)
614 internal class IntComparer : IComparer<int>
616 public int Compare (int ix, int iy)
621 if (((uint) ix) < ((uint) iy))
627 [MethodImplAttribute (MethodImplOptions.NoInlining)]
628 static int gshared_out_iface<T> (T t1, T t2, IComparer<T> comp) {
629 return comp.Compare (t1, t2);
632 public static int test_0_gshared_out_iface () {
633 // Call out from gshared to a nongeneric method through a generic interface method
634 if (gshared_out_iface (2, 2, new IntComparer ()) != 0)
640 public int i1, i2, i3;
644 int i1, i2, i3, i4, i5;
648 [MethodImplAttribute (MethodImplOptions.NoInlining)]
649 public static void locals<T> (T t) {
650 Foo2<T> t2 = new Foo2<T> ();
654 public static int test_0_locals () {
655 // Test that instantiations of type parameters are allocated the proper local type
657 for (int j = 0; j < 10; ++j)
659 locals<Foo1> (new Foo1 () { i1 = 1, i2 = 2, i3 = 3 });
663 public interface IFace<T> {
664 T return_t_iface (T t);
667 public class Parent<T> {
668 public virtual T return_t_vcall (T t) {
669 throw new Exception ();
674 public class Child<T> : Parent<T>, IFace<T> {
675 public override T return_t_vcall (T t) {
678 public T return_t_iface (T t) {
683 [MethodImplAttribute (MethodImplOptions.NoInlining)]
684 static T return_t_vcall<T> (Parent<T> r, T t) {
685 return r.return_t_vcall (t);
688 public static int test_0_vcalls () {
689 if (return_t_vcall (new Child<int> (), 2) != 2)
692 for (int i = 0; i < 10; ++i) {
693 if (return_t_vcall (new Child<int> (), 2) != 2)
696 if (return_t_vcall (new Child<double> (), 2.0) != 2.0)
701 [MethodImplAttribute (MethodImplOptions.NoInlining)]
702 static T return_t_iface<T> (IFace<T> r, T t) {
703 return r.return_t_iface (t);
706 public static int test_0_iface_calls () {
707 if (return_t_iface (new Child<int> (), 2) != 2)
709 if (return_t_iface (new Child<double> (), 2.0) != 2.0)
718 static KeyValuePair<T1, T2> make_kvp<T1, T2> (T1 t1, T2 t2) {
719 return new KeyValuePair<T1, T2> (t1, t2);
722 static T2 use_kvp<T1, T2> (KeyValuePair<T1, T2> kvp) {
726 class ClassKVP : IFaceKVP {
727 public T do_kvp<T> (T a) {
728 var t = make_kvp (a, a);
729 // argument is an instance of a vtype instantiated with gsharedvt type arguments
734 public static int test_0_gsharedvt_ginstvt_constructed_arg () {
736 // AOT: Force a instantiation of use_kvp<long>
738 var t = make_kvp (a, a);
742 IFaceKVP c = new ClassKVP ();
743 if (c.do_kvp<long> (1) != 1)
748 public static int test_0_gsharedvt_ginstvt_constructed_arg_float () {
750 // AOT: Force a instantiation of use_kvp<double>
752 var t = make_kvp (a, a);
756 IFaceKVP c = new ClassKVP ();
757 if (c.do_kvp<double> (1) != 1)
767 class Getter : IGetter
769 public T Get<T>() { return default(T); }
772 abstract class Session
774 public abstract IGetter Getter { get; }
777 class IosSession : Session
779 private IGetter getter = new Getter();
780 public override IGetter Getter { get { return getter; } }
786 public static int test_0_regress_5156 () {
787 new IosSession().Getter.Get<ENUM_TYPE>();
802 public void OuterMethod<TArg1>(TArg1 value)
804 this.InnerMethod<TArg1, long>(value, 0);
807 private void InnerMethod<TArg1, TArg2>(TArg1 v1, TArg2 v2)
809 //Console.WriteLine("{0} {1}",v1,v2);
813 public static int test_0_regress_2096 () {
816 // The following work:
817 a.OuterMethod<int>(1);
818 a.OuterMethod<DateTime>(DateTime.Now);
821 a.OuterMethod<VT>(v);
824 // Next line will crash with Attempting to JIT compile method on device
825 // Attempting to JIT compile method
832 public void Test<T>()
834 //System.Console.WriteLine(typeof(T));
842 new B().Test<System.Collections.Generic.KeyValuePair<T, T>>();
846 public static int test_0_regress_6040 () {
847 //new B().Test<System.Collections.Generic.KeyValuePair<string, string>>();
849 new A<object>().Test();
850 new A<string>().Test();
854 class ArrayContainer<T> {
855 private T[,] container = new T[1,1];
858 [MethodImplAttribute (MethodImplOptions.NoInlining)]
860 return container [0, 0];
862 [MethodImplAttribute (MethodImplOptions.NoInlining)]
864 container [0, 0] = value;
869 [MethodImplAttribute (MethodImplOptions.NoInlining)]
870 public static int test_0_multi_dim_arrays () {
871 var c = new ArrayContainer<int> ();
873 return c.Prop == 5 ? 0 : 1;
876 [MethodImplAttribute (MethodImplOptions.NoInlining)]
877 static T2 rgctx_in_call_innner_inner<T1, T2> (T1 t1, T2 t2) {
881 [MethodImplAttribute (MethodImplOptions.NoInlining)]
882 static GFoo3<T> rgctx_in_call_inner<T> (T t) {
883 return rgctx_in_call_innner_inner (1, new GFoo3<T> ());
886 public static int test_0_rgctx_in_call () {
887 // The call is made through the rgctx call, and it needs an IN trampoline
888 var t = rgctx_in_call_inner (1);
894 [MethodImplAttribute (MethodImplOptions.NoInlining)]
895 static void arm_params1<T> (T t1, T t2, T t3, T t4, T t5, T t6) {
898 [MethodImplAttribute (MethodImplOptions.NoInlining)]
899 static void arm_params2<T> (T t1, T t2, T t3, long t4, T t5, T t6) {
902 public static int test_0_arm_param_passing () {
903 arm_params1<int> (1, 2, 3, 4, 5, 6);
904 arm_params1<int> (1, 2, 3, 4, 5, 6);
908 sealed class ScheduledItem<TAbsolute, TValue> {
909 private readonly object _scheduler;
910 private readonly TValue _state;
911 private readonly object _action;
913 public ScheduledItem(object o, TValue state, object action, TAbsolute dueTime) {
918 abstract class VirtualTimeSchedulerBase<TAbsolute, TRelative> {
919 public abstract void ScheduleAbsolute<TState>(TState state, TAbsolute dueTime);
922 class VirtualTimeScheduler<TAbsolute, TRelative> : VirtualTimeSchedulerBase<TAbsolute, TRelative> {
923 public override void ScheduleAbsolute<TState>(TState state, TAbsolute dueTime) {
924 var si = new ScheduledItem<TAbsolute, TState>(this, state, null, dueTime);
928 public static int test_0_rx_mixed_regress () {
929 var v = new VirtualTimeScheduler<long, long> ();
930 v.ScheduleAbsolute<Action> (null, 22);
935 public virtual T foo<T> (T t) {
940 class Class1 : Base {
943 public override T foo<T> (T t) {
949 class Class2 : Base {
952 public override T foo<T> (T t) {
958 [MethodImplAttribute (MethodImplOptions.NoInlining)]
959 public static void bar<T> (Base b, T t) {
963 public static int test_0_virtual_generic () {
964 Class1 c1 = new Class1 ();
965 Class2 c2 = new Class2 ();
967 if (!(c1.o is int) || ((int)c1.o != 5))
970 if (!(c1.o is double) || ((double)c1.o != 6.0))
973 if (!(c1.o is float) || ((float)c1.o != 7.0f))
976 if (!(c2.o is int) || ((int)c2.o != 5))
983 public interface IFace1<T> {
991 public class ClassIFace<T> : IFace1<T> {
1004 interface IFaceIFaceCall {
1005 void call<T, T2> (IFace1<object> iface);
1008 class MakeIFaceCall : IFaceIFaceCall {
1009 public void call<T, T2> (IFace1<object> iface) {
1014 // Check normal interface calls from gsharedvt call to fully instantiated methods
1015 public static int test_0_instatiated_iface_call () {
1016 ClassIFace<object> c1 = new ClassIFace<object> ();
1018 IFaceIFaceCall c = new MakeIFaceCall ();
1020 c.call<object, int> (c1);
1024 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1025 static string to_string<T, T2>(T t, T2 t2) {
1026 return t.ToString ();
1029 public enum AnEnum {
1034 public static int test_0_constrained_tostring () {
1035 if (to_string<int, int> (1, 1) != "1")
1037 if (to_string<AnEnum, int> (AnEnum.One, 1) != "One")
1039 if (to_string<string, int> ("A", 1) != "A")
1044 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1045 static int get_hash<T, T2>(T t, T2 t2) {
1046 return t.GetHashCode ();
1049 public static int test_0_constrained_get_hash () {
1050 if (get_hash<int, int> (1, 1) != 1.GetHashCode ())
1052 if (get_hash<double, int> (1.0, 1) != 1.0.GetHashCode ())
1054 if (get_hash<AnEnum, int> (AnEnum.One, 1) != AnEnum.One.GetHashCode ())
1056 if (get_hash<string, int> ("A", 1) != "A".GetHashCode ())
1061 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1062 static bool equals<T, T2>(T t, T2 t2) {
1063 return t.Equals (t);
1066 public static int test_0_constrained_equals () {
1067 if (equals<int, int> (1, 1) != true)
1069 if (equals<double, int> (1.0, 1) != true)
1071 if (equals<AnEnum, int> (AnEnum.One, 1) != true)
1073 if (equals<string, int> ("A", 1) != true)
1078 interface IGetType {
1079 Type gettype<T, T2>(T t, T2 t2);
1082 public class CGetType : IGetType {
1083 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1084 public Type gettype<T, T2>(T t, T2 t2) {
1085 return t.GetType ();
1088 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1089 public Type gettype2<T>(T t) {
1090 return t.GetType ();
1094 public static int test_0_constrained_gettype () {
1095 IGetType c = new CGetType ();
1096 if (c.gettype<int, int> (1, 1) != typeof (int))
1098 if (c.gettype<string, int> ("A", 1) != typeof (string))
1100 /* Partial sharing */
1101 var c2 = new CGetType ();
1102 if (c2.gettype2<long> (1) != typeof (long))
1107 interface IConstrainedCalls {
1108 Pair<int, int> vtype_ret<T, T2>(T t, T2 t2) where T: IReturnVType;
1109 AnEnum enum_ret<T, T2>(T t, T2 t2) where T: IReturnVType;
1112 public interface IReturnVType {
1113 Pair<int, int> return_vtype ();
1114 AnEnum return_enum ();
1117 public class CConstrainedCalls : IConstrainedCalls {
1118 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1119 public Pair<int, int> vtype_ret<T, T2>(T t, T2 t2) where T : IReturnVType {
1120 return t.return_vtype ();
1123 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1124 public AnEnum enum_ret<T, T2>(T t, T2 t2) where T : IReturnVType {
1125 return t.return_enum ();
1129 class ReturnVType : IReturnVType {
1130 public Pair<int, int> return_vtype () {
1131 return new Pair<int, int> () { First = 1, Second = 2 };
1133 public AnEnum return_enum () {
1138 public static int test_0_constrained_vtype_ret () {
1139 IConstrainedCalls c = new CConstrainedCalls ();
1140 var r = c.vtype_ret<ReturnVType, int> (new ReturnVType (), 1);
1141 if (r.First != 1 || r.Second != 2)
1146 public static int test_0_constrained_enum_ret () {
1147 IConstrainedCalls c = new CConstrainedCalls ();
1148 var r = c.enum_ret<ReturnVType, int> (new ReturnVType (), 1);
1149 if (r != AnEnum.Two)
1154 public struct Pair<T1, T2> {
1159 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1160 public static TState call_del<TState>(TState state, Func<object, TState, TState> action) {
1161 return action(null, state);
1164 [Category ("!FULLAOT")]
1165 public static int test_0_delegate_wrappers () {
1166 Func<object, Pair<int, int>, Pair<int, int>> del1 = delegate (object o, Pair<int, int> p) { return p; };
1167 Func<object, Pair<int, int>, Pair<int, int>> del2 = delegate (object o, Pair<int, int> p) { return p; };
1168 Func<object, Pair<double, int>, Pair<double, int>> del3 = delegate (object o, Pair<double, int> p) { return p; };
1169 var r1 = call_del<Pair<int, int>> (new Pair<int, int> { First = 1, Second = 2}, del1);
1170 if (r1.First != 1 || r1.Second != 2)
1172 var r2 = call_del<Pair<int, int>> (new Pair<int, int> { First = 3, Second = 4}, del2);
1173 if (r2.First != 3 || r2.Second != 4)
1175 var r3 = call_del<Pair<double, int>> (new Pair<double, int> { First = 1.0, Second = 2}, del3);
1176 if (r3.First != 1.0 || r3.Second != 2)
1182 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1183 public object foo<T1> (T1 t1, T t, object o) {
1188 class AClass : Base<long> {
1190 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1191 public object bar<T> (T t, long time, object o) {
1192 return foo (t, time, o);
1196 public static int test_0_out_in_wrappers () {
1197 var a = new AClass ();
1199 object o2 = a.bar<long> (1024, 0, o1);
1209 class Base<TAbsolute, T2> : BIFace {
1211 public TAbsolute Clock { get; set; }
1213 public virtual object AMethod () {
1218 class BClass : Base<long, long> {
1221 public static int test_0_regress_1 () {
1222 BIFace c = new BClass ();
1223 object o = c.AMethod ();
1224 if (!(o is long) || ((long)o != 0))
1230 T unbox_any<T> (object o);
1233 class Class3 : IFace3 {
1234 public virtual T unbox_any<T> (object o) {
1239 public static int test_0_unbox_any () {
1240 IFace3 o = new Class3 ();
1241 if (o.unbox_any<int> (16) != 16)
1243 if (o.unbox_any<long> ((long)32) != 32)
1245 if (o.unbox_any<double> (2.0) != 2.0)
1248 o.unbox_any<int> (2.0);
1250 } catch (Exception) {
1256 TSource Catch<TSource, TException>(TSource t) where TException : Exception;
1259 class Class4 : IFace4 {
1260 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1261 public TSource Catch<TSource, TException>(TSource t) where TException : Exception {
1266 // Check that mixed instantiations are correctly created/found in AOT
1267 public static int test_0_constraints () {
1268 IFace4 o = new Class4 ();
1269 o.Catch<int, Exception> (1);
1273 internal static Type Process<TSource, TElement> (TSource[] arr, Action<TElement, TElement> call) {
1274 arr [0] = default (TSource);
1275 return typeof (TSource);
1282 class Class5 : IFace5 {
1283 public Type foo<T> () {
1284 return Process<KeyValuePair<long, T>, T> (new KeyValuePair<long, T> [10], null);
1288 public static int test_0_rgctx_call_from_gshared_code () {
1289 var c = new Class5 ();
1290 if (c.foo<string> () != typeof (KeyValuePair<long, string>))
1295 public class Enumbers<T> {
1296 public object Enumerate (List<KeyValuePair<T, string>> alist)
1298 return alist.ToArray ();
1302 public static int test_0_checkthis_gshared_call () {
1303 Enumbers<string> e = new Enumbers<string> ();
1308 catch (NullReferenceException) {
1317 class Class6 : IFace6 {
1318 public T[] Del<T> (T t) {
1319 var res = new T [5];
1320 Func<T, T, T, T, T> func = delegate(T t1, T t2, T t3, T t4) { res [0] = t1; res [1] = t2; res [2] = t3; res [3] = t4; return t1; };
1321 var v = func.BeginInvoke(t, t, t, t, null, null);
1322 res [4] = func.EndInvoke (v);
1327 // FIXME: The runtime-invoke wrapper used by BeginInvoke is not found
1328 [Category ("!FULLAOT")]
1329 public static int test_0_begin_end_invoke () {
1330 IFace6 o = new Class6 ();
1331 var arr1 = o.Del (1);
1332 if (arr1 [0] != 1 || arr1 [1] != 1 || arr1 [2] != 1 || arr1 [3] != 1 || arr1 [4] != 1)
1334 var arr2 = o.Del (2.0);
1335 if (arr2 [0] != 2.0 || arr2 [1] != 2.0 || arr2 [2] != 2.0 || arr2 [3] != 2.0 || arr2 [4] != 2.0)
1340 public class TAbstractTableItem<TC> {
1341 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1342 public static void SetProperty<TV> () { }
1344 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1345 public static void Test () {
1346 SetProperty<bool> ();
1350 public static int test_0_gsharedvt_method_on_shared_class () {
1351 TAbstractTableItem<object>.Test ();
1355 interface IFaceBox {
1356 object box<T> (T t);
1357 bool is_null<T> (T t);
1360 class ClassBox : IFaceBox {
1361 public object box<T> (T t) {
1366 public bool is_null<T> (T t) {
1367 if (!(default(T) == null))
1373 public static int test_0_nullable_box () {
1374 IFaceBox c = new ClassBox ();
1376 object o = c.box<int?> (i);
1379 if (c.box<int?> (null) != null)
1381 long l = Int64.MaxValue - 1;
1382 o = c.box<long?> (l);
1385 if (c.box<long?> (null) != null)
1388 if (c.box<string> (s) != (object)s)
1393 public static int test_0_nullable_box_brtrue_opt () {
1394 IFaceBox c = new ClassBox ();
1396 if (c.is_null<double?> (null))
1402 interface IFaceUnbox2 {
1403 T unbox<T> (object o);
1406 class ClassUnbox2 : IFaceUnbox2 {
1407 public T unbox<T> (object o) {
1412 public static int test_0_nullable_unbox () {
1413 IFaceUnbox2 c = new ClassUnbox2 ();
1414 int? i = c.unbox<int?> (5);
1417 int? j = c.unbox<int?> (null);
1423 interface IConstrained {
1425 void foo_ref_arg (string s);
1428 interface IConstrained<T3> {
1429 void foo_gsharedvt_arg (T3 s);
1430 T3 foo_gsharedvt_ret (T3 s);
1433 static object constrained_res;
1435 struct ConsStruct : IConstrained {
1438 public void foo () {
1439 constrained_res = i;
1442 public void foo_ref_arg (string s) {
1443 constrained_res = s == "A" ? 42 : 0;
1447 class ConsClass : IConstrained {
1450 public void foo () {
1451 constrained_res = i;
1454 public void foo_ref_arg (string s) {
1455 constrained_res = s == "A" ? 43 : 0;
1459 struct ConsStruct<T> : IConstrained<T> {
1460 public void foo_gsharedvt_arg (T s) {
1461 constrained_res = s;
1464 public T foo_gsharedvt_ret (T s) {
1469 struct ConsStructThrow : IConstrained {
1470 public void foo () {
1471 throw new Exception ();
1474 public void foo_ref_arg (string s) {
1478 interface IFaceConstrained {
1479 void constrained_void_iface_call<T, T2>(T t, T2 t2) where T2 : IConstrained;
1480 void constrained_void_iface_call_ref_arg<T, T2>(T t, T2 t2) where T2 : IConstrained;
1481 void constrained_void_iface_call_gsharedvt_arg<T, T2, T3>(T t, T2 t2, T3 t3) where T2 : IConstrained<T>;
1482 T constrained_iface_call_gsharedvt_ret<T, T2, T3>(T t, T2 t2, T3 t3) where T2 : IConstrained<T>;
1483 T2 constrained_normal_call<T, T2>(T t, T2 t2) where T2 : VClass;
1486 class ClassConstrained : IFaceConstrained {
1487 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1488 public void constrained_void_iface_call<T, T2>(T t, T2 t2) where T2 : IConstrained {
1492 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1493 public void constrained_void_iface_call_ref_arg<T, T2>(T t, T2 t2) where T2 : IConstrained {
1494 t2.foo_ref_arg ("A");
1497 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1498 public void constrained_void_iface_call_gsharedvt_arg<T, T2, T3>(T t, T2 t2, T3 t3) where T2 : IConstrained<T> {
1499 t2.foo_gsharedvt_arg (t);
1502 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1503 public T constrained_iface_call_gsharedvt_ret<T, T2, T3>(T t, T2 t2, T3 t3) where T2 : IConstrained<T> {
1504 return t2.foo_gsharedvt_ret (t);
1507 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1508 public T2 constrained_normal_call<T, T2>(T t, T2 t2) where T2 : VClass {
1509 /* This becomes a constrained call even through 't2' is forced to be a reference type by the constraint */
1510 return (T2)t2.foo (5);
1515 public virtual VClass foo (int i) {
1520 public static int test_0_constrained_void_iface_call () {
1521 IFaceConstrained c = new ClassConstrained ();
1522 var s = new ConsStruct () { i = 42 };
1523 constrained_res = null;
1524 c.constrained_void_iface_call<int, ConsStruct> (1, s);
1525 if (!(constrained_res is int) || ((int)constrained_res) != 42)
1527 constrained_res = null;
1528 c.constrained_void_iface_call_ref_arg<int, ConsStruct> (1, s);
1529 if (!(constrained_res is int) || ((int)constrained_res) != 42)
1531 var s2 = new ConsClass () { i = 43 };
1532 constrained_res = null;
1533 c.constrained_void_iface_call<int, ConsClass> (1, s2);
1534 if (!(constrained_res is int) || ((int)constrained_res) != 43)
1536 constrained_res = null;
1537 c.constrained_void_iface_call_ref_arg<int, ConsClass> (1, s2);
1538 if (!(constrained_res is int) || ((int)constrained_res) != 43)
1543 public static int test_0_constrained_eh () {
1544 var s2 = new ConsStructThrow () { };
1546 IFaceConstrained c = new ClassConstrained ();
1547 c.constrained_void_iface_call<int, ConsStructThrow> (1, s2);
1549 } catch (Exception) {
1554 public static int test_0_constrained_void_iface_call_gsharedvt_arg () {
1555 // This tests constrained calls through interfaces with one gsharedvt arg, like IComparable<T>.CompareTo ()
1556 IFaceConstrained c = new ClassConstrained ();
1558 var s = new ConsStruct<int> ();
1559 constrained_res = null;
1560 c.constrained_void_iface_call_gsharedvt_arg<int, ConsStruct<int>, int> (42, s, 55);
1561 if (!(constrained_res is int) || ((int)constrained_res) != 42)
1564 var s2 = new ConsStruct<string> ();
1565 constrained_res = null;
1566 c.constrained_void_iface_call_gsharedvt_arg<string, ConsStruct<string>, int> ("A", s2, 55);
1567 if (!(constrained_res is string) || ((string)constrained_res) != "A")
1573 public static int test_0_constrained_iface_call_gsharedvt_ret () {
1574 IFaceConstrained c = new ClassConstrained ();
1576 var s = new ConsStruct<int> ();
1577 int ires = c.constrained_iface_call_gsharedvt_ret<int, ConsStruct<int>, int> (42, s, 55);
1581 var s2 = new ConsStruct<string> ();
1582 string sres = c.constrained_iface_call_gsharedvt_ret<string, ConsStruct<string>, int> ("A", s2, 55);
1589 public static int test_0_constrained_normal_call () {
1590 IFaceConstrained c = new ClassConstrained ();
1592 var o = new VClass ();
1593 var res = c.constrained_normal_call<int, VClass> (1, o);
1594 return res == o ? 0 : 1;
1597 public static async Task<T> FooAsync<T> (int i, int j) {
1598 Task<int> t = new Task<int> (delegate () { return 42; });
1599 var response = await t;
1603 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1604 public static void call_async<T> (int i, int j) {
1605 Task<T> t = FooAsync<T> (1, 2);
1606 // FIXME: This doesn't work
1607 //t.RunSynchronously ();
1610 // In AOT mode, the async infrastructure depends on gsharedvt methods
1611 public static int test_0_async_call_from_generic () {
1612 call_async<string> (1, 2);
1616 public static int test_0_array_helper_gsharedvt () {
1617 var arr = new AnEnum [16];
1618 var c = new ReadOnlyCollection<AnEnum> (arr);
1619 return c.Contains (AnEnum.Two) == false ? 0 : 1;
1622 interface IFaceCallPatching {
1623 bool caller<T, T2> ();
1626 class CallPatching2<T> {
1630 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1631 public bool callee () {
1632 return (string)o == "ABC";
1636 class CallPatching : IFaceCallPatching {
1637 public bool caller<T, T2> () {
1638 var c = new CallPatching2<T> ();
1645 // This tests that generic calls made from gsharedvt methods are not patched normally.
1646 // If they are, the first call to 'caller' would patch in the gshared version of
1647 // 'callee', causing the second call to fail because the gshared version of callee
1648 // wouldn't work with CallPatching2<bool> since it has a different object layout.
1650 public static int test_0_call_patching () {
1651 IFaceCallPatching c = new CallPatching ();
1652 c.caller<object, bool> ();
1653 if (!c.caller<bool, bool> ())
1658 struct EmptyStruct {
1661 public struct BStruct {
1662 public int a, b, c, d;
1665 interface IFoo3<T> {
1666 int Bytes (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1667 byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, byte b8);
1668 int SBytes (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1669 sbyte b1, sbyte b2, sbyte b3, sbyte b4);
1670 int Shorts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1671 short b1, short b2, short b3, short b4);
1672 int UShorts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1673 ushort b1, ushort b2, ushort b3, ushort b4);
1674 int Ints (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1675 int i1, int i2, int i3, int i4);
1676 int UInts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1677 uint i1, uint i2, uint i3, uint i4);
1678 int Structs (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1682 class Foo3<T> : IFoo3<T> {
1683 public int Bytes (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1684 byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, byte b8) {
1685 return b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8;
1687 public int SBytes (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1688 sbyte b1, sbyte b2, sbyte b3, sbyte b4) {
1689 return b1 + b2 + b3 + b4;
1691 public int Shorts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1692 short b1, short b2, short b3, short b4) {
1693 return b1 + b2 + b3 + b4;
1695 public int UShorts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1696 ushort b1, ushort b2, ushort b3, ushort b4) {
1697 return b1 + b2 + b3 + b4;
1699 public int Ints (T t, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8,
1700 int i1, int i2, int i3, int i4) {
1701 return i1 + i2 + i3 + i4;
1703 public int UInts (T t, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8,
1704 uint i1, uint i2, uint i3, uint i4) {
1705 return (int)(i1 + i2 + i3 + i4);
1707 public int Structs (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
1709 return s.a + s.b + s.c + s.d;
1713 // Passing small normal arguments on the stack
1714 public static int test_0_arm64_small_stack_args () {
1715 IFoo3<EmptyStruct> o = (IFoo3<EmptyStruct>)Activator.CreateInstance (typeof (Foo3<>).MakeGenericType (new Type [] { typeof (EmptyStruct) }));
1716 int res = o.Bytes (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8);
1719 int res2 = o.SBytes (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, -1, -2, -3, -4);
1722 int res3 = o.Shorts (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, -1, -2, -3, -4);
1725 int res4 = o.UShorts (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4);
1728 int res5 = o.Ints (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, -1, -2, -3, -4);
1731 int res6 = o.UInts (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4);
1737 interface ISmallArg {
1738 T foo<T> (string s1, string s2, string s3, string s4, string s5, string s6, string s7, string s8,
1739 string s9, string s10, string s11, string s12, string s13, T t);
1742 class SmallArgClass : ISmallArg {
1743 public T foo<T> (string s1, string s2, string s3, string s4, string s5, string s6, string s7, string s8,
1744 string s9, string s10, string s11, string s12, string s13, T t) {
1749 public static int test_1_small_gsharedvt_stack_arg_ios () {
1750 ISmallArg o = new SmallArgClass ();
1751 return o.foo<int> ("", "", "", "", "", "", "", "", "", "", "", "", "", 1);
1754 // Passing vtype normal arguments on the stack
1755 public static int test_0_arm64_vtype_stack_args () {
1756 IFoo3<EmptyStruct> o = (IFoo3<EmptyStruct>)Activator.CreateInstance (typeof (Foo3<>).MakeGenericType (new Type [] { typeof (EmptyStruct) }));
1757 int res = o.Structs (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, new BStruct () { a = 1, b = 2, c = 3, d = 4 });
1763 interface IFoo4<T> {
1764 T Get(T[,] arr, T t);
1767 class Foo4<T> : IFoo4<T> {
1768 public T Get(T[,] arr, T t) {
1778 public static int test_0_multi_dim_arrays_2 () {
1779 IFoo4<int> foo = new Foo4<int> ();
1780 var arr = new int [10, 10];
1781 int res = foo.Get (arr, 10);
1785 IFoo4<AStruct> foo2 = new Foo4<AStruct> ();
1786 var arr2 = new AStruct [10, 10];
1787 var res2 = foo2.Get (arr2, new AStruct () { a = 1, b = 2 });
1788 if (res2.a != 1 || res2.b != 2)
1793 public interface IFaceTest {
1794 int iface_method ();
1797 public interface IFaceConstrainedIFace {
1798 int foo<T, T2> (ref T val) where T: IFaceTest;
1801 class ConstrainedIFace : IFaceConstrainedIFace {
1802 public int foo<T, T2> (ref T val) where T: IFaceTest {
1803 return val.iface_method ();
1807 class ClassTest : IFaceTest {
1808 public int iface_method () {
1813 // Test constrained calls on an interface made from gsharedvt methods
1814 public static int test_42_gsharedvt_constrained_iface () {
1815 IFaceConstrainedIFace obj = new ConstrainedIFace ();
1816 IFaceTest t = new ClassTest ();
1817 return obj.foo<IFaceTest, int> (ref t);
1820 // Sign extension tests
1821 // 0x55 == 85 == 01010101
1822 // 0xAA == 170 == 10101010
1823 // 0x5555 == 21845 == 0101010101010101
1824 // 0xAAAA == 43690 == 1010101010101010
1825 // 0x55555555 == 1431655765
1826 // 0xAAAAAAAA == 2863311530
1827 // 0x5555555555555555 == 6148914691236517205
1828 // 0xAAAAAAAAAAAAAAAA == 12297829382473034410
1830 public interface SEFace<T> {
1831 T Copy (int a, int b, int c, int d, T t);
1834 class SEClass<T> : SEFace<T> {
1835 public T Copy (int a, int b, int c, int d, T t) {
1841 static int test_20_signextension_sbyte () {
1842 Type t = typeof (sbyte);
1843 object o = Activator.CreateInstance (typeof (SEClass<>).MakeGenericType (new Type[] { t }));
1844 var i = (SEFace<sbyte>)o;
1846 long zz = i.Copy (1,2,3,4,(sbyte)(-0x55));
1848 bool success = zz == -0x55;
1849 return success ? 20 : 1;
1852 static int test_20_signextension_byte () {
1853 Type t = typeof (byte);
1854 object o = Activator.CreateInstance (typeof (SEClass<>).MakeGenericType (new Type[] { t }));
1855 var i = (SEFace<byte>)o;
1857 ulong zz = i.Copy (1,2,3,4,(byte)(0xAA));
1859 bool success = zz == 0xAA;
1860 return success ? 20 : 1;
1863 static int test_20_signextension_short () {
1864 Type t = typeof (short);
1865 object o = Activator.CreateInstance (typeof (SEClass<>).MakeGenericType (new Type[] { t }));
1866 var i = (SEFace<short>)o;
1868 long zz = i.Copy (1,2,3,4,(short)(-0x5555));
1870 bool success = zz == -0x5555;
1871 return success ? 20 : 1;
1874 static int test_20_signextension_ushort () {
1875 Type t = typeof (ushort);
1876 object o = Activator.CreateInstance (typeof (SEClass<>).MakeGenericType (new Type[] { t }));
1877 var i = (SEFace<ushort>)o;
1879 ulong zz = i.Copy (1,2,3,4,(ushort)(0xAAAA));
1881 bool success = zz == 0xAAAA;
1882 return success ? 20 : 1;
1885 static int test_20_signextension_int () {
1886 Type t = typeof (int);
1887 object o = Activator.CreateInstance (typeof (SEClass<>).MakeGenericType (new Type[] { t }));
1888 var i = (SEFace<int>)o;
1890 long zz = i.Copy (1,2,3,4,(int)(-0x55555555));
1892 bool success = zz == -0x55555555;
1893 return success ? 20 : 1;
1896 static int test_20_signextension_uint () {
1897 Type t = typeof (uint);
1898 object o = Activator.CreateInstance (typeof (SEClass<>).MakeGenericType (new Type[] { t }));
1899 var i = (SEFace<uint>)o;
1901 ulong zz = i.Copy (1,2,3,4,(uint)(0xAAAAAAAA));
1903 bool success = zz == 0xAAAAAAAA;
1904 return success ? 20 : 1;
1907 static int test_20_signextension_long () {
1908 Type t = typeof (long);
1909 object o = Activator.CreateInstance (typeof (SEClass<>).MakeGenericType (new Type[] { t }));
1910 var i = (SEFace<long>)o;
1912 long zz = i.Copy (1,2,3,4,(long)(-0x5555555555555555));
1914 bool success = zz == -0x5555555555555555;
1915 return success ? 20 : 1;
1918 static int test_20_signextension_ulong () {
1919 Type t = typeof (ulong);
1920 object o = Activator.CreateInstance (typeof (SEClass<>).MakeGenericType (new Type[] { t }));
1921 var i = (SEFace<ulong>)o;
1923 ulong zz = i.Copy (1,2,3,4,(ulong)(0xAAAAAAAAAAAAAAAA));
1925 bool success = zz == 0xAAAAAAAAAAAAAAAA;
1926 return success ? 20 : 1;
1929 void gsharedvt_try_at_offset_0<T> (ref T disposable)
1930 where T : class, IDisposable {
1932 disposable.Dispose ();
1938 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1939 static DateTimeOffset gsharedvt_vphi_inner<T> (T t) {
1940 return DateTimeOffset.MinValue;
1943 static DateTimeOffset gsharedvt_vphi<T> (T t) {
1944 int[] arr = new int [10];
1949 v = gsharedvt_vphi_inner (t);
1951 v = gsharedvt_vphi_inner (t);
1954 return DateTimeOffset.MinValue;
1958 static int test_0_gsharedvt_vphi_volatile () {
1965 public class MobileServiceCollection<TTable, TCol>
1967 public async Task<int> LoadMoreItemsAsync(int count = 0) {
1968 await Task.Delay (1000);
1969 int results = await ProcessQueryAsync ();
1973 protected async virtual Task<int> ProcessQueryAsync() {
1974 await Task.Delay (1000);
1975 throw new Exception ();
1980 public class GSharedTests : Tests {