linux-packaging-mono/mono/tests/dynamic-generic-size.cs
Xamarin Public Jenkins (auto-signing) 6bdd276d05 Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
2017-04-10 11:41:01 +00:00

62 lines
1.6 KiB
C#

using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Collections.Generic;
namespace GenericSize
{
class GenericSize
{
static int Iterations = 10000;
static AssemblyBuilder assembly;
static ModuleBuilder module;
static string ASSEMBLY_NAME = "MonoTests.System.Reflection.Emit.TypeBuilderTest";
static void SetUp ()
{
AssemblyName assemblyName = new AssemblyName ();
assemblyName.Name = ASSEMBLY_NAME;
assembly =
Thread.GetDomain ().DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Run);
module = assembly.DefineDynamicModule ("module1");
}
static int Main()
{
SetUp ();
TypeBuilder tb = module.DefineType ("Test", TypeAttributes.Public);
tb.DefineGenericParameters ("T");
var tb_ctor = tb.DefineDefaultConstructor (MethodAttributes.Public);
var tb2 = module.DefineType ("Test2", TypeAttributes.Public);
var g0 = tb2.DefineGenericParameters ("T");
var mb = tb2.DefineMethod ("Foo", MethodAttributes.Public | MethodAttributes.Static, typeof (object), new Type [0]);
var il = mb.GetILGenerator();
il.Emit(OpCodes.Newobj, TypeBuilder.GetConstructor (tb.MakeGenericType (g0), tb_ctor));
il.Emit(OpCodes.Ret);
var t1 = tb.CreateType ();
var t2 = tb2.CreateType ();
var ginst = t2.MakeGenericType (typeof (string));
var method = ginst.GetMethod ("Foo", BindingFlags.Public | BindingFlags.Static);
var lst = new List<Object>();
for (int i = 0; i < GenericSize.Iterations; i++) {
lst.Add (method.Invoke (null, null));
if (i % 15 == 0)
GC.Collect();
}
return 0;
}
}
}