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)); }
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)); }
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)); }