X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Ftests%2Fruntime-invoke.cs;h=2c34478f83d63d1931908c51f24d1384fbc2f1db;hb=919a03d17d36604f05e1d99c3f9f26a1509e9655;hp=b340cd13065c4eb7a00d1940f03a36a5d728d446;hpb=c9afd924fdbe70a69ab9960c379f280ecbb3a778;p=mono.git diff --git a/mono/tests/runtime-invoke.cs b/mono/tests/runtime-invoke.cs index b340cd13065..2c34478f83d 100644 --- a/mono/tests/runtime-invoke.cs +++ b/mono/tests/runtime-invoke.cs @@ -29,6 +29,11 @@ enum Enum2 D } +struct AStruct { + public int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; + public int a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; +} + class Tests { public static Enum1 return_enum1 () { @@ -47,6 +52,10 @@ class Tests return UInt64.MaxValue - 5; } + public static object return_t (T t) { + return (object)t; + } + static int Main (string[] args) { return TestDriver.RunTests (typeof (Tests), args); @@ -215,4 +224,83 @@ class Tests var res = typeof (Tests).GetMethod ("pack_i1").Invoke (null, new object [] { (sbyte)-0x40 }); return (bool)res ? 0 : 1; } + + struct Point { + public int x, y; + } + + struct Foo2 { + public Point Location { + get { + return new Point () { x = 10, y = 20 }; + } + } + } + + public static int test_0_vtype_method_vtype_ret () { + var f = new Foo2 (); + var p = (Point)typeof (Foo2).GetMethod ("get_Location").Invoke (f, null); + if (p.x != 10 || p.y != 20) + return 1; + return 0; + } + + public static int test_0_array_get_set () { + int[,,] arr = new int [10, 10, 10]; + arr [0, 1, 2] = 42; + var gm = arr.GetType ().GetMethod ("Get"); + int i = (int) gm.Invoke (arr, new object [] { 0, 1, 2 }); + if (i != 42) + return 1; + var sm = arr.GetType ().GetMethod ("Set"); + sm.Invoke (arr, new object [] { 0, 1, 2, 33 }); + if (arr [0, 1, 2] != 33) + return 2; + return 0; + } + + public static int test_0_multi_dim_array_ctor () { + var type1 = Type.GetType ("System.Char[,]").GetTypeInfo (); + + ConstructorInfo ci = null; + foreach (var c in type1.DeclaredConstructors) { + if (c.GetParameters ().Length == 4) + ci = c; + } + var res = ci.Invoke (new object[] { 1, 5, -10, 7 }); + var a = (Array)res; + if (a.GetLength (0) != 5 || a.GetLowerBound (0) != 1 || a.GetLength (1) != 7 || a.GetLowerBound (1) != -10) + return 1; + return 0; + } + + private static void method_invoke_no_modify_by_value_arg_helper (int dummy) + { + } + + public static int test_0_method_invoke_no_modify_by_value_arg () + { + var args = new object[] { null }; + var method = typeof (Tests).GetMethod ("method_invoke_no_modify_by_value_arg_helper", BindingFlags.NonPublic | BindingFlags.Static); + method.Invoke (null, args); + if (args[0] == null) + return 0; + else + return 1; + } + + public static int test_0_large_arg () + { + var arg = new AStruct (); + arg.a1 = 1; + arg.a2 = 2; + arg.a3 = 3; + arg.a20 = 20; + var res = typeof (Tests).GetMethod ("return_t").MakeGenericMethod (new Type [] { typeof (AStruct) }).Invoke (null, new object [] { arg }); + var arg2 = (AStruct)res; + if (arg2.a20 == 20) + return 0; + else + return 1; + } }