summaryrefslogtreecommitdiff
path: root/tests/src/performance/perflab/CastingPerf.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/performance/perflab/CastingPerf.cs')
-rw-r--r--tests/src/performance/perflab/CastingPerf.cs644
1 files changed, 324 insertions, 320 deletions
diff --git a/tests/src/performance/perflab/CastingPerf.cs b/tests/src/performance/perflab/CastingPerf.cs
index bd314974cc..fa83a19d72 100644
--- a/tests/src/performance/perflab/CastingPerf.cs
+++ b/tests/src/performance/perflab/CastingPerf.cs
@@ -5,385 +5,389 @@ using Microsoft.Xunit.Performance;
using System;
using System.Collections.Generic;
-public interface IFoo
+namespace PerfLabTests
{
-}
-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()
+ public interface IFoo
{
- 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(InnerIterationCount=100000)]
- public static void ObjFooIsObj()
+ public interface IFoo_1
{
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- o = foo;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void ObjFooIsObj2()
+ public interface IFoo_2
{
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- o_ar = foo;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void ObjObjIsFoo()
+ public interface IFoo_3
{
- o = foo;
-
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- o_ar = (Object[])o;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void FooObjIsFoo()
+ public interface IFoo_4
{
- o = foo;
-
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- f = (Foo[])o;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void FooObjIsFoo2()
+ public interface IFoo_5
{
- o_ar = foo;
-
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- f = (Foo[])o_ar;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void FooObjIsNull()
+ // 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
{
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- o = (Foo[])n;
+ public int m_i;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void FooObjIsDescendant()
+ public class Foo_1 : Foo
{
- o = foo_5;
-
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- f = (Foo[])o;
+ public int m_j;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void IFooFooIsIFoo()
+ public class Foo_2 : Foo_1
{
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- ifo = foo;
+ public int m_k;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void IFooObjIsIFoo()
+ public class Foo_3 : Foo_2
{
- o = foo;
-
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- ifo = (IFoo[])o;
+ public int m_l;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void IFooObjIsIFooInterAlia()
+ public class Foo_4 : Foo_3
{
- o = foo2;
-
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- if_5 = (IFoo_5[])o;
+ public int m_m;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void IFooObjIsDescendantOfIFoo()
+ public class Foo_5 : Foo_4
{
- o = foo_5;
-
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- ifo = (IFoo[])o;
+ public int m_n;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void ObjInt()
+ // 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
{
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- o = (Object)j;
+ public int m_i;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void IntObj()
+ public struct FooSVT
{
- o = (Object)j;
-
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- k = (int[])o;
+ public int m_i;
+ public int m_j;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void ObjScalarValueType()
+ public struct FooORVT
{
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- o = svt;
+ public Object m_o;
+ public Foo m_f;
}
- [Benchmark(InnerIterationCount=100000)]
- public static void ScalarValueTypeObj()
+ public interface IMyInterface1 { }
+ public interface IMyInterface2 { }
+ public class MyClass1 : IMyInterface1 { }
+ public class MyClass2 : IMyInterface2 { }
+ public class MyClass4<T> : IMyInterface1 { }
+
+ public class CastingPerf
{
- o = svt;
+ 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];
+ }
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- svt = (FooSVT[])o;
- }
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void ObjFooIsObj()
+ {
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ o = foo;
+ }
- [Benchmark(InnerIterationCount=100000)]
- public static void ObjObjrefValueType()
- {
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- o = (Object)orvt;
- }
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void ObjFooIsObj2()
+ {
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ o_ar = foo;
+ }
- [Benchmark(InnerIterationCount=100000)]
- public static void ObjrefValueTypeObj()
- {
- o = (Object)orvt;
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void ObjObjIsFoo()
+ {
+ o = foo;
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- orvt = (FooORVT[])o;
- }
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ o_ar = (Object[])o;
+ }
- [Benchmark(InnerIterationCount=100000)]
- public static void FooObjCastIfIsa()
- {
- o = foo;
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void FooObjIsFoo()
+ {
+ o = foo;
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- if (o is Foo[])
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
f = (Foo[])o;
- }
+ }
- [Benchmark(InnerIterationCount=100000)]
- public static bool CheckObjIsInterfaceYes()
- {
- bool res = false;
- Object obj = new MyClass1();
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- res = obj is IMyInterface1;
- return res;
- }
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void FooObjIsFoo2()
+ {
+ o_ar = foo;
- [Benchmark(InnerIterationCount=100000)]
- public static bool CheckObjIsInterfaceNo()
- {
- bool res = false;
- Object obj = new MyClass2();
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- res = obj is IMyInterface1;
- return res;
- }
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ f = (Foo[])o_ar;
+ }
- [Benchmark(InnerIterationCount=100000)]
- public static bool CheckIsInstAnyIsInterfaceYes()
- {
- bool res = false;
- Object obj = new MyClass4<List<string>>();
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- res = obj is IMyInterface1;
- return res;
- }
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void FooObjIsNull()
+ {
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ o = (Foo[])n;
+ }
- [Benchmark(InnerIterationCount=100000)]
- public static bool CheckIsInstAnyIsInterfaceNo()
- {
- bool res = false;
- Object obj = new MyClass4<List<string>>();
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- res = obj is IMyInterface2;
- return res;
- }
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void FooObjIsDescendant()
+ {
+ o = foo_5;
- [Benchmark(InnerIterationCount=100000)]
- public static bool CheckArrayIsInterfaceYes()
- {
- bool res = false;
- Object[] arr = new MyClass1[5];
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- res = arr is IMyInterface1[];
- return res;
- }
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ f = (Foo[])o;
+ }
- [Benchmark(InnerIterationCount=100000)]
- public static bool CheckArrayIsInterfaceNo()
- {
- bool res = false;
- Object[] arr = new MyClass2[5];
- foreach (var iteration in Benchmark.Iterations)
- using (iteration.StartMeasurement())
- for (int i = 0; i < Benchmark.InnerIterationCount; i++)
- res = arr is IMyInterface1[];
- return res;
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void IFooFooIsIFoo()
+ {
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ ifo = foo;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void IFooObjIsIFoo()
+ {
+ o = foo;
+
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ ifo = (IFoo[])o;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void IFooObjIsIFooInterAlia()
+ {
+ o = foo2;
+
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ if_5 = (IFoo_5[])o;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void IFooObjIsDescendantOfIFoo()
+ {
+ o = foo_5;
+
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ ifo = (IFoo[])o;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void ObjInt()
+ {
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ o = (Object)j;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void IntObj()
+ {
+ o = (Object)j;
+
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ k = (int[])o;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void ObjScalarValueType()
+ {
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ o = svt;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void ScalarValueTypeObj()
+ {
+ o = svt;
+
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ svt = (FooSVT[])o;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void ObjObjrefValueType()
+ {
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ o = (Object)orvt;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void ObjrefValueTypeObj()
+ {
+ o = (Object)orvt;
+
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ orvt = (FooORVT[])o;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static void FooObjCastIfIsa()
+ {
+ o = foo;
+
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ if (o is Foo[])
+ f = (Foo[])o;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static bool CheckObjIsInterfaceYes()
+ {
+ bool res = false;
+ Object obj = new MyClass1();
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ res = obj is IMyInterface1;
+ return res;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static bool CheckObjIsInterfaceNo()
+ {
+ bool res = false;
+ Object obj = new MyClass2();
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ res = obj is IMyInterface1;
+ return res;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static bool CheckIsInstAnyIsInterfaceYes()
+ {
+ bool res = false;
+ Object obj = new MyClass4<List<string>>();
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ res = obj is IMyInterface1;
+ return res;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static bool CheckIsInstAnyIsInterfaceNo()
+ {
+ bool res = false;
+ Object obj = new MyClass4<List<string>>();
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ res = obj is IMyInterface2;
+ return res;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static bool CheckArrayIsInterfaceYes()
+ {
+ bool res = false;
+ Object[] arr = new MyClass1[5];
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ res = arr is IMyInterface1[];
+ return res;
+ }
+
+ [Benchmark(InnerIterationCount = 100000)]
+ public static bool CheckArrayIsInterfaceNo()
+ {
+ bool res = false;
+ Object[] arr = new MyClass2[5];
+ foreach (var iteration in Benchmark.Iterations)
+ using (iteration.StartMeasurement())
+ for (int i = 0; i < Benchmark.InnerIterationCount; i++)
+ res = arr is IMyInterface1[];
+ return res;
+ }
}
-}
+} \ No newline at end of file