public void DynamicConversionTest()
        {
            var obj1 = new ErrorProneAbstracted();
            dynamic proxy1 = new DynamicProxy(obj1, true);

            ErrorProneAbstracted abst = proxy1;
            Assert.IsNotNull(abst);
        }
 public void DynamicProxyCastOperationTest()
 {
     if (System.Threading.Interlocked.CompareExchange(ref this.disposed, 1, -1) == -1)
     {
         var real = new ErrorProneAbstracted();
         dynamic proxy = new DynamicProxy(real);
         IDoWork interf = proxy;
         if (interf != null)
         {
             interf.DoWork();
             Assert.IsTrue(interf.Default == 0);
             interf.Default = 65;
             interf.DoWorkErrored(12);
         }
     }
 }
 public void DynamicProxyFactoryTest()
 {
     var obj1 = new ErrorProneAbstracted();
     dynamic proxy = DynamicProxyFactory.CreateDynamicProxy(obj1);
     Assert.IsTrue(proxy.Default == 0);
 }
        public void MethodCallingPerformance()
        {
            int iter = 5000;
            var obj1 = new ErrorProneAbstracted();
            var obj2 = new ErrorProneAbstracted();
            dynamic proxy1 = new DynamicProxy(obj1, true);
            dynamic proxy2 = new DynamicProxy(obj2, true, true);
            int result = 1;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < iter; i++)
            {
                proxy1.DoWork();
                result = proxy1.DoWork2(12);
                result = proxy1.DoWork3(12, 123);
            }
            sw.Stop();
            long tick1 = sw.ElapsedMilliseconds;
            sw.Reset();

            sw.Start();
            for (int i = 0; i < iter; i++)
            {
                proxy2.DoWork();
                result = proxy2.DoWork2(12);
                result = proxy2.DoWork3(12, 123);
            }
            sw.Stop();
            long tick2 = sw.ElapsedMilliseconds;

            Debug.WriteLine("{0} - {1} Diff: {2}", tick1, tick2, tick1 - tick2);
            Assert.IsTrue(tick1 > tick2);
        }
        public void FieldAccessorPerformanceTest()
        {
            int loopCount = 100;
            ErrorProneAbstracted instance = new ErrorProneAbstracted();
            System.Reflection.FieldInfo fi = typeof(ErrorProneAbstracted).GetField("Id");
            ShareDeployed.Proxy.FastReflection.FastField ff = new Proxy.FastReflection.FastField(fi);
            ShareDeployed.Proxy.FastReflection.FastField<ErrorProneAbstracted> ff2 = new Proxy.FastReflection.FastField<ErrorProneAbstracted>(fi);
            ShareDeployed.Proxy.FastReflection.FastField<ErrorProneAbstracted, int> ff3 = new Proxy.FastReflection.FastField<ErrorProneAbstracted, int>(fi);
            var dynField = ShareDeployed.Proxy.FastReflection.DynamicField.Create(fi);

            Stopwatch sw = new Stopwatch();
            sw.Start();
            int id = 0;
            for (int i = 1; i <= loopCount; i++)
            {
                fi.SetValue(instance, 12);
                id = (int)fi.GetValue(instance);
            }
            sw.Stop();
            long reflTime = sw.ElapsedMilliseconds;

            sw.Reset();
            sw.Start();
            for (int i = 1; i <= loopCount; i++)
            {
                ff.Set(instance, i);
                id = (int)ff.Get(instance);
            }
            sw.Stop();
            long fastFieldTime = sw.ElapsedMilliseconds;

            sw.Reset();
            sw.Start();
            for (int i = 1; i <= loopCount; i++)
            {
                ff2.Set(instance, i);
                id = (int)ff2.Get(instance);
            }
            sw.Stop();
            long fastFieldTime2 = sw.ElapsedMilliseconds;

            sw.Reset();
            sw.Start();
            for (int i = 1; i <= loopCount; i++)
            {
                ff3.Set(instance, i);
                id = ff3.Get(instance);
            }
            sw.Stop();
            long fastFieldTime3 = sw.ElapsedMilliseconds;

            sw.Reset();
            sw.Start();
            for (int i = 1; i <= loopCount; i++)
            {
                dynField.SetValue(instance, 12);
                id = (int)dynField.GetValue(instance);
            }
            sw.Stop();
            long dynFieldTime = sw.ElapsedMilliseconds;

            Debug.WriteLine(string.Format("Difference is:{0},{1},{2},{3},{4}", reflTime, fastFieldTime, fastFieldTime2, fastFieldTime3, dynFieldTime));
            Assert.IsTrue(fastFieldTime3 < fastFieldTime2 && fastFieldTime2 < fastFieldTime);
            Assert.IsTrue(dynFieldTime < reflTime && fastFieldTime < reflTime);
        }
        public void FastPropertyTest()
        {
            var real = new ErrorProneAbstracted();
            dynamic proxy = new DynamicProxy(real);

            Assert.IsTrue(proxy.Default == 0);
            proxy.Default = 23;
            Assert.IsTrue(proxy.Default == 23);

            Assert.IsTrue(TypePropertyMapper.Instance.Get(real.GetType(), "Default") != null);
        }
        public void FastFieldGetSetTest()
        {
            ErrorProneAbstracted objInstance = new ErrorProneAbstracted();
            System.Reflection.FieldInfo fi = objInstance.GetType().GetField("Id");
            Proxy.FastReflection.FastField ff = new Proxy.FastReflection.FastField(fi);
            Proxy.FastReflection.FastField<ErrorProneAbstracted, int> ff3 = new Proxy.FastReflection.FastField<ErrorProneAbstracted, int>(fi);
            var dynField = Proxy.FastReflection.DynamicField.Create(fi);

            int id = -1;
            Stopwatch sw = new Stopwatch();

            sw.Start();
            ff.Set(objInstance, 12);
            id = (int)ff.Get(objInstance);
            sw.Stop();

            long fastElapsed = sw.ElapsedTicks;
            Assert.IsTrue(id == 12);

            sw.Reset();
            sw.Start();
            fi.SetValue(objInstance, 13);
            id = (int)fi.GetValue(objInstance);
            sw.Stop();
            long reflectElapsed = sw.ElapsedTicks;
            Assert.IsTrue(id == 13);

            sw.Reset();
            sw.Start();
            dynField.SetValue(objInstance, 134);
            id = (int)dynField.GetValue(objInstance);
            sw.Stop();
            long dynElapsed = sw.ElapsedTicks;
            Assert.IsTrue(id == 134);

            sw.Reset();
            sw.Start();
            ff3.Set(objInstance, 17);
            id = ff3.Get(objInstance);
            sw.Stop();

            long fastGenElapsed = sw.ElapsedTicks;
            Assert.IsTrue(id == 17);

            Debug.WriteLine("FastField {0},FastField generic {1}, Reflection {2}, DynamicField {3}", fastElapsed, fastGenElapsed, reflectElapsed, dynElapsed);
            Assert.IsTrue(reflectElapsed > fastElapsed);
        }