示例#1
0
        public void TestPerformance()
        {
            int[] testArray = { 1, 3, 8, 4 };
            var   function  = new Helper.Function <int, long>(PerformanceFunction);
            Expression <Func <int[], long> > lambdaExpression = array =>
                                                                (function(new[] { array[0], array[2], array[3] }) > function(new[] { array[0], array[2] })) ?
                                                                (function(new[] { array[0], array[2], array[1], array[1] }) + (function(new[] { array[0], array[2], array[3] }))) *
                                                                (function(new[] { array[0], array[2], array[1], array[1] }) + (function(new[] { array[0], array[2], array[3] }))) +
                                                                (function(new[] { array[0], array[2], array[1], array[1] }) + (function(new[] { array[0], array[2], array[3] }))) +
                                                                (function(new[] { array[0], array[2], array[1], array[1] }) + (function(new[] { array[0], array[2], array[3] }))) :
                                                                (function(new[] { array[0], array[2] }) - (function(new[] { array[0], array[2], array[3] }))) * 3;

            var stopwatch       = Stopwatch.StartNew();
            var resWithoutOptim = lambdaExpression.Compile().Invoke(testArray);

            stopwatch.Stop();
            var time1 = stopwatch.Elapsed.Seconds;

            stopwatch = Stopwatch.StartNew();
            var resWithOptim = Helper.OptimizedCalculation(lambdaExpression, testArray, function);

            stopwatch.Stop();
            var time2 = stopwatch.Elapsed.Seconds;


            Assert.IsTrue(time2 < time1, string.Format(PerformError,
                                                       "timer2 : " + resWithOptim,
                                                       "timer1 : " + resWithoutOptim));
        }
示例#2
0
        public void TestBinaryWithInt()
        {
            int[] testArray = { 1, 18, 0, -5, 12, 21 };
            var   function  = new Helper.Function <int, float>(TestFunctionInt);
            Expression <Func <int[], float> > lambdaExpression = array =>
                                                                 (function(new[] { array[0], array[2], array[5] }) + function(new[] { array[1], array[2], array[3] })) -
                                                                 function(new[] { array[0], array[2], array[5] });
            var resWithoutOptim = lambdaExpression.Compile().Invoke(testArray);
            var resWithOptim    = Helper.OptimizedCalculation(lambdaExpression, testArray, function);

            Assert.AreEqual(resWithOptim, resWithoutOptim, string.Format(AreEqualError, resWithOptim, resWithoutOptim));
        }
示例#3
0
        public void TestConditionalWithString()
        {
            string[] testArray = { "aa", "bb", "cc", "dd", "ee", "ff" };
            var      function  = new Helper.Function <string, int>(TestFunctionString);
            Expression <Func <string[], bool> > lambdaExpression = array =>
                                                                   (function(new[] { array[0], array[2] }) < function(new[] { array[0], array[1] })) ?
                                                                   (function(new[] { array[0], array[2], array[4], array[4] }) > (function(new[] { array[0], array[2] }))) :
                                                                   (function(new[] { array[0], array[2] }) <= (function(new[] { array[1], array[3], array[3] })));
            var resWithoutOptim = lambdaExpression.Compile().Invoke(testArray);
            var resWithOptim    = Helper.OptimizedCalculation(lambdaExpression, testArray, function);

            Assert.AreEqual(resWithOptim, resWithoutOptim, string.Format(AreEqualError, resWithOptim, resWithoutOptim));
        }