public void DetailedSpeedTestWithOptimization() { var mp = new MathParser(); mp.LocalVariables.Add("x", 5); var expr = "(3x+2)(2(2x+1))"; int itr = 3000; double creationTimeAndTokenization = BenchmarkUtil.Benchmark(() => mp.GetTokens(expr), 1); var tokens = mp.GetTokens(expr); double parsingTime = BenchmarkUtil.Benchmark(() => mp.Parse(tokens), itr); double totalTime = creationTimeAndTokenization + parsingTime; //var mp = new MathParser(); //mp.LocalVariables.Add("x", 5); //var expr = "(3x+2)(2(2x+1))"; //int itr = 50; double parsingTime2 = BenchmarkUtil.Benchmark(() => mp.Parse(expr), itr); double totalTime2 = parsingTime2; }
private void BuildAndCacheExpression() { // we can parse tokens once and save them tokens = parser.GetTokens(expression.Value); // remove any variables previously added to parser.LocalVariables // this should be cheaper than getting a new parser foreach (var variable in usedVariables) { parser.LocalVariables.Remove(variable.Name); } // find variables in tokens and add them to used variables list usedVariables.Clear(); foreach (var token in tokens) { var variable = Fsm.Variables.FindVariable(token) ?? FsmVariables.GlobalVariables.FindVariable(token); if (variable != null && !usedVariables.Contains(variable)) { usedVariables.Add(variable); } } // store the expression so we know if its changed cachedExpression = expression.Value; }
public void SpeedTests() { var parser = new MathParser(); parser.LocalVariables.Add("x", 10); var list = parser.GetTokens("(3x+2)"); var time = BenchmarkUtil.Benchmark(() => parser.Parse("(3x+2)"), 25000); var time2 = BenchmarkUtil.Benchmark(() => parser.Parse(list), 25000); Assert.IsTrue(time >= time2); }
public void DetailedSpeedTestWithOptimization() { var parser = new MathParser(); parser.LocalVariables.Add("x", 5); var expr = "(3x+2)(2(2x+1))"; const int itr = 3000; var creationTimeAndTokenization = BenchmarkUtil.Benchmark(() => parser.GetTokens(expr), 1); var tokens = parser.GetTokens(expr); var parsingTime = BenchmarkUtil.Benchmark(() => parser.Parse(tokens), itr); var totalTime = creationTimeAndTokenization + parsingTime; Console.WriteLine("Parsing Time: " + parsingTime); Console.WriteLine("Total Time: " + totalTime); var parsingTime2 = BenchmarkUtil.Benchmark(() => parser.Parse(expr), itr); Console.WriteLine("Parsing Time 2: " + parsingTime2); Console.WriteLine("Total Time: " + parsingTime2); }
public double Int(string expr, double lowerLimit, double upperLimit) { var expression = _parser.GetTokens(expr); return(IntegralCalculus.Integrate(x => Eval(expression, x), lowerLimit, upperLimit)); }