コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        public double Int(string expr, double lowerLimit, double upperLimit)
        {
            var expression = _parser.GetTokens(expr);

            return(IntegralCalculus.Integrate(x => Eval(expression, x), lowerLimit, upperLimit));
        }