Add performance tests from the CLR perf lab.
authorBrian Robbins <brianrob@microsoft.com>
Sat, 19 Mar 2016 06:38:34 +0000 (23:38 -0700)
committerBrian Robbins <brianrob@microsoft.com>
Wed, 23 Mar 2016 20:13:15 +0000 (13:13 -0700)
13 files changed:
tests/src/performance/perflab/BlockCopyPerf.cs [new file with mode: 0644]
tests/src/performance/perflab/CastingPerf.cs [new file with mode: 0644]
tests/src/performance/perflab/CastingPerf2.cs [new file with mode: 0644]
tests/src/performance/perflab/DelegatePerf.cs [new file with mode: 0644]
tests/src/performance/perflab/EnumPerf.cs [new file with mode: 0644]
tests/src/performance/perflab/LowLevelPerf.cs [new file with mode: 0644]
tests/src/performance/perflab/PerfLab.csproj [new file with mode: 0644]
tests/src/performance/perflab/Properties/AssemblyInfo.cs [new file with mode: 0644]
tests/src/performance/perflab/ReflectionPerf.cs [new file with mode: 0644]
tests/src/performance/perflab/StackWalk.cs [new file with mode: 0644]
tests/src/performance/perflab/ThreadingPerf.cs [new file with mode: 0644]
tests/src/performance/perflab/project.json [new file with mode: 0644]
tests/src/performance/performance.targets [new file with mode: 0644]

diff --git a/tests/src/performance/perflab/BlockCopyPerf.cs b/tests/src/performance/perflab/BlockCopyPerf.cs
new file mode 100644 (file)
index 0000000..5265983
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Xunit.Performance;
+using System;
+using Xunit;
+
+public class BlockCopyPerf
+{
+    [Benchmark]
+    [InlineData(0)]
+    [InlineData(10)]
+    [InlineData(100)]
+    [InlineData(1000)]
+    public static void CallBlockCopy(int numElements)
+    {
+        byte[] bytes = new byte[numElements * 2];
+        Buffer.BlockCopy(bytes, 0, bytes, numElements, numElements);
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                Buffer.BlockCopy(bytes, 0, bytes, numElements, numElements);
+    }
+}
diff --git a/tests/src/performance/perflab/CastingPerf.cs b/tests/src/performance/perflab/CastingPerf.cs
new file mode 100644 (file)
index 0000000..193a2df
--- /dev/null
@@ -0,0 +1,365 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Collections.Generic;
+
+public interface IFoo
+{
+}
+
+public interface IFoo_1
+{
+}
+
+public interface IFoo_2
+{
+}
+
+public interface IFoo_3
+{
+}
+
+public interface IFoo_4
+{
+}
+
+public interface IFoo_5
+{
+}
+
+// C# lays the interfaces in reverse order in metadata. So IFoo is the first and IFoo_5 is last
+public class Foo : IFoo_5, IFoo_4, IFoo_3, IFoo_2, IFoo_1, IFoo
+{
+    public int m_i;
+}
+
+public class Foo_1 : Foo
+{
+    public int m_j;
+}
+
+public class Foo_2 : Foo_1
+{
+    public int m_k;
+}
+
+public class Foo_3 : Foo_2
+{
+    public int m_l;
+}
+
+public class Foo_4 : Foo_3
+{
+    public int m_m;
+}
+
+public class Foo_5 : Foo_4
+{
+    public int m_n;
+}
+
+// C# lays the interfaces in reverse order in metadata. So IFoo_1 is the first and IFoo is last
+public class Foo2 : IFoo, IFoo_5, IFoo_4, IFoo_3, IFoo_2, IFoo_1
+{
+    public int m_i;
+}
+
+public struct FooSVT
+{
+    public int m_i;
+    public int m_j;
+}
+
+public struct FooORVT
+{
+    public Object m_o;
+    public Foo m_f;
+}
+
+public interface IMyInterface1 { }
+public interface IMyInterface2 { }
+public class MyClass1 : IMyInterface1 { }
+public class MyClass2 : IMyInterface2 { }
+public class MyClass4<T> : IMyInterface1 { }
+
+public class CastingPerf
+{
+    public const int NUM_ARRAY_ELEMENTS = 100;
+
+    public static int[] j;
+    public static int[] k;
+    public static Foo[] foo;
+    public static Foo2[] foo2;
+    public static Foo[] n;
+    public static Foo_5[] foo_5;
+    public static FooSVT[] svt;
+    public static FooORVT[] orvt;
+
+    public static Object o;
+    public static Object[] o_ar;
+    public static Foo[] f;
+    public static IFoo[] ifo;
+    public static IFoo_5[] if_5;
+
+    static CastingPerf()
+    {
+        j = new int[NUM_ARRAY_ELEMENTS];
+        for (int i = 0; i < j.Length; i++)
+        {
+            j[i] = i;
+        }
+        foo = new Foo[NUM_ARRAY_ELEMENTS];
+        for (int i = 0; i < foo.Length; i++)
+        {
+            foo[i] = new Foo();
+        }
+        foo2 = new Foo2[NUM_ARRAY_ELEMENTS];
+        for (int i = 0; i < foo2.Length; i++)
+        {
+            foo2[i] = new Foo2();
+        }
+        n = new Foo[NUM_ARRAY_ELEMENTS];
+        foo_5 = new Foo_5[NUM_ARRAY_ELEMENTS];
+        for (int i = 0; i < foo_5.Length; i++)
+        {
+            foo_5[i] = new Foo_5();
+        }
+        svt = new FooSVT[NUM_ARRAY_ELEMENTS];
+        orvt = new FooORVT[NUM_ARRAY_ELEMENTS];
+    }
+
+    [Benchmark]
+    public static void ObjFooIsObj()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                o = foo;
+    }
+
+    [Benchmark]
+    public static void ObjFooIsObj2()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                o_ar = foo;
+    }
+
+    [Benchmark]
+    public static void ObjObjIsFoo()
+    {
+        o = foo;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                o_ar = (Object[])o;
+    }
+
+    [Benchmark]
+    public static void FooObjIsFoo()
+    {
+        o = foo;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                f = (Foo[])o;
+    }
+
+    [Benchmark]
+    public static void FooObjIsFoo2()
+    {
+        o_ar = foo;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                f = (Foo[])o_ar;
+    }
+
+    [Benchmark]
+    public static void FooObjIsNull()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                o = (Foo[])n;
+    }
+
+    [Benchmark]
+    public static void FooObjIsDescendant()
+    {
+        o = foo_5;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                f = (Foo[])o;
+    }
+
+    [Benchmark]
+    public static void IFooFooIsIFoo()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                ifo = foo;
+    }
+
+    [Benchmark]
+    public static void IFooObjIsIFoo()
+    {
+        o = foo;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                ifo = (IFoo[])o;
+    }
+
+    [Benchmark]
+    public static void IFooObjIsIFooInterAlia()
+    {
+        o = foo2;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                if_5 = (IFoo_5[])o;
+    }
+
+    [Benchmark]
+    public static void IFooObjIsDescendantOfIFoo()
+    {
+        o = foo_5;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                ifo = (IFoo[])o;
+    }
+
+    [Benchmark]
+    public static void ObjInt()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                o = (Object)j;
+    }
+
+    [Benchmark]
+    public static void IntObj()
+    {
+        o = (Object)j;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                k = (int[])o;
+    }
+
+    [Benchmark]
+    public static void ObjScalarValueType()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                o = svt;
+    }
+
+    [Benchmark]
+    public static void ScalarValueTypeObj()
+    {
+        o = svt;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                svt = (FooSVT[])o;
+    }
+
+    [Benchmark]
+    public static void ObjObjrefValueType()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                o = (Object)orvt;
+    }
+
+    [Benchmark]
+    public static void ObjrefValueTypeObj()
+    {
+        o = (Object)orvt;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                orvt = (FooORVT[])o;
+    }
+
+    [Benchmark]
+    public static void FooObjCastIfIsa()
+    {
+        o = foo;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                if (o is Foo[])
+                    f = (Foo[])o;
+    }
+
+    [Benchmark]
+    public static bool CheckObjIsInterfaceYes()
+    {
+        bool res = false;
+        Object obj = new MyClass1();
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                res = obj is IMyInterface1;
+        return res;
+    }
+
+    [Benchmark]
+    public static bool CheckObjIsInterfaceNo()
+    {
+        bool res = false;
+        Object obj = new MyClass2();
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                res = obj is IMyInterface1;
+        return res;
+    }
+
+    [Benchmark]
+    public static bool CheckIsInstAnyIsInterfaceYes()
+    {
+        bool res = false;
+        Object obj = new MyClass4<List<string>>();
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                res = obj is IMyInterface1;
+        return res;
+    }
+
+    [Benchmark]
+    public static bool CheckIsInstAnyIsInterfaceNo()
+    {
+        bool res = false;
+        Object obj = new MyClass4<List<string>>();
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                res = obj is IMyInterface2;
+        return res;
+    }
+
+    [Benchmark]
+    public static bool CheckArrayIsInterfaceYes()
+    {
+        bool res = false;
+        Object[] arr = new MyClass1[5];
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                res = arr is IMyInterface1[];
+        return res;
+    }
+
+    [Benchmark]
+    public static bool CheckArrayIsInterfaceNo()
+    {
+        bool res = false;
+        Object[] arr = new MyClass2[5];
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                res = arr is IMyInterface1[];
+        return res;
+    }
+}
diff --git a/tests/src/performance/perflab/CastingPerf2.cs b/tests/src/performance/perflab/CastingPerf2.cs
new file mode 100644 (file)
index 0000000..b2cc448
--- /dev/null
@@ -0,0 +1,237 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using CastingPerf2;
+using Microsoft.Xunit.Performance;
+
+namespace CastingPerf2
+{
+    public interface IFoo
+    {
+    }
+
+    public interface IFoo_1
+    {
+    }
+
+    public interface IFoo_2
+    {
+    }
+
+    public interface IFoo_3
+    {
+    }
+
+    public interface IFoo_4
+    {
+    }
+
+    public interface IFoo_5
+    {
+    }
+
+    // C# lays the interfaces in reverse order in metadata. So IFoo is the first and IFoo_5 is last
+    public class Foo : IFoo_5, IFoo_4, IFoo_3, IFoo_2, IFoo_1, IFoo
+    {
+        public int m_i;
+    }
+
+    public class Foo_1 : Foo
+    {
+        public int m_j;
+    }
+
+    public class Foo_2 : Foo_1
+    {
+        public int m_k;
+    }
+
+    public class Foo_3 : Foo_2
+    {
+        public int m_l;
+    }
+
+    public class Foo_4 : Foo_3
+    {
+        public int m_m;
+    }
+
+    public class Foo_5 : Foo_4
+    {
+        public int m_n;
+    }
+
+    // C# lays the interfaces in reverse order in metadata. So IFoo_1 is the first and IFoo is last
+    public class Foo2 : IFoo, IFoo_5, IFoo_4, IFoo_3, IFoo_2, IFoo_1
+    {
+        public int m_i;
+    }
+
+    public struct FooSVT
+    {
+        public int m_i;
+        public int m_j;
+    }
+
+    public struct FooORVT
+    {
+        public Object m_o;
+        public Foo m_f;
+    }
+
+    public class CastingPerf
+    {
+        public static int j, j1, j2, j3, j4, j5, j6, j7, j8, j9;
+        public static Foo foo = new Foo();
+        public static Foo2 foo2 = new Foo2();
+        public static Foo n = null;
+        public static Foo_5 foo_5 = new Foo_5();
+        public static FooSVT svt = new FooSVT();
+        public static FooORVT orvt = new FooORVT();
+
+        public static Object o, o1, o2, o3, o4, o5, o6, o7, o8, o9;
+        public static Foo f, f1, f2, f3, f4, f5, f6, f7, f8, f9;
+        public static IFoo ifo, ifo1, ifo2, ifo3, ifo4, ifo5, ifo6, ifo7, ifo8, ifo9;
+        public static IFoo_5 if_0, if_1, if_2, if_3, if_4, if_5, if_6, if_7, if_8, if_9;
+
+        [Benchmark]
+        public static void ObjFooIsObj()
+        {
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    o = foo;
+        }
+
+        [Benchmark]
+        public static void FooObjIsFoo()
+        {
+            o = foo;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    f = (Foo)o;
+        }
+
+        [Benchmark]
+        public static void FooObjIsNull()
+        {
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    o = (Foo)n;
+        }
+
+        [Benchmark]
+        public static void FooObjIsDescendant()
+        {
+            o = foo_5;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    f = (Foo)o;
+        }
+
+        [Benchmark]
+        public static void IFooFooIsIFoo()
+        {
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    ifo = foo;
+        }
+
+        [Benchmark]
+        public static void IFooObjIsIFoo()
+        {
+            o = foo;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    ifo = (IFoo)o;
+        }
+
+        [Benchmark]
+        public static void IFooObjIsIFooInterAlia()
+        {
+            o = foo2;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    if_0 = (IFoo_5)o;
+        }
+
+        [Benchmark]
+        public static void IFooObjIsDescendantOfIFoo()
+        {
+            o = foo_5;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    ifo = (IFoo)o;
+        }
+
+        [Benchmark]
+        public static void ObjInt()
+        {
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    o = (Object)j;
+        }
+
+        [Benchmark]
+        public static void IntObj()
+        {
+            o = (Object)1;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    j = (int)o;
+        }
+
+        [Benchmark]
+        public static void ObjScalarValueType()
+        {
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    o = svt;
+        }
+
+        [Benchmark]
+        public static void ScalarValueTypeObj()
+        {
+            o = svt;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    svt = (FooSVT)o;
+        }
+
+        [Benchmark]
+        public static void ObjObjrefValueType()
+        {
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    o = (Object)orvt;
+        }
+
+        [Benchmark]
+        public static void ObjrefValueTypeObj()
+        {
+            o = (Object)orvt;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    orvt = (FooORVT)o;
+        }
+
+        [Benchmark]
+        public static void FooObjCastIfIsa()
+        {
+            o = foo;
+
+            foreach (var iteration in Benchmark.Iterations)
+                using (iteration.StartMeasurement())
+                    if (o is Foo)
+                        f = (Foo)o;
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/src/performance/perflab/DelegatePerf.cs b/tests/src/performance/perflab/DelegatePerf.cs
new file mode 100644 (file)
index 0000000..667a352
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Xunit.Performance;
+using System;
+using Xunit;
+
+internal delegate long DelegateLong(Object obj, long x, long y);
+internal delegate void MultiDelegate(Object obj, long x, long y);
+
+internal delegate int SerializeDelegate();
+
+public class DelegatePerf
+{
+    [Benchmark]
+    public void DelegateInvoke()
+    {
+        DelegateLong dl = new DelegateLong(this.Invocable1);
+        Object obj = new Object();
+
+        long ret = dl(obj, 100, 100);
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                ret = dl(obj, 100, 100);
+    }
+
+    [Benchmark]
+    public void MulticastDelegateCombineInvoke()
+    {
+        MultiDelegate md = null;
+        Object obj = new Object();
+
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            MultiDelegate md1 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md2 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md3 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md4 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md5 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md6 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md7 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md8 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md9 = new MultiDelegate(this.Invocable2);
+            MultiDelegate md10 = new MultiDelegate(this.Invocable2);
+
+            using (iteration.StartMeasurement())
+            {
+                md = (MultiDelegate)Delegate.Combine(md1, md);
+                md = (MultiDelegate)Delegate.Combine(md2, md);
+                md = (MultiDelegate)Delegate.Combine(md3, md);
+                md = (MultiDelegate)Delegate.Combine(md4, md);
+                md = (MultiDelegate)Delegate.Combine(md5, md);
+                md = (MultiDelegate)Delegate.Combine(md6, md);
+                md = (MultiDelegate)Delegate.Combine(md7, md);
+                md = (MultiDelegate)Delegate.Combine(md8, md);
+                md = (MultiDelegate)Delegate.Combine(md9, md);
+                md = (MultiDelegate)Delegate.Combine(md10, md);
+            }
+        }
+
+        md(obj, 100, 100);
+    }
+
+    [Benchmark]
+    [InlineData(100)]
+    [InlineData(1000)]
+    public void MulticastDelegateInvoke(int length)
+    {
+        MultiDelegate md = null;
+        Object obj = new Object();
+
+        for (long i = 0; i < length; i++)
+            md = (MultiDelegate)Delegate.Combine(new MultiDelegate(this.Invocable2), md);
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                md(obj, 100, 100);
+    }
+
+    internal virtual long Invocable1(Object obj, long x, long y)
+    {
+        long i = x + y;
+        return x;
+    }
+
+    internal virtual void Invocable2(Object obj, long x, long y)
+    {
+        long i = x + y;
+    }
+}
diff --git a/tests/src/performance/perflab/EnumPerf.cs b/tests/src/performance/perflab/EnumPerf.cs
new file mode 100644 (file)
index 0000000..9e43572
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Reflection;
+using Xunit;
+
+public enum Color
+{
+    Black,
+    White,
+    Red,
+    Brown,
+    Yellow,
+    Purple,
+    Orange
+}
+
+public class EnumPerf
+{
+    [Benchmark]
+    [InlineData(Color.Red)]
+    public static void EnumCompareTo(Color color)
+    {
+        Color white = Color.White;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                color.CompareTo(white);
+    }
+
+    [Benchmark]
+    public static Type ObjectGetType()
+    {
+        Type tmp = null;
+        Color black = Color.Black;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                tmp = black.GetType();
+
+        return tmp;
+    }
+
+    [Benchmark]
+    public static Type ObjectGetTypeNoBoxing()
+    {
+        Type tmp = null;
+        object black = Color.Black;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                tmp = black.GetType();
+
+        return tmp;
+    }
+
+    [Benchmark]
+    public static bool EnumEquals()
+    {
+        Color black = Color.Black;
+        Color white = Color.White;
+        bool tmp = false;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                tmp = black.Equals(white);
+
+        return tmp;
+    }
+}
diff --git a/tests/src/performance/perflab/LowLevelPerf.cs b/tests/src/performance/perflab/LowLevelPerf.cs
new file mode 100644 (file)
index 0000000..76b3794
--- /dev/null
@@ -0,0 +1,766 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Runtime.CompilerServices;
+
+public class LowLevelPerf
+{
+    [Benchmark]
+    public static void EmptyStaticFunction()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+                Class.EmptyStaticFunction();
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void EmptyStaticFunction5Arg()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+                Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5);
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void EmptyInstanceFunction()
+    {
+        Class aClass = new Class();
+
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+                aClass.EmptyInstanceFunction();
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void InterfaceInterfaceMethod()
+    {
+        AnInterface aInterface = new Class();
+
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface);
+            }
+        }
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static void CallInterfaceMethod(AnInterface aInterface)
+    {
+        aInterface.InterfaceMethod();
+    }
+
+    [Benchmark]
+    public static void InterfaceInterfaceMethodLongHierarchy()
+    {
+        AnInterface aInterface = new LongHierarchyChildClass();
+
+        //generate all the not-used call site first
+        CallInterfaceMethod(new LongHierarchyClass1());
+        CallInterfaceMethod(new LongHierarchyClass2());
+        CallInterfaceMethod(new LongHierarchyClass3());
+        CallInterfaceMethod(new LongHierarchyClass4());
+        CallInterfaceMethod(new LongHierarchyClass5());
+        CallInterfaceMethod(new LongHierarchyClass6());
+        CallInterfaceMethod(new LongHierarchyClass7());
+        CallInterfaceMethod(new LongHierarchyClass8());
+        CallInterfaceMethod(new LongHierarchyClass9());
+        CallInterfaceMethod(new LongHierarchyClass11());
+        CallInterfaceMethod(new LongHierarchyClass12());
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                CallInterfaceMethod(aInterface);
+    }
+
+    [Benchmark]
+    public static void InterfaceInterfaceMethodSwitchCallType()
+    {
+        AnInterface aInterface = new LongHierarchyChildClass();
+        AnInterface aInterface1 = new LongHierarchyClass1();
+
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                CallInterfaceMethod(aInterface);
+                CallInterfaceMethod(aInterface1);
+            }
+        }
+    }
+
+    [Benchmark]
+    public static int ClassVirtualMethod()
+    {
+        SuperClass aClass = new Class();
+
+        int x = 0;
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                x = aClass.VirtualMethod();
+
+        return x;
+    }
+
+    [Benchmark]
+    public static void SealedClassInterfaceMethod()
+    {
+        SealedClass aSealedClass = new SealedClass();
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aSealedClass.InterfaceMethod();
+    }
+
+    [Benchmark]
+    public static void StructWithInterfaceInterfaceMethod()
+    {
+        StructWithInterface aStructWithInterface = new StructWithInterface();
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aStructWithInterface.InterfaceMethod();
+    }
+
+    [Benchmark]
+    public static void StaticIntPlus()
+    {
+        Class aClass = new Class();
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                Class.aStaticInt += 1;
+    }
+
+    [Benchmark]
+    public static bool ObjectStringIsString()
+    {
+        object aObjectString = "aString1";
+        bool b = false;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                b = aObjectString is String;
+
+        return b;
+    }
+
+    [Benchmark]
+    public static void NewDelegateClassEmptyInstanceFn()
+    {
+        Class aClass = new Class();
+        MyDelegate aMyDelegate;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aMyDelegate = new MyDelegate(aClass.EmptyInstanceFunction);
+    }
+
+    [Benchmark]
+    public static void NewDelegateClassEmptyStaticFn()
+    {
+        Class aClass = new Class();
+        MyDelegate aMyDelegate;
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aMyDelegate = new MyDelegate(Class.EmptyStaticFunction);
+    }
+
+    [Benchmark]
+    public static void InstanceDelegate()
+    {
+        Class aClass = new Class();
+        MyDelegate aInstanceDelegate = new MyDelegate(aClass.EmptyInstanceFunction);
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aInstanceDelegate();
+    }
+
+    [Benchmark]
+    public static void StaticDelegate()
+    {
+        Class aClass = new Class();
+        MyDelegate aStaticDelegate = new MyDelegate(Class.EmptyStaticFunction);
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aStaticDelegate();
+    }
+
+    [Benchmark]
+    public static void MeasureEvents()
+    {
+        Class aClass = new Class();
+        aClass.AnEvent += new MyDelegate(aClass.EmptyInstanceFunction);
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aClass.MeasureFire100();
+    }
+
+    [Benchmark]
+    public static void GenericClassWithIntGenericInstanceField()
+    {
+        GenericClass<int> aGenericClassWithInt = new GenericClass<int>();
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aGenericClassWithInt.aGenericInstanceFieldT = 1;
+    }
+
+    [Benchmark]
+    public static void GenericClassGenericStaticField()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                GenericClass<int>.aGenericStaticFieldT = 1;
+    }
+
+    [Benchmark]
+    public static int GenericClassGenericInstanceMethod()
+    {
+        GenericClass<int> aGenericClassWithInt = new GenericClass<int>();
+
+        int x = 0;
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                x = aGenericClassWithInt.ClassGenericInstanceMethod();
+
+        return x;
+    }
+
+    [Benchmark]
+    public static int GenericClassGenericStaticMethod()
+    {
+        int x = 0;
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                x = GenericClass<int>.ClassGenericStaticMethod();
+
+        return x;
+    }
+
+    [Benchmark]
+    public static int GenericGenericMethod()
+    {
+        // Warmup
+        int x = 0;
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                x = Class.GenericMethod<int>();
+
+        return x;
+    }
+
+    [Benchmark]
+    public static void GenericClassWithSTringGenericInstanceMethod()
+    {
+        GenericClass<string> aGenericClassWithString = new GenericClass<string>();
+        string aString = "foo";
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                aGenericClassWithString.aGenericInstanceFieldT = aString;
+    }
+
+    [Benchmark]
+    public static int ForeachOverList100Elements()
+    {
+        List<int> iList = new List<int>();
+        for (int i = 0; i < 100; i++)
+            iList.Add(i);
+
+        int iResult = 0;
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                foreach (int i in iList)
+                    iResult = i;
+
+        return iResult;
+    }
+
+    [Benchmark]
+    public static Type TypeReflectionObjectGetType()
+    {
+        Type type = null;
+        object anObject = "aString";
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                type = anObject.GetType();
+
+        return type;
+    }
+
+    [Benchmark]
+    public static Type TypeReflectionArrayGetType()
+    {
+        Type type = null;
+        object anArray = new string[0];
+
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                type = anArray.GetType();
+
+        return type;
+    }
+
+    [Benchmark]
+    public static string IntegerFormatting()
+    {
+        int number = Int32.MaxValue;
+
+        string result = null;
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                result = number.ToString();
+
+        return result;
+    }
+}
+
+#region Support Classes
+// classes and method needed to perform the experiments. 
+
+public interface AnInterface
+{
+    int InterfaceMethod();
+}
+
+public class SuperClass : AnInterface
+{
+    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+    public virtual int InterfaceMethod() { return 2; }
+
+    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+    public virtual int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public struct ValueType
+{
+    public int x;
+    public int y;
+    public int z;
+}
+
+public delegate int MyDelegate();
+
+public struct StructWithInterface : AnInterface
+{
+    public int x;
+    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+    public int InterfaceMethod()
+    {
+        return x++;
+    }
+}
+
+public sealed class SealedClass : SuperClass
+{
+    public int aInstanceInt;
+    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return aInstanceInt++;
+    }
+    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod()
+    {
+        return aInstanceInt++;
+    }
+}
+
+/// <summary>
+/// A example class.  It inherits, overrides, has intefaces etc.  
+/// It excercises most of the common runtime features 
+/// </summary>
+public class Class : SuperClass
+{
+    public event MyDelegate AnEvent;
+
+    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+    public override int VirtualMethod() { return aInstanceInt++; }
+
+    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return aInstanceInt++; }
+
+    public int aInstanceInt;
+    public string aInstanceString;
+
+    public static int aStaticInt;
+    public static string aStaticString = "Hello";
+    public static ValueType aStaticValueType;
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static int EmptyStaticFunction()
+    {
+        return aStaticInt++;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static int EmptyStaticFunction5Arg(int arg1, int arg2, int arg3, int arg4, int arg5)
+    {
+        return aStaticInt++;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public int EmptyInstanceFunction()
+    {
+        return aInstanceInt++;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static int GenericMethod<T>()
+    {
+        return aStaticInt++;
+    }
+
+    public void MeasureFire100()
+    {
+        #region callAnEvent
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        AnEvent();
+        //});
+        #endregion
+    }
+}
+
+public class GenericClass<T>
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public T ClassGenericInstanceMethod()
+    {
+        tmp++; // need this to not be optimized away
+        return aGenericInstanceFieldT;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static T ClassGenericStaticMethod()
+    {
+        sTmp++; // need this to not be optimized away
+        return aGenericStaticFieldT;
+    }
+
+    public static int sTmp;
+    public int tmp;
+    public T aGenericInstanceFieldT;
+    public static T aGenericStaticFieldT;
+}
+
+#region LongHierarchyClass
+public class LongHierarchyClass1 : AnInterface
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public virtual int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public virtual int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass2 : LongHierarchyClass1
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass3 : LongHierarchyClass2
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass4 : LongHierarchyClass3
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass5 : LongHierarchyClass4
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass6 : LongHierarchyClass5
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass7 : LongHierarchyClass6
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass8 : LongHierarchyClass7
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass9 : LongHierarchyClass8
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass10 : LongHierarchyClass9
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass11 : LongHierarchyClass10
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyClass12 : LongHierarchyClass11
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+public class LongHierarchyChildClass : LongHierarchyClass12
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int InterfaceMethod() { return 2; }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public override int VirtualMethod()
+    {
+        return 1;
+    }
+}
+
+#endregion
+
+#endregion
+
diff --git a/tests/src/performance/perflab/PerfLab.csproj b/tests/src/performance/perflab/PerfLab.csproj
new file mode 100644 (file)
index 0000000..fac8e78
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>PerfLab</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{507E3CC2-5D95-414D-9F01-2A106FC177DC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <DefineConstants>$(DefineConstants);STATIC</DefineConstants>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BlockCopyPerf.cs" />
+    <Compile Include="CastingPerf.cs" />
+    <Compile Include="CastingPerf2.cs" />
+    <Compile Include="DelegatePerf.cs" />
+    <Compile Include="EnumPerf.cs" />
+    <Compile Include="LowLevelPerf.cs" />
+    <Compile Include="ReflectionPerf.cs" />
+    <Compile Include="StackWalk.cs" />
+    <Compile Include="ThreadingPerf.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="project.json" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), performance.targets))\performance.targets" />
+</Project>
\ No newline at end of file
diff --git a/tests/src/performance/perflab/Properties/AssemblyInfo.cs b/tests/src/performance/perflab/Properties/AssemblyInfo.cs
new file mode 100644 (file)
index 0000000..b4d55dc
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Xunit.Performance;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("PerfLabTests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PerfLabTests")]
+[assembly: AssemblyCopyright("Copyright \u00A9  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("8761596f-209c-4277-a6ab-b7696ecf8f30")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+
+[assembly: OptimizeForBenchmarks]
\ No newline at end of file
diff --git a/tests/src/performance/perflab/ReflectionPerf.cs b/tests/src/performance/perflab/ReflectionPerf.cs
new file mode 100644 (file)
index 0000000..a4b1086
--- /dev/null
@@ -0,0 +1,3286 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.Reflection;
+using System.Collections.Generic;
+using System.Threading;
+using Microsoft.Xunit.Performance;
+#pragma warning disable 67
+
+public class GetMember
+{
+    // all these fields will be initialized in init, so that they can be used directly in invocation
+    private static readonly TypeInfo s_t1;
+    private static readonly TypeInfo s_t2;
+    private static readonly TypeInfo s_t3;
+    private static readonly TypeInfo s_t4;
+    private static readonly TypeInfo s_t5;
+    private static readonly TypeInfo s_t6;
+    private static readonly TypeInfo s_t7;
+    private static readonly TypeInfo s_t8;
+    private static readonly TypeInfo s_t9;
+    private static readonly TypeInfo s_t10;
+    private static readonly TypeInfo s_t11;
+    private static readonly TypeInfo s_t12;
+    private static readonly TypeInfo s_t13;
+    private static readonly TypeInfo s_t14;
+    private static readonly TypeInfo s_t15;
+    private static readonly TypeInfo s_t16;
+    private static readonly TypeInfo s_t17;
+    private static readonly TypeInfo s_t18;
+    private static readonly TypeInfo s_t19;
+    private static readonly TypeInfo s_t20;
+
+    static GetMember()
+    {
+        s_t1 = typeof(Class1).GetTypeInfo();
+        s_t2 = typeof(Class2).GetTypeInfo();
+        s_t3 = typeof(Class3).GetTypeInfo();
+        s_t4 = typeof(Class4).GetTypeInfo();
+        s_t5 = typeof(Class5).GetTypeInfo();
+        s_t6 = typeof(Class6).GetTypeInfo();
+        s_t7 = typeof(Class7).GetTypeInfo();
+        s_t8 = typeof(Class8).GetTypeInfo();
+        s_t9 = typeof(Class9).GetTypeInfo();
+        s_t10 = typeof(Class10).GetTypeInfo();
+        s_t11 = typeof(Class11).GetTypeInfo();
+        s_t12 = typeof(Class12).GetTypeInfo();
+        s_t13 = typeof(Class13).GetTypeInfo();
+        s_t14 = typeof(Class14).GetTypeInfo();
+        s_t15 = typeof(Class15).GetTypeInfo();
+        s_t16 = typeof(Class16).GetTypeInfo();
+        s_t17 = typeof(Class17).GetTypeInfo();
+        s_t18 = typeof(Class18).GetTypeInfo();
+        s_t19 = typeof(Class19).GetTypeInfo();
+        s_t20 = typeof(Class20).GetTypeInfo();
+    }
+
+    [Benchmark]
+    public static void GetField()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredField("f1");
+                s_t1.GetDeclaredField("f2");
+                s_t1.GetDeclaredField("f3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod1()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2");
+                s_t1.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod2()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2");
+                s_t1.GetDeclaredMethod("m3");
+                s_t2.GetDeclaredMethod("m1");
+                s_t2.GetDeclaredMethod("m2");
+                s_t2.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod3()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2"); //TODO: check if we can really get the method
+                s_t1.GetDeclaredMethod("m3");
+                s_t2.GetDeclaredMethod("m1");
+                s_t2.GetDeclaredMethod("m2");
+                s_t2.GetDeclaredMethod("m3");
+                s_t3.GetDeclaredMethod("m1");
+                s_t3.GetDeclaredMethod("m2");
+                s_t3.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod4()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2"); //TODO: check if we can really get the method
+                s_t1.GetDeclaredMethod("m3");
+                s_t2.GetDeclaredMethod("m1");
+                s_t2.GetDeclaredMethod("m2");
+                s_t2.GetDeclaredMethod("m3");
+                s_t3.GetDeclaredMethod("m1");
+                s_t3.GetDeclaredMethod("m2");
+                s_t3.GetDeclaredMethod("m3");
+                s_t4.GetDeclaredMethod("m1");
+                s_t4.GetDeclaredMethod("m2");
+                s_t4.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod5()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2");
+                s_t1.GetDeclaredMethod("m3");
+                s_t2.GetDeclaredMethod("m1");
+                s_t2.GetDeclaredMethod("m2");
+                s_t2.GetDeclaredMethod("m3");
+                s_t3.GetDeclaredMethod("m1");
+                s_t3.GetDeclaredMethod("m2");
+                s_t3.GetDeclaredMethod("m3");
+                s_t4.GetDeclaredMethod("m1");
+                s_t4.GetDeclaredMethod("m2");
+                s_t4.GetDeclaredMethod("m3");
+                s_t5.GetDeclaredMethod("m1");
+                s_t5.GetDeclaredMethod("m2");
+                s_t5.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod10()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2");
+                s_t1.GetDeclaredMethod("m3");
+                s_t2.GetDeclaredMethod("m1");
+                s_t2.GetDeclaredMethod("m2");
+                s_t2.GetDeclaredMethod("m3");
+                s_t3.GetDeclaredMethod("m1");
+                s_t3.GetDeclaredMethod("m2");
+                s_t3.GetDeclaredMethod("m3");
+                s_t4.GetDeclaredMethod("m1");
+                s_t4.GetDeclaredMethod("m2");
+                s_t4.GetDeclaredMethod("m3");
+                s_t5.GetDeclaredMethod("m1");
+                s_t5.GetDeclaredMethod("m2");
+                s_t5.GetDeclaredMethod("m3");
+
+                s_t6.GetDeclaredMethod("m1");
+                s_t6.GetDeclaredMethod("m2");
+                s_t6.GetDeclaredMethod("m3");
+                s_t7.GetDeclaredMethod("m1");
+                s_t7.GetDeclaredMethod("m2");
+                s_t7.GetDeclaredMethod("m3");
+                s_t8.GetDeclaredMethod("m1");
+                s_t8.GetDeclaredMethod("m2");
+                s_t8.GetDeclaredMethod("m3");
+                s_t9.GetDeclaredMethod("m1");
+                s_t9.GetDeclaredMethod("m2");
+                s_t9.GetDeclaredMethod("m3");
+                s_t10.GetDeclaredMethod("m1");
+                s_t10.GetDeclaredMethod("m2");
+                s_t10.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod12()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2");
+                s_t1.GetDeclaredMethod("m3");
+                s_t2.GetDeclaredMethod("m1");
+                s_t2.GetDeclaredMethod("m2");
+                s_t2.GetDeclaredMethod("m3");
+                s_t3.GetDeclaredMethod("m1");
+                s_t3.GetDeclaredMethod("m2");
+                s_t3.GetDeclaredMethod("m3");
+                s_t4.GetDeclaredMethod("m1");
+                s_t4.GetDeclaredMethod("m2");
+                s_t4.GetDeclaredMethod("m3");
+                s_t5.GetDeclaredMethod("m1");
+                s_t5.GetDeclaredMethod("m2");
+                s_t5.GetDeclaredMethod("m3");
+
+                s_t6.GetDeclaredMethod("m1");
+                s_t6.GetDeclaredMethod("m2");
+                s_t6.GetDeclaredMethod("m3");
+                s_t7.GetDeclaredMethod("m1");
+                s_t7.GetDeclaredMethod("m2");
+                s_t7.GetDeclaredMethod("m3");
+                s_t8.GetDeclaredMethod("m1");
+                s_t8.GetDeclaredMethod("m2");
+                s_t8.GetDeclaredMethod("m3");
+                s_t9.GetDeclaredMethod("m1");
+                s_t9.GetDeclaredMethod("m2");
+                s_t9.GetDeclaredMethod("m3");
+                s_t10.GetDeclaredMethod("m1");
+                s_t10.GetDeclaredMethod("m2");
+                s_t10.GetDeclaredMethod("m3");
+
+                s_t11.GetDeclaredMethod("m1");
+                s_t11.GetDeclaredMethod("m2");
+                s_t11.GetDeclaredMethod("m3");
+                s_t12.GetDeclaredMethod("m1");
+                s_t12.GetDeclaredMethod("m2");
+                s_t12.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod15()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2");
+                s_t1.GetDeclaredMethod("m3");
+                s_t2.GetDeclaredMethod("m1");
+                s_t2.GetDeclaredMethod("m2");
+                s_t2.GetDeclaredMethod("m3");
+                s_t3.GetDeclaredMethod("m1");
+                s_t3.GetDeclaredMethod("m2");
+                s_t3.GetDeclaredMethod("m3");
+                s_t4.GetDeclaredMethod("m1");
+                s_t4.GetDeclaredMethod("m2");
+                s_t4.GetDeclaredMethod("m3");
+                s_t5.GetDeclaredMethod("m1");
+                s_t5.GetDeclaredMethod("m2");
+                s_t5.GetDeclaredMethod("m3");
+
+                s_t6.GetDeclaredMethod("m1");
+                s_t6.GetDeclaredMethod("m2");
+                s_t6.GetDeclaredMethod("m3");
+                s_t7.GetDeclaredMethod("m1");
+                s_t7.GetDeclaredMethod("m2");
+                s_t7.GetDeclaredMethod("m3");
+                s_t8.GetDeclaredMethod("m1");
+                s_t8.GetDeclaredMethod("m2");
+                s_t8.GetDeclaredMethod("m3");
+                s_t9.GetDeclaredMethod("m1");
+                s_t9.GetDeclaredMethod("m2");
+                s_t9.GetDeclaredMethod("m3");
+                s_t10.GetDeclaredMethod("m1");
+                s_t10.GetDeclaredMethod("m2");
+                s_t10.GetDeclaredMethod("m3");
+
+                s_t11.GetDeclaredMethod("m1");
+                s_t11.GetDeclaredMethod("m2");
+                s_t11.GetDeclaredMethod("m3");
+                s_t12.GetDeclaredMethod("m1");
+                s_t12.GetDeclaredMethod("m2");
+                s_t12.GetDeclaredMethod("m3");
+                s_t13.GetDeclaredMethod("m1");
+                s_t13.GetDeclaredMethod("m2");
+                s_t13.GetDeclaredMethod("m3");
+                s_t14.GetDeclaredMethod("m1");
+                s_t14.GetDeclaredMethod("m2");
+                s_t14.GetDeclaredMethod("m3");
+                s_t15.GetDeclaredMethod("m1");
+                s_t15.GetDeclaredMethod("m2");
+                s_t15.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetMethod20()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetDeclaredMethod("m1");
+                s_t1.GetDeclaredMethod("m2");
+                s_t1.GetDeclaredMethod("m3");
+                s_t2.GetDeclaredMethod("m1");
+                s_t2.GetDeclaredMethod("m2");
+                s_t2.GetDeclaredMethod("m3");
+                s_t3.GetDeclaredMethod("m1");
+                s_t3.GetDeclaredMethod("m2");
+                s_t3.GetDeclaredMethod("m3");
+                s_t4.GetDeclaredMethod("m1");
+                s_t4.GetDeclaredMethod("m2");
+                s_t4.GetDeclaredMethod("m3");
+                s_t5.GetDeclaredMethod("m1");
+                s_t5.GetDeclaredMethod("m2");
+                s_t5.GetDeclaredMethod("m3");
+
+                s_t6.GetDeclaredMethod("m1");
+                s_t6.GetDeclaredMethod("m2");
+                s_t6.GetDeclaredMethod("m3");
+                s_t7.GetDeclaredMethod("m1");
+                s_t7.GetDeclaredMethod("m2");
+                s_t7.GetDeclaredMethod("m3");
+                s_t8.GetDeclaredMethod("m1");
+                s_t8.GetDeclaredMethod("m2");
+                s_t8.GetDeclaredMethod("m3");
+                s_t9.GetDeclaredMethod("m1");
+                s_t9.GetDeclaredMethod("m2");
+                s_t9.GetDeclaredMethod("m3");
+                s_t10.GetDeclaredMethod("m1");
+                s_t10.GetDeclaredMethod("m2");
+                s_t10.GetDeclaredMethod("m3");
+
+                s_t11.GetDeclaredMethod("m1");
+                s_t11.GetDeclaredMethod("m2");
+                s_t11.GetDeclaredMethod("m3");
+                s_t12.GetDeclaredMethod("m1");
+                s_t12.GetDeclaredMethod("m2");
+                s_t12.GetDeclaredMethod("m3");
+                s_t13.GetDeclaredMethod("m1");
+                s_t13.GetDeclaredMethod("m2");
+                s_t13.GetDeclaredMethod("m3");
+                s_t14.GetDeclaredMethod("m1");
+                s_t14.GetDeclaredMethod("m2");
+                s_t14.GetDeclaredMethod("m3");
+                s_t15.GetDeclaredMethod("m1");
+                s_t15.GetDeclaredMethod("m2");
+                s_t15.GetDeclaredMethod("m3");
+
+                s_t16.GetDeclaredMethod("m1");
+                s_t16.GetDeclaredMethod("m2");
+                s_t16.GetDeclaredMethod("m3");
+                s_t17.GetDeclaredMethod("m1");
+                s_t17.GetDeclaredMethod("m2");
+                s_t17.GetDeclaredMethod("m3");
+                s_t18.GetDeclaredMethod("m1");
+                s_t18.GetDeclaredMethod("m2");
+                s_t18.GetDeclaredMethod("m3");
+                s_t19.GetDeclaredMethod("m1");
+                s_t19.GetDeclaredMethod("m2");
+                s_t19.GetDeclaredMethod("m3");
+                s_t20.GetDeclaredMethod("m1");
+                s_t20.GetDeclaredMethod("m2");
+                s_t20.GetDeclaredMethod("m3");
+            }
+        }
+    }
+
+    /*
+    [Benchmark]
+    public static void GetConstructor()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                s_t1.GetConstructor(new Type[] { });
+                s_t1.GetConstructor(new Type[] { typeof(int) });
+                s_t1.GetConstructor(new Type[] { typeof(int), typeof(int) });
+                s_t2.GetConstructor(new Type[] { });
+                s_t2.GetConstructor(new Type[] { typeof(int) });
+                s_t2.GetConstructor(new Type[] { typeof(int), typeof(int) });
+                s_t3.GetConstructor(new Type[] { });
+                s_t3.GetConstructor(new Type[] { typeof(int) });
+                s_t3.GetConstructor(new Type[] { typeof(int), typeof(int) });
+                s_t4.GetConstructor(new Type[] { });
+                s_t4.GetConstructor(new Type[] { typeof(int) });
+                s_t4.GetConstructor(new Type[] { typeof(int), typeof(int) });
+                s_t5.GetConstructor(new Type[] { });
+                s_t5.GetConstructor(new Type[] { typeof(int) });
+                s_t5.GetConstructor(new Type[] { typeof(int), typeof(int) });
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetProperty()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                PropertyInfo pi = s_t1.GetProperty("p1");
+                pi.GetSetMethod();
+                pi.GetGetMethod();
+                pi = s_t1.GetProperty("p2");
+                pi.GetSetMethod();
+                pi.GetGetMethod();
+                pi = s_t1.GetProperty("p3");
+                pi.GetSetMethod();
+                pi.GetGetMethod();
+                pi = s_t2.GetProperty("p1");
+                pi.GetSetMethod();
+                pi.GetGetMethod();
+                pi = s_t2.GetProperty("p2");
+                pi.GetSetMethod();
+                pi.GetGetMethod();
+                pi = s_t2.GetProperty("p3");
+                pi.GetSetMethod();
+                pi.GetGetMethod();
+                s_t3.GetProperty("p1");
+                s_t3.GetProperty("p2");
+                s_t3.GetProperty("p3");
+                s_t4.GetProperty("p1");
+                s_t4.GetProperty("p2");
+                s_t4.GetProperty("p3");
+                s_t5.GetProperty("p1");
+                s_t5.GetProperty("p2");
+                s_t5.GetProperty("p3");
+            }
+        }
+    }
+
+    [Benchmark]
+    public static void GetEvent()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            using (iteration.StartMeasurement())
+            {
+                EventInfo ei = s_t1.GetEvent("e1");
+                ei.GetAddMethod();
+                ei.GetRaiseMethod();
+                ei.GetRemoveMethod();
+                s_t1.GetEvent("e2");
+                ei.GetAddMethod();
+                ei.GetRaiseMethod();
+                ei.GetRemoveMethod();
+                s_t1.GetEvent("e3");
+                ei.GetAddMethod();
+                ei.GetRaiseMethod();
+                ei.GetRemoveMethod();
+                s_t2.GetEvent("e1");
+                ei.GetAddMethod();
+                ei.GetRaiseMethod();
+                ei.GetRemoveMethod();
+                s_t2.GetEvent("e2");
+                ei.GetAddMethod();
+                ei.GetRaiseMethod();
+                ei.GetRemoveMethod();
+                s_t2.GetEvent("e3");
+                ei.GetAddMethod();
+                ei.GetRaiseMethod();
+                ei.GetRemoveMethod();
+                s_t3.GetEvent("e1");
+                s_t3.GetEvent("e2");
+                s_t3.GetEvent("e3");
+                s_t4.GetEvent("e1");
+                s_t4.GetEvent("e2");
+                s_t4.GetEvent("e3");
+                s_t5.GetEvent("e1");
+                s_t5.GetEvent("e2");
+                s_t5.GetEvent("e3");
+            }
+        }
+    }
+    */
+}
+
+#region ClassDef
+public class Class1
+{
+    public Class1() { }
+    public Class1(int i) { }
+    public Class1(int i, int ii) { }
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+public class Class2
+{
+    public Class2() { }
+    public Class2(int i) { }
+    public Class2(int i, int ii) { }
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class3
+{
+    public Class3() { }
+    public Class3(int i) { }
+    public Class3(int i, int ii) { }
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class4
+{
+    public Class4() { }
+    public Class4(int i) { }
+    public Class4(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class5
+{
+    public Class5() { }
+    public Class5(int i) { }
+    public Class5(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class6
+{
+    public Class6() { }
+    public Class6(int i) { }
+    public Class6(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class7
+{
+    public Class7() { }
+    public Class7(int i) { }
+    public Class7(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class8
+{
+    public Class8() { }
+    public Class8(int i) { }
+    public Class8(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class9
+{
+    public Class9() { }
+    public Class9(int i) { }
+    public Class9(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class10
+{
+    public Class10() { }
+    public Class10(int i) { }
+    public Class10(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class11
+{
+    public Class11() { }
+    public Class11(int i) { }
+    public Class11(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class12
+{
+    public Class12() { }
+    public Class12(int i) { }
+    public Class12(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class13
+{
+    public Class13() { }
+    public Class13(int i) { }
+    public Class13(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class14
+{
+    public Class14() { }
+    public Class14(int i) { }
+    public Class14(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class15
+{
+    public Class15() { }
+    public Class15(int i) { }
+    public Class15(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class16
+{
+    public Class16() { }
+    public Class16(int i) { }
+    public Class16(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class17
+{
+    public Class17() { }
+    public Class17(int i) { }
+    public Class17(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class18
+{
+    public Class18() { }
+    public Class18(int i) { }
+    public Class18(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class19
+{
+    public Class19() { }
+    public Class19(int i) { }
+    public Class19(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+
+public class Class20
+{
+    public Class20() { }
+    public Class20(int i) { }
+    public Class20(int i, int ii) { }
+
+    public int f0 = 0;
+    static public int f1 = 0;
+    public int f2 = 0;
+    public int f3 = 0;
+    public int f4 = 0;
+    public int f5 = 0;
+    public int f6 = 0;
+    public int f7 = 0;
+    public int f8 = 0;
+    public int f9 = 0;
+    public int f10 = 0;
+    public int f11 = 0;
+    public int f12 = 0;
+    public int f13 = 0;
+    public int f14 = 0;
+    public int f15 = 0;
+    public int f16 = 0;
+    public int f17 = 0;
+    public int f18 = 0;
+    public int f19 = 0;
+    public int f20 = 0;
+    public int f21 = 0;
+    public int f22 = 0;
+    public int f23 = 0;
+    public int f24 = 0;
+
+    public void m1() { }
+    static public void m2() { }
+    public void m3() { }
+    public void m4() { }
+    public void m5() { }
+    public void m6() { }
+    public void m7() { }
+    public void m8() { }
+    public void m9() { }
+    public void m10() { }
+    public void m11() { }
+    public void m12() { }
+    public void m13() { }
+    public void m14() { }
+    public void m15() { }
+    public void m16() { }
+    public void m17() { }
+    public void m18() { }
+    public void m19() { }
+    public void m20() { }
+    public void m21() { }
+    public void m22() { }
+    public void m23() { }
+    public void m24() { }
+
+    public int p0 { get { return 1; } set { } }
+    static public int p1 { get { return 1; } set { } }
+    public int p2 { get { return 1; } set { } }
+    public int p3 { get { return 1; } set { } }
+    public int p4 { get { return 1; } set { } }
+    public int p5 { get { return 1; } set { } }
+    public int p6 { get { return 1; } set { } }
+    public int p7 { get { return 1; } set { } }
+    public int p8 { get { return 1; } set { } }
+    public int p9 { get { return 1; } set { } }
+    public int p10 { get { return 1; } set { } }
+    public int p11 { get { return 1; } set { } }
+    public int p12 { get { return 1; } set { } }
+    public int p13 { get { return 1; } set { } }
+    public int p14 { get { return 1; } set { } }
+    public int p15 { get { return 1; } set { } }
+    public int p16 { get { return 1; } set { } }
+    public int p17 { get { return 1; } set { } }
+    public int p18 { get { return 1; } set { } }
+    public int p19 { get { return 1; } set { } }
+    public int p20 { get { return 1; } set { } }
+    public int p21 { get { return 1; } set { } }
+    public int p22 { get { return 1; } set { } }
+    public int p23 { get { return 1; } set { } }
+    public int p24 { get { return 1; } set { } }
+
+    public event d e0;
+    static public event d e1;
+    public event d e2;
+    public event d e3;
+    public event d e4;
+    public event d e5;
+    public event d e6;
+    public event d e7;
+    public event d e8;
+    public event d e9;
+    public event d e10;
+    public event d e11;
+    public event d e12;
+    public event d e13;
+    public event d e14;
+    public event d e15;
+    public event d e16;
+    public event d e17;
+    public event d e18;
+    public event d e19;
+    public event d e20;
+    public event d e21;
+    public event d e22;
+    public event d e23;
+    public event d e24;
+
+    public void NoWarning()
+    {
+        e0 += new d(m1);
+        e1 += new d(m1);
+        e2 += new d(m1);
+        e3 += new d(m1);
+        e4 += new d(m1);
+        e5 += new d(m1);
+        e6 += new d(m1);
+        e7 += new d(m1);
+        e8 += new d(m1);
+        e9 += new d(m1);
+        e10 += new d(m1);
+        e11 += new d(m1);
+        e12 += new d(m1);
+        e13 += new d(m1);
+        e14 += new d(m1);
+        e15 += new d(m1);
+        e16 += new d(m1);
+        e17 += new d(m1);
+        e18 += new d(m1);
+        e19 += new d(m1);
+        e20 += new d(m1);
+        e21 += new d(m1);
+        e22 += new d(m1);
+        e23 += new d(m1);
+        e24 += new d(m1);
+    }
+}
+#endregion 
+
+
+public delegate void d();
diff --git a/tests/src/performance/perflab/StackWalk.cs b/tests/src/performance/perflab/StackWalk.cs
new file mode 100644 (file)
index 0000000..5a9eb88
--- /dev/null
@@ -0,0 +1,75 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Runtime.CompilerServices;
+
+public static class StackWalk
+{
+    [Benchmark]
+    public static void Walk()
+    {
+        A(5);
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int A(int a) { return B(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int B(int a) { return C(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int C(int a) { return D(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int D(int a) { return E(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int E(int a) { return F(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int F(int a) { return G(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int G(int a) { return H(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int H(int a) { return I(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int I(int a) { return J(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int J(int a) { return K(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int K(int a) { return L(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int L(int a) { return M(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int M(int a) { return N(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int N(int a) { return O(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int O(int a) { return P(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int P(int a) { return Q(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int Q(int a) { return R(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int R(int a) { return S(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int S(int a) { return T(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int T(int a) { return U(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int U(int a) { return V(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int V(int a) { return W(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int W(int a) { return X(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int X(int a) { return Y(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int Y(int a) { return Z(a + 5); }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int Z(int a)
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                GC.Collect(0);
+
+        return 55;
+    }
+}
\ No newline at end of file
diff --git a/tests/src/performance/perflab/ThreadingPerf.cs b/tests/src/performance/perflab/ThreadingPerf.cs
new file mode 100644 (file)
index 0000000..f8f999f
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Xunit.Performance;
+using System;
+using System.Threading;
+
+public class JITIntrinsics
+{
+    private static int s_i;
+    private static string s_s;
+
+    [Benchmark]
+    public static void CompareExchangeIntNoMatch()
+    {
+        s_i = 0;
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                Interlocked.CompareExchange(ref s_i, 5, -1);
+    }
+
+    [Benchmark]
+    public static void CompareExchangeIntMatch()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            s_i = 1;
+            using (iteration.StartMeasurement())
+                Interlocked.CompareExchange(ref s_i, 5, 1);
+        }
+    }
+
+    [Benchmark]
+    public static void CompareExchangeObjNoMatch()
+    {
+        s_s = "Hello";
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                Interlocked.CompareExchange(ref s_s, "World", "What?");
+    }
+
+    [Benchmark]
+    public static void CompareExchangeObjMatch()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+        {
+            s_s = "What?";
+            using (iteration.StartMeasurement())
+                Interlocked.CompareExchange(ref s_s, "World", "What?");
+        }
+    }
+
+    [Benchmark]
+    public static void InterlockedIncrement()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                Interlocked.Increment(ref s_i);
+    }
+
+    [Benchmark]
+    public static void InterlockedDecrement()
+    {
+        foreach (var iteration in Benchmark.Iterations)
+            using (iteration.StartMeasurement())
+                Interlocked.Decrement(ref s_i);
+    }
+}
\ No newline at end of file
diff --git a/tests/src/performance/perflab/project.json b/tests/src/performance/perflab/project.json
new file mode 100644 (file)
index 0000000..2ded5c3
--- /dev/null
@@ -0,0 +1,13 @@
+{
+  "dependencies": {
+    "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816",
+    "System.Reflection": "4.0.10",
+    "xunit": "2.1.0",
+    "Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0028"
+  },
+  "frameworks": {
+    "dnxcore50": {
+      "imports": "portable-net45+win8"
+    }
+  }
+}
diff --git a/tests/src/performance/performance.targets b/tests/src/performance/performance.targets
new file mode 100644 (file)
index 0000000..b245de0
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" InitialTargets="CheckForBuildTools" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <CLRTestKind>BuildOnly</CLRTestKind>
+  </PropertyGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
+