public void TestMethodPocoOverloadingPassAndGetValueNull() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tOut = Dynamic.InvokeMember(tPoco, "Func", tValue); Assert.AreEqual("int", tOut); Assert.AreEqual("int", (object)tOut); //should still be int because this uses runtime type var tOut2 = Dynamic.InvokeMember(tPoco, "Func", 1m); Assert.AreEqual("object", tOut2); var tOut3 = Dynamic.InvokeMember(tPoco, "Func", null); Assert.AreEqual("object", tOut3); var tOut4 = Dynamic.InvokeMember(tPoco, "Func", null, null, "test", null, null, null); Assert.AreEqual("object 6", tOut4); var tOut5 = Dynamic.InvokeMember(tPoco, "Func", null, null, null, null, null, null); Assert.AreEqual("object 6", tOut5); }
public void TestCacheableMethodPocoGetValuePassNullDoubleCallTimed() { var tValue = new OverloadingMethPoco(); var tCachedInvoke = new CacheableInvocation(InvocationKind.InvokeMember, "Func", 1); var tInteration = 500000; var tWatch = TimeIt.Go(() => { var tOut = tCachedInvoke.Invoke(tValue, null); var tOut2 = tCachedInvoke.Invoke(tValue, 2); }, tInteration); var tMethodInfo = tValue.GetType().GetMethod("Func", new Type[] { typeof(object) }); var tMethodInfo2 = tValue.GetType().GetMethod("Func", new Type[] { typeof(int) }); var tWatch2 = TimeIt.Go(() => { var tOut = tMethodInfo.Invoke(tValue, new object[] { null }); var tOut2 = tMethodInfo2.Invoke(tValue, new object[] { 2 }); }, tInteration); TestContext.WriteLine("Impromptu: " + tWatch.Elapsed); TestContext.WriteLine("Reflection: " + tWatch2.Elapsed); TestContext.WriteLine("Impromptu VS Reflection: {0:0.0} x faster", (double)tWatch2.Elapsed.Ticks / tWatch.Elapsed.Ticks); Assert.Less(tWatch.Elapsed, tWatch2.Elapsed); }
public void MethodPocoGetValuePassNullDoubleCallTimed() { #if DEBUG Assert.Ignore("Visual Studio slows down dynamic too much in debug mode"); #endif var tValue = new OverloadingMethPoco(); Timer.Action1 = (() => { var tOut = Dynamic.InvokeMember(tValue, "Func", null); var tOut2 = Dynamic.InvokeMember(tValue, "Func", 2); }); var tMethodInfo = tValue.GetType().GetMethod("Func", new Type[] { typeof(object) }); var tMethodInfo2 = tValue.GetType().GetMethod("Func", new Type[] { typeof(int) }); Timer.Action2 = (() => { var tOut = tMethodInfo.Invoke(tValue, new object[] { null }); var tOut2 = tMethodInfo2.Invoke(tValue, new object[] { 2 }); }); var elapsed = Timer.Go(3 * TimeIt.Million); Console.WriteLine("Impromptu: " + elapsed.Item1); Console.WriteLine("Refelection: " + elapsed.Item2); Console.WriteLine("Impromptu VS Reflection: {0}", TimeIt.RelativeSpeed(elapsed)); Assert.Less(elapsed.Item1, elapsed.Item2); }
public void CacheableMethodPocoGetValuePassNullDoubleCallTimed() { var tValue = new OverloadingMethPoco(); var tCachedInvoke = new CacheableInvocation(InvocationKind.InvokeMember, "Func", 1); Timer.Action1 = (() => { var tOut = tCachedInvoke.Invoke(tValue, null); var tOut2 = tCachedInvoke.Invoke(tValue, 2); }); var tMethodInfo = tValue.GetType().GetMethod("Func", new Type[] { typeof(object) }); var tMethodInfo2 = tValue.GetType().GetMethod("Func", new Type[] { typeof(int) }); Timer.Action2 = (() => { var tOut = tMethodInfo.Invoke(tValue, new object[] { null }); var tOut2 = tMethodInfo2.Invoke(tValue, new object[] { 2 }); }); var elapsed = Timer.Go(); Console.WriteLine("Impromptu: " + elapsed.Item1); Console.WriteLine("Refelection: " + elapsed.Item2); Console.WriteLine("Impromptu VS Reflection: {0}", TimeIt.RelativeSpeed(elapsed)); Assert.Less(elapsed.Item1, elapsed.Item2); }
public void TestMethodPocoGetValuePassNullDoubleCallTimed() { #if DEBUG Assert.Ignore("Visual Studio slows down dynamic too much in debug mode"); #endif var tValue = new OverloadingMethPoco(); var tInteration = 500000; var tWatch = TimeIt.Go(() => { var tOut = Impromptu.InvokeMember(tValue, "Func", null); var tOut2 = Impromptu.InvokeMember(tValue, "Func", 2); }, tInteration); var tMethodInfo = tValue.GetType().GetMethod("Func", new Type[] { typeof(object) }); var tMethodInfo2 = tValue.GetType().GetMethod("Func", new Type[] { typeof(int) }); var tWatch2 = TimeIt.Go(() => { var tOut = tMethodInfo.Invoke(tValue, new object[] { null }); var tOut2 = tMethodInfo2.Invoke(tValue, new object[] { 2 }); }, tInteration); TestContext.WriteLine("Impromptu: " + tWatch.Elapsed); TestContext.WriteLine("Reflection: " + tWatch2.Elapsed); TestContext.WriteLine("Impromptu VS Reflection: {0:0.0} x faster", (double)tWatch2.Elapsed.Ticks / tWatch.Elapsed.Ticks); Assert.Less(tWatch.Elapsed, tWatch2.Elapsed); }
public void OverloadMethodTest() { var tPoco = new OverloadingMethPoco(); var tActsLike = tPoco.ActLike <IOverloadingMethod>(); var tValue = 1; Assert.AreEqual("int", tActsLike.Func(tValue)); Assert.AreEqual("object", tActsLike.Func((object)tValue)); }
public void TestMethodPocoOverloadingPass2AndGetValueArgOptional() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var arg = InvokeArg.Create; var tOut = Dynamic.InvokeMember(tPoco, "Func", arg("two", tValue), arg("one", tValue)); Assert.AreEqual("object named", tOut); Assert.AreEqual("object named", (object)tOut); }
public void TestCacheableMethodPocoOverloadingPassAndGetValueArgOptional() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tCachedIvnocation = new CacheableInvocation(InvocationKind.InvokeMember, "Func", argCount: 1, argNames: new[] { "two" }); var tOut = tCachedIvnocation.Invoke(tPoco, tValue); Assert.AreEqual("object named", tOut); Assert.AreEqual("object named", (object)tOut); }
public void TestMethodPocoOverloadingPassAndGetValueArg() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tOut = Dynamic.InvokeMember(tPoco, "Func", new InvokeArg("arg", tValue)); Assert.AreEqual("int", tOut); Assert.AreEqual("int", (object)tOut); //should still be int because this uses runtime type var tOut2 = Dynamic.InvokeMember(tPoco, "Func", 1m); Assert.AreEqual("object", tOut2); var tOut3 = Dynamic.InvokeMember(tPoco, "Func", new { Anon = 1 }); Assert.AreEqual("object", tOut3); }
public void TestMethodStaticOverloadingPassAndGetValue() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tOut = Impromptu.InvokeMember(tPoco, "Func", tValue); Assert.AreEqual("int", tOut); Assert.AreEqual("int", (object)tOut); //should still be int because this uses runtime type var tOut2 = Impromptu.InvokeMember(tPoco, "Func", 1m); Assert.AreEqual("object", tOut2); var tOut3 = Impromptu.InvokeMember(tPoco, "Func", new{ Anon = 1 }); Assert.AreEqual("object", tOut3); }
public void TestCachedMethodStaticOverloadingPassAndGetValue() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tCachedInvoke = new CacheableInvocation(InvocationKind.InvokeMember, "Func", argCount: 1); var tOut = tCachedInvoke.Invoke(tPoco, tValue); Assert.AreEqual("int", tOut); Assert.AreEqual("int", (object)tOut); //should still be int because this uses runtime type var tOut2 = tCachedInvoke.Invoke(tPoco, 1m); Assert.AreEqual("object", tOut2); var tOut3 = tCachedInvoke.Invoke(tPoco, new { Anon = 1 }); Assert.AreEqual("object", tOut3); }
public void MethodPocoGetValuePassNullTimed() { #if DEBUG Assert.Ignore("Visual Studio slows down dynamic too much in debug mode"); #endif var tValue = new OverloadingMethPoco(); Timer.Action1=(() => { var tOut = Dynamic.InvokeMember(tValue, "Func", null); }); var tMethodInfo = tValue.GetType().GetMethod("Func", new Type[] { typeof(object)}); Timer.Action2=(() => { var tOut = tMethodInfo.Invoke(tValue, new object[] { null}); }); var elapsed = Timer.Go(3 * TimeIt.Million); Console.WriteLine("Impromptu: " + elapsed.Item1); Console.WriteLine("Refelection: " + elapsed.Item2); Console.WriteLine("Impromptu VS Reflection: {0}", TimeIt.RelativeSpeed(elapsed)); Assert.Less(elapsed.Item1, elapsed.Item2); }
public void OverloadMethodTest() { var tPoco = new OverloadingMethPoco(); var tActsLike = tPoco.ActLike<IOverloadingMethod>(); var tValue = 1; Assert.AreEqual("int", tActsLike.Func(tValue)); Assert.AreEqual("object", tActsLike.Func((object)tValue)); }
public void TestMethodStaticOverloadingPassAndGetValue() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tOut = Dynamic.InvokeMember(tPoco, "Func", tValue); Assert.AreEqual("int", tOut); Assert.AreEqual("int", (object)tOut); //should still be int because this uses runtime type var tOut2 = Dynamic.InvokeMember(tPoco, "Func", 1m); Assert.AreEqual("object", tOut2); var tOut3 = Dynamic.InvokeMember(tPoco, "Func", new { Anon = 1 }); Assert.AreEqual("object", tOut3); }
public void TestMethodPocoOverloadingPassAndGetValueNull() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tOut = Impromptu.InvokeMember(tPoco, "Func", tValue); Assert.AreEqual("int", tOut); Assert.AreEqual("int", (object)tOut); //should still be int because this uses runtime type var tOut2 = Impromptu.InvokeMember(tPoco, "Func", 1m); Assert.AreEqual("object", tOut2); var tOut3 = Impromptu.InvokeMember(tPoco, "Func", null); Assert.AreEqual("object", tOut3); var tOut4 = Impromptu.InvokeMember(tPoco, "Func", null, null, "test", null, null, null); Assert.AreEqual("object 6", tOut4); var tOut5 = Impromptu.InvokeMember(tPoco, "Func", null, null, null, null, null, null); Assert.AreEqual("object 6", tOut5); }
public void TestMethodPocoOverloadingPass2AndGetValueArgOptional() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var arg = InvokeArg.Create; var tOut = Impromptu.InvokeMember(tPoco, "Func", arg("two", tValue), arg("one", tValue)); Assert.AreEqual("object named", tOut); Assert.AreEqual("object named", (object)tOut); }
public void TestCacheableMethodPocoOverloadingPassAndGetValueArgOptional() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tCachedIvnocation = new CacheableInvocation(InvocationKind.InvokeMember, "Func", argCount: 1, argNames: new[] {"two"}); var tOut = tCachedIvnocation.Invoke(tPoco, tValue); Assert.AreEqual("object named", tOut); Assert.AreEqual("object named", (object)tOut); }
public void TestMethodPocoOverloadingPassAndGetValueArg() { var tPoco = new OverloadingMethPoco(); var tValue = 1; var tOut = Impromptu.InvokeMember(tPoco, "Func", new InvokeArg("arg", tValue)); Assert.AreEqual("int", tOut); Assert.AreEqual("int", (object)tOut); //should still be int because this uses runtime type var tOut2 = Impromptu.InvokeMember(tPoco, "Func", 1m); Assert.AreEqual("object", tOut2); var tOut3 = Impromptu.InvokeMember(tPoco, "Func", new { Anon = 1 }); Assert.AreEqual("object", tOut3); }
public void CacheableMethodPocoGetValuePassNullDoubleCallTimed() { var tValue = new OverloadingMethPoco(); var tCachedInvoke = new CacheableInvocation(InvocationKind.InvokeMember, "Func", 1); Timer.Action1=(() => { var tOut = tCachedInvoke.Invoke(tValue, null); var tOut2 = tCachedInvoke.Invoke(tValue, 2); }); var tMethodInfo = tValue.GetType().GetMethod("Func", new Type[] { typeof(object) }); var tMethodInfo2 = tValue.GetType().GetMethod("Func", new Type[] { typeof(int) }); Timer.Action2=(() => { var tOut = tMethodInfo.Invoke(tValue, new object[] { null }); var tOut2 = tMethodInfo2.Invoke(tValue, new object[] { 2 }); }); var elapsed = Timer.Go(); Console.WriteLine("Impromptu: " + elapsed.Item1); Console.WriteLine("Refelection: " + elapsed.Item2); Console.WriteLine("Impromptu VS Reflection: {0}", TimeIt.RelativeSpeed(elapsed)); Assert.Less(elapsed.Item1, elapsed.Item2); }